This blog contains software testing tips and concepts. We thought to share our theoretical and practical knowledge.
Monday, March 31, 2008
Security Testing - CSS or XSS
Generally hackers try to embed malicious script into a vulnerable dynamic web applications. This malicious script is executed and hacker can steal the data. The use of XSS might compromise private information, manipulate or steal cookies, create requests that can be mistaken for those of a valid user, or execute malicious code on the end-user systems.
To avoid cross site scripting vulnerabilities, the application should use encoded HTML content and it should not allow any URL or data, which contains <script and %3C%2Fscript.
In web so many tools are available to test this. I used a freeware called Webscarab. Also you can go through following links to know more about XSS.
Cross Site Scripting Definition - Wiki
Cross site Scripting FAQ
Sample Videos from Microsoft
Saturday, March 29, 2008
Special characters recognition
"
[
]
{
&
*
/
?
|
Silktest is using those chars for different purpose. What can you do is, you can create a function to create correct tag for any string.
Friday, March 28, 2008
CSS - Style Sheets
CSS stands for Cascading Style Sheets. By using CSS, we can extend the HTML Tags. It can reduce the inconsistency.Style sheets are expanding the ability to improve the appearance of web pages. Element by element,you can define the way you want things to look in a style sheet. Your paragraphs will all take on the formatting you associate with the P element in your style sheet. If you want to define more than one look for an element, you can create classes of an element and assign the classes to the elements when you define them in the pages.
Advantages:
- Easy maintenance
- Making changes to the layout
- Pages load faster
- Consistency
- Saves time
Disadvantages:
Browsers have varying levels of compliance with Style Sheets. This means that some Style Sheet features are supported and some are not.
Wednesday, March 26, 2008
Test Management and Motivation
Few words from Sara Rees:
Whilst the professional pessimist is a trait to be nurtured in our test analysts, it does have its down side. Testers can easily slide into total pessimism about the project as a whole.
From a project perspective, this approach can lead to valuable data generated by
testing becoming blanketed under a wave of negativity, and dismissed accordingly.
From a test team perspective, the difficulty becomes one of motivation. How do you
keep people committed and energetic about the task in hand when they already
believe it will fail?
Quote1:
One of the keys to this is to evidence progress. During team meetings ask
each member for their rating (on a scale of 1-10) on the quality of the
application. In the early days, the rating may be rather low, but you will be able
to demonstrate an improvement over time. If rampant negativity breaks out,
remind them of how things have changed.
Quote2:
The next major influencing factor is you! Your team must see that despite
deadlines, you continue to champion the quality issues.
I also like to put Jeff Nyman comments here. Jeff is a moderator in SQAforums and is a great testing management guru. You can read the Original post.
Question: How would you motivate the team members in scenarios where there is no much work to be assigned to them (basically during a lean period)?
Jeff Nyman:
what I've done in the past with my teams is encourage them -- during projects -- to keep track of things they would like to during the "lean times." Usually during projects ("the time of pain") you'll hear things like "Ah, if only I had time to restructure this test data!" Or: "If I had a tool that did this for me, my life would be a lot easier." During projects you feel the pain but you often can't do much to alleviate it. So I motivate people by saying "Keep track of those things. Write them down. When this project ends, lets look at working on that."
Then when those lean times are upon us I set up internal projects (internal to the test team, that is) and anyone who has made a good case for their project is given the go-ahead to work on that. I've had success with this approach because it gets people to focus on things that can practically help the team and/or that have caused them demonstrable stress in the past. Further, they are often motivated because, after all, they are the ones that brought up how they would like a solution.
And, of course, this lets them add to their skill-set. Note that this can include just learning things in general, even if there's no clear application for it yet. I had one tester, for example, express interest in open source automation even though, in our environment at the time, there was no need for it. I had him start investigating Ruby and the WATiR test framework. (As it turns out, we didn't use WATiR, but the tester did use Ruby scripts to monitor server logs and pull out information.) I had another person who was interested in learning if we could apply "planguage"-based requirements so I showed them the resource site of Tim Gilb and had them do some research. (It turns out we couldn't use "planguage" but the tester learned a lot about how to think about requirements.)
So what I try to do is encourage the team to keep track of things they would like to learn or like to do. That provides the necessary internal motivation rather than trying to impose motivation externally. Sometimes what people want to do is just for personal improvement and that's fine. Other times they don't so much need to learn something as apply what they already know. For example, maybe one tester wants to restructure our test data using a new schema. Maybe another wants to refactor our SilkTest automated test library. Maybe yet another wants to set up a forum-board knowledge base. Maybe another wants to set up a library of useful database queries.
Silktest - Click Vs DoClick
Click Method
Click means, silktest is doing physical mouse click. This method can be used for any type of object.
DoClick Method
DoClick means, silktest simulates browser click (DOM Click) and you cannot see physically. It will be worked only for few of web-based objects. It is not available for all objects.
Upto Silktest7.5
DoClick supported classes are HtmlLink class, HtmlImage, and HtmlPushButton for Internet Explorer DOM only. For Netscape 6, the DoClick method works only for menus and controls on the Netscape Navigator 6 toolbar.
Silktest2006R2
DoClick method available classes are HtmlCheckBox, HtmlColumn, HtmlHeading, HtmlImage, HtmlLink class, HtmlMarquee, HtmlPushButton, HtmlRadioButton, HtmlText, and HtmlTextField. The API click functionality is changed and an option is given for Compatibility.
Tuesday, March 25, 2008
Documentation testing
Documentation testing is nothing but testing concerned with the accuracy of documentation. Documentation meets its goal when it provides enough and necessary information to end users or customers. Below I have given a famous technical writer Richard Lippincott's comment.
Quote 1:
In recent years, usability has been recognized as an important
issue in documentation quality, and methodologies
have been developed to test and improve the user’s
speed, readability, and ability to find information.
Quote 2:
The documentation testing process can be considered the
test for the accuracy portion of the usability model.
It would fall under the key practice of quality assurance
activities as defined by Hackos in the Information
Process Maturity Model.
Testing Computer Software (ISBN: 0471358460) book talks about testing user manuals. It says that the effective documentation should have following benefits:
- Improves Usability
- Lowers customer support costs
- Improves reliability
- Increases Maintainability
- Improves Installability
- Enhances salability
- Reduces liability
Monday, March 24, 2008
Class Mapping in Winrunner
You can map the classes by two ways.
- By using Winrunner editor. Use GUI Map editor from Tools Menu.
- By setting dynamically through TSL (Test Script language) code. See following code snippet.
Code:
#-------------------------------------------------------------------------
# Method : WindowsCustomTextbox
# Author : T.Palani Selvam
# Purpose : It directs the execution according to actions in text box & mapping with given class.
# Parameters:
# sCtrlName - contains name of that control.
# sAction - contains type of the action should be happened.
# sData - contains data to be checked or played in controls.
# sCustomClass - contains class name to be mapped.
# Returns : Integer - returns int value (TRUE = 1 or non-Zero, FALSE = 0)
# Caller :
# Calls : - Nil -
#Logical expressions are assigned the value 1 if true, and 0 if false - From TSL Reference.
#-------------------------------------------------------------------------
public function WindowsCustomTextbox(in sCtrlName,in sAction,in sData, in sCustomClass) {
auto sResult;
auto sMappedClass;
auto sLocation;
get_class_map(sCustomClass , sMappedClass); #Get mapped Class name.
#Verify thr control name type.
sLocation = IdentifyType(sCtrlName);
if (sLocation != "") {
sCtrlName = "{class: edit,MSW_class: " & sCustomClass & ",location: " & sLocation & " }";
}
if (sMappedClass != "edit") {
set_class_map(sCustomClass , "edit"); #Mapping.
sResult = WindowsTextbox(sCtrlName,sAction,sData);
unset_class_map(sCustomClass); #released mapping.
}else {
sResult = WindowsTextbox(sCtrlName,sAction,sData);
}
return sResult;
} #end of function WindowsCustomTextbox
Sunday, March 23, 2008
Class Mapping in QuickTestPro
You can do by Object Identification dialog box from tools menu. For more information, you can refer help for Mapping User-Defined Test Object Classes.
Saturday, March 22, 2008
Class Mapping in Silktest
1. One is by using silktest editor. Go to Options->Class Map. Then set choose custom and standard classes.
2. Another option is by 4test coding. You can use Agent option OPT_CLASS_MAP. The class mapping table for custom objects, with each entry in the list in the form "custom_class = standard_class".
Friday, March 21, 2008
Silktest - Run script in different browsers
Below batch file is run for My_IE6DOM.opt (option set). You can try for suite instead of script-wise.
IE6DOM.bat
rem ******************************************************
rem Used to run the scripts for different option sets
rem *******************************************************
rem * Setting path to SilkTest application *
set APP_SILK="c:\Program Files\Segue\SilkTest\partner.exe"
rem * Setting path to Silk source *
set SRC_SILK=C:\Automation\AUT\Silk
rem * Setting SilkTest options file*
set SRC_OPTIONS=%SRC_SILK%\..\My_IE6DOM.opt
rem *****************************************
rem * Running Security test suite *
rem *****************************************
rem * Running Security Options test script *
%APP_SILK% -q -opt %SRC_OPTIONS% -r %SRC_SILK%\scripts\security.t
Class Mapping in VisualTest
Code snippet:
'--------------------------------------
' Method : WindowsCustomButtonClick
' Author : T.Palani Selvam
' Purpose : Clicks the given Button element.
' Parameters: sButton - String, Contains name of control
' sBtnValue - String, Contains value of control
' sCustomClass - String, contains custom class name.
' Returns : Integer
' Caller : WindowsHandleClick(sContext, sForm, sElement ,sElementValue , sElementType)
' Calls : - Nil -
'-------------------------------------------
Function WindowsCustomButtonClick(sButton As String, sBtnValue As String, sCustomClass As String) As Integer
WButtonSetClass(sCustomClass)
WindowsCustomButtonClick = WindowsButtonClick(sButton, sBtnValue)
wResetClasses()
End Function
'---------------------------------------
' Method : WindowsButtonClick
' Author : T.Palani Selvam
' Purpose : Clicks the given Button element.
' Parameters: sButton - String, Contains name of control
' sBtnValue - String, Contains value of control
' Returns : Integer.
' Caller : WindowsHandleClick(sContext, sForm, sElement ,sElementValue , sElementType)
' Calls : - Nil -
---------------------------------------
Function WindowsButtonClick(sButton As String, sBtnValue As String) As Integer
WindowsButtonClick = False
If (WButtonExists(sButton)) Then
WButtonClick(sButton)
LogWrite("Successfully clicked button " + sButton, 1)
WindowsButtonClick = True
Else
LogWrite("Failure to Click Button " + sButton,1)
End If
End Function
Thursday, March 20, 2008
QTP - Getting INPUT objects
Function:
'Calling function to list editboxes
Set ObjEditAll = ListAllWebObjects (Browser("My APP").Page("First Form"),"text")
Function ListAllWebObjects (ObjContainer,sControlType)
' Getting all type of INPUT objects
Dim MyDescription,objEditBoxes,NoOfChildObjs,Counter,strReport
Dim sTemp, objEdit
'Initialization
'ListAllWebObjects = Nothing
Set MyDescription = Description.Create()
MyDescription("html tag").Value = "INPUT"
MyDescription("type").Value = sControlType
Set objEditBoxes = ObjContainer.ChildObjects(MyDescription)
NoOfChildObjs = objEditBoxes.Count
strReport = ObjContainer.ToString() & " contains the following child object(s):"
For Counter=0 to NoOfChildObjs-1
strReport = strReport & vbNewLine & objEditBoxes.Item(i).ToString()
set objEdit = objEditBoxes(Counter)
sTemp = objEdit.GetROProperty ("name")
Reporter.ReportEvent micDone, objEdit.ToString() & " - name property", sTemp
sTemp = objEdit.GetROProperty ("class")
'sTemp = objEdit.object.ClassName
Reporter.ReportEvent micDone, objEdit.ToString() & " - class property", sTemp
sTemp = objEdit.GetROProperty ("index")
Reporter.ReportEvent micDone, objEdit.ToString() & " - index property", sTemp
sTemp = objEdit.GetROProperty ("location")
Reporter.ReportEvent micDone, objEdit.ToString() & " - location property", sTemp
sTemp = objEdit.GetROProperty ("html id")
Reporter.ReportEvent micDone, objEdit.ToString() & " - html id property", sTemp
sTemp = objEdit.GetROProperty ("innerhtml")
Reporter.ReportEvent micDone, objEdit.ToString() & " - innerhtml property", sTemp
sTemp = objEdit.GetROProperty ("outerhtml")
Reporter.ReportEvent micDone, objEdit.ToString() & " - outerhtml property", sTemp
sTemp = objEdit.GetROProperty ("innertext")
Reporter.ReportEvent micDone, objEdit.ToString() & " - innertext property", sTemp
sTemp = objEdit.GetROProperty ("outertext")
Reporter.ReportEvent micDone, objEdit.ToString() & " - outertext property", sTemp
Next
set ListAllWebObjects = objEditBoxes
Reporter.ReportEvent micDone, ObjContainer.ToString() & " child objects", strReport
End Function
Wednesday, March 19, 2008
FireFox Vs Internet Explorer
In 2005, I started to use FireFox browser and it has many advantages while comparing with Internet explorer. Now Most of the sites are supporting Firefox also. I like the features such as tabbed browsing, popup blocker and download manager. These features are not upto the mark in IE. Opera browser already has similar to tabbed browsing. Opera is not popular as Firefox. Current IE7 is not fast as Firefox and also having security issues. Firefox has greater ease of use and more personalization options. It has improved performance and security features.
I am comfortable with firefox than IE. I heard that IE version 8 and FF version 3 are going to be released soon. Searched net for comparison. Got two interesting pages. Some old Comparison around 2004. Recent comparison is available here
Tuesday, March 18, 2008
MS XML Parser by Visual Basic
Case1: To load any XML content
'-----------------------------------------
' Method : XMLParserLoadXML
' Author : T.Palani Selvam
' Purpose : Creates XML Parsing object according to the given XML String.
' Parameters: sXML - String, contains data in XML Format.
' Returns : Returns a Object, which contains XML Parsing object.
' Caller : - Nil
' Calls : - Nil -
'------------------------------------------
Function XMLParserLoadXML(sXML As String) As Variant
Dim objXML As Variant
XMLParserLoadXML = Null
Set objXML = CreateObject("Microsoft.XMLDOM") 'Declare a Object
objXML.async = False
objXML.loadXML (sXML) 'Load xmlformat String
'OleSetProperty(objXML,"preserveWhiteSpace") = False
If (objXML.parseError <> 0) Then
LogWrite ("Parsing Error in the File :" + sXMLFile)
Exit Function
End If
'Top Node of given file
Set XMLParserLoadXML = objXML.documentElement
End Function
Case2: It parsed the given tag in given content and returns the node.
'-----------------------------------------
' Method : XMLParser
' Author : T.Palani Selvam
' Purpose : Creates XML Parsing object according to the given XML Format File and Element.
' Parameters: sXMLFile - String, contains a file name, which is in XML Format.
' sTag - String, contains element name from which Tag or element based object to be returned.
' Returns : Returns a Object, which contains XML Parsing object.
' Caller : - Nil
' Calls : - Nil -
'-----------------------------------------
Function XMLParser(sXMLFile As String, sTag As String) As Variant
Dim objXML As Variant, objNode As Variant, objTemp As Variant, objRoot As Variant
'Dim varTest As Variant
Dim iIndex As Integer, iTemp As Integer
'Dim objRoot As node
XMLParser = Null
sTag = Trim(sTag)
Set objXML = CreateObject("Microsoft.XMLDOM") 'Declare a Object
objXML.async = False
objXML.Load (sXMLFile) 'Load xmlformat file
If (objXML.parseError <> 0) Then
LogWrite ("Parsing Error in the File :" + sXMLFile)
MsgBox ("Parsing Error in the File :" + sXMLFile)
Exit Function
End If
'Top Node of given file
Set objRoot = objXML.documentElement
'Print "XML File is : " & sXMLFile
'Print objRoot.nodeName & " Name of the node.."
If ((sTag = "") Or (sTag = objRoot.nodeName)) Then
'XMLParser = CVar(objRoot)
Set XMLParser = objRoot
'Set varTest = objRoot
'XMLParser = objRoot
Exit Function
End If
If objRoot.hasChildNodes <> 0 Then
objTemp = objRoot.childNodes
iTemp = objTemp.length
For iIndex = 0 To iTemp - 1
objNode = objTemp.Item(iIndex)
If (UCase(Trim(objNode.nodeName)) = UCase(sTag)) Then
XMLParser = objNode
Exit Function
Else
Set objNode = Nothing
End If
Next iIndex
End If
objTemp = objXML.getElementsByTagName(sTag) 'Search whole file with sTag
iTemp = objTemp.length
If (iTemp > 0) Then
objNode = objTemp.Item(0)
XMLParser = objNode
End If
End Function
Monday, March 17, 2008
Globalization
It is a precess of developing,manufacturing,marketing software products that are intended for worldwide distribution.It is achieved through Internationalization and Localization.
.
Internationalization:
- It is the process of designing an application to adapt to different languages and regions.
- It is often appreviated as I18N or i18n or i18N.Where the number 18 refer to the number of letters omitted.
- •I+n1t2e3r4n5a6t7i8o9n10a11l12i13z14a15t16i17o18+n.
- Build once we can sell anywhere.
- Translation is easy.
- Addition of localization data the same executable can be run worldwide.
- It is the process of adopting software for a specific language or region.
- It is a process of translating software user interface from one language to another.
- It is appreviated as L10n.
- During localization,some references to history or culture are replaced with an equivalentnative reference which ideally doesnot change the meaning of the statement.
VisualTest Support
Visual test cost is very less and many users were there. The last version is 6.5 But still few people are using VT. Thats why I thought to put few visual test code snippets. I am planning to put few posts for visual test.
See the one post from a VT user.
Quote:
After a very extensive search i have found this forum,and i suppose it is still active for Visual Test. Right now i knew that Visual Test is obsolete in the market.But i am pushed to use the tool.As i am very new to testing and currently i do not have the tool as well,I'll be getting it by November 1st week.So could any one help me in starting the preparation.If any of you can guide me where to get the Book Visual Test Bible by Thomas R.Arnold it would be really help full.If any one have the copy same and ready for selling i am ready for purchasing it.So please please help needed.
I hope that this will be applicable to Winrunner in the future.....!!!
Friday, March 14, 2008
VisualTest - MS XML Parser
XML Development Center
XML FAQ
Below I have given the code snippets to parse the XML files.
Code1: To Parse an XML file.
'-----------------------
' Method : XMLParserLoadXML
' Author : T.Palani Selvam
' Purpose : Creates XML Parsing object according to the given XML formatted String, Element .
' Parameters: sXML - String, contains data in XML Format.
' sTag - String, contains element name from which Tag or element based object to be returned.
' Returns : Returns a variant data, which contains XML Parsing object.
' Caller : - Nil
' Calls : - Nil -
'--------------------------------
Function XMLParserLoadXML(sXML As String, sTag As String) As Variant
Dim objXML As Variant, objNode As Variant, objRoot As Variant, objTemp As Variant
Dim iIndex As Integer, iTemp As Integer
XMLParserLoadXML = NULL
sTag = Trim (sTag)
objXML = OleCreateObject ("Microsoft.XMLDOM") 'Declare a Object
OleSetProperty (objXML,"async","False")
OleDispatch (objXML, "loadXML", sXML) 'Load xmlformat String
'OleSetProperty(objXML,"preserveWhiteSpace") = False
If (OleGetProperty(OleDispatch(objXML, "parseError"), "errorCode") <> 0) Then
LogWrite ("Parsing Error in the String :" + sXML, 1)
Exit Function
End If
'Top Node of given file
objRoot = OleDispatch (objXML,"documentElement")
IF ((sTag = "") OR (sTag = OleGetProperty(objRoot, "nodeName"))) Then
XMLParserLoadXML = objRoot
Exit Function
End IF
If OleDispatch (objRoot ,"hasChildNodes") <> 0 Then
objTemp = OleDispatch (objRoot, "ChildNodes")
iTemp = OleGetProperty(objTemp, "Length")
For iIndex = 0 To iTemp -1
objNode= OleDispatch(objTemp, "item",iIndex)
If (Ucase(trim(OleGetProperty(objNode,"nodeName"))) = UCase(sTag)) Then
XMLParserLoadXML = objNode
Exit Function
Else
OleReleaseObject (objNode)
End If
Next iIndex
End IF
objTemp = OleDispatch(objXML,"getElementsByTagName",sTag) 'For test.xml
iTemp=OleGetProperty(objTemp,"Length")
If (iTemp > 0 ) Then
objNode = OleDispatch (objTemp, "item", 0)
XMLParserLoadXML = objNode
End IF
End Function
Code2: It parses the given tag and returns the content.
'-------------------------------------
' Method : XMLParser
' Author : T.Palani Selvam
' Purpose : Creates XML Parsing object according to the given XML Format File and Element,
' which gives starting or root element of that object.
' Parameters: sXMLFile - String, contains a file name, which is in XML Format.
' sTag - String, contains element name from which Tag or element based object to be returned.
' Returns : Returns a variant data, which contains XML Parsing object.
' Caller : RunTestCase()
' Calls : - Nil -
'------------------------------------
Function XMLParser(sXMLFile As String, sTag As String) As Variant
Dim objXML As Variant, objNode As Variant, objRoot As Variant, objTemp As Variant
Dim iIndex As Integer, iTemp As Integer
XMLParser = NULL
sTag = Trim (sTag)
objXML = OleCreateObject ("Microsoft.XMLDOM") 'Declare a Object
OleSetProperty (objXML,"async","False")
OleDispatch (objXML, "load", sXMLFile) 'Load xmlformat file
'OleSetProperty(objXML,"preserveWhiteSpace") = False
If (OleGetProperty(OleDispatch(objXML, "parseError"), "errorCode") <> 0) Then
LogWrite ("Parsing Error in the File : " + sXMLFile, 1)
Exit Function
End If
'Top Node of given file
objRoot = OleDispatch (objXML,"documentElement")
Print OleGetProperty(objRoot, "nodeName") + " Name of the node.."
IF ((sTag = "") OR (sTag = OleGetProperty(objRoot, "nodeName"))) Then
XMLParser = objRoot
Exit Function
End IF
If OleDispatch (objRoot ,"hasChildNodes") <> 0 Then
objTemp = OleDispatch (objRoot, "ChildNodes")
iTemp = OleGetProperty(objTemp, "Length")
For iIndex = 0 To iTemp -1
objNode= OleDispatch(objTemp, "item",iIndex)
If (Ucase(trim(OleGetProperty(objNode,"nodeName"))) = UCase(sTag)) Then
XMLParser = objNode
Exit Function
Else
OleReleaseObject (objNode)
End If
Next iIndex
End IF
objTemp = OleDispatch(objXML,"getElementsByTagName",sTag) 'For xml Format
iTemp=OleGetProperty(objTemp,"Length")
If (iTemp > 0 ) Then
objNode = OleDispatch (objTemp, "item", 0)
XMLParser = objNode
End IF
End Function
Thursday, March 13, 2008
Writing a Problem Report
Cem Kaner has written few articles about Bug Advocacy.
Bug Advocacy: PDF
Bug Advocacy: Video
Also I would like to give two quotes from his famous book.
Book: Testing Computer Software By Cem Kaner, Jack Falk, Hung Quoc Nguyen
ISBN: 0471358460
Quote1:
If your reports are not clear and understandable, bugs won't get fixed. You should spend minimum time needed to describe a problem in a way that maximizes the probability that it will be fixed. The content and tone of your reports affect that probability. The point of writing problem reports is to get bugs fixed.
Quote2:
Nobody likes being told that what did wrong, wrong, wrong. As a tester, that's what you tell people everyday. You can ensure your unpopular by describing problems in a way that tells the programmer you think (s)he is sloppy, stupid or unprofessional.
Wednesday, March 12, 2008
4test - Search and Replace
Code:
[+] public void SearchAndReplaceInFile (STRING sFileInput, STRING sFileOutput, STRING sSearch, STRING sReplace )
HFILE hInFile, hOutFile
STRING sTemp, sLine, sValue
INTEGER iPos1, iPos2
hInFile = FileOpen (sFileInput,FM_READ)
hOutFile = FileOpen (sFileOutput, FM_WRITE)
[-] while (FileReadLine (hInFile, sLine))
sTemp = sLine
[-] if !(Trim(sSearch) == Trim (sReplace))
ReadLine:
iPos1 = StrPos (sSearch,sTemp)
//Print ("Position {sTemp} - {sSearch} : {iPos1}")
[-] if (iPos1 > 0)
sValue = StrTran (sTemp, sSearch, sReplace)
//Print ("got value: {sValue}")
sTemp = sValue
goto ReadLine
FileWriteLine(hOutFile,sTemp)
FileClose (hInFile)
FileClose (hOutFile)
Documenting automated Scripts
Most of the automated testing tools are not having documenting facility. I am expecting similar to PerlDoc (for Perl scripts) or JavaDoc (for Java). It is the duty of script developer to ensure the adequate comments for particular function or code block. I used to put two or three line comments, While writing the functions.
Generally these kind of tools or utilities, have a parser. It can parse the source code and get the details by the pre-defined tags or keywords. Then It creates the HELP files for each code block or script. The usage will be meaningful if documentation is regularly updated. Now most utilities are creating HTML files and it is easy to navigate and share the information. I was going through J2Se doc comments. JavaDoc is having the flexibility of including HTML tags.
Friday, March 7, 2008
Recursive technique
[+] public LIST OF WINDOW GetChildObjects(Window wContainer, DATACLASS dcObject)
// To get All child objects.
// Used recursive method.
LIST OF WINDOW lwndObjects, lwTemp1, lwTemp2
LIST OF WINDOW lwndChildren = {...}
WINDOW wParent, wChild, wTemp
[+] do
[+] if (wContainer.Exists (10))
lwndChildren = wContainer.GetChildren (TRUE, FALSE)
[+] for each wChild in lwndChildren
[+] if wChild.IsOfClass(dcObject)
ListAppend (lwndObjects,wChild)
[+] else
lwTemp1 = wChild.GetChildren(TRUE, FALSE)
[+] if (ListCount(lwTemp1) > 1)
lwTemp2 = GetChildObjects(wChild,dcObject) //To get particular objects
[+] if (ListCount(lwTemp2) > 0)
ListMerge (lwndObjects, lwTemp2)
[+] else
Print ("Container {[STRING]wContainer} window is not available.")
[+] except
ExceptLog ()
return lwndChildren
Thursday, March 6, 2008
Silktest - Mouse Coordinates Off
In this situation, You can do following things and use the better one.
1. Clear the following options from Options->Agent Options.
- Verify that windows are exposed
- Verify that coordinates passed to a method are inside the window
OR Set by coding . Set agent option like this -> Agent.SetOption (OPT_VERIFY_COORD, FALSE)
2. Try to use ScrollIntoView() or setFocus().
3. DoClick () method if that particular object has support.
4. Write a function to click particular object, which is outside of the monitor co-ordinates.
Wednesday, March 5, 2008
Getting Link count in Winrunner
The following TSL snippet finds the number of links and number of rows in a given table.
public aRowCount, aColCount;
public aCell;
public aRow, aCol;
public aTemp;
public aItem, ar, ac;
public alinkcount, alinkrow;
public aout, atext;
public areturn;
# Browser Main Window
win_activate ("Browser Main Window");
# Search Items
set_window ("Search Items", 2);
wait(5);
tbl_get_rows_count("Link No", aRowCount);
tbl_get_cols_count("Link No", aColCount);
report_msg (aRowCount & " is row count");
report_msg (aColCount & " is col count");
alinkrow = 0;
alinkcount =0;
for (arow=1;arow<= aRowCount; arow++) {
web_obj_get_child_item( "Link No", arow, 1, "html_text_link", 0, aout);
report_msg (aout & " -link description");
if (length(aout) !=0 ) {
alinkcount = alinkcount + 1;
#web_tbl_get_cell_data("Link No",arow,aColCount,0,atext,areturn);
web_obj_get_child_item( "Link No", arow, aColCount, "",0 , atext);
report_msg(atext & " text in the cells");
if (length(atext) !=0 ) {
alinkrow = alinkrow + 1;
}
report_msg(alinkcount & " - total no of links in the table.");
report_msg(alinkrow & " - total no of links having full rows.");
}
}
pause(alinkcount & " - total no of links in the table.");
pause(alinkrow & " - total no of links having full rows.");
Tuesday, March 4, 2008
Web Testing & Client server testing
Server programs generally receive requests from client programs, execute database retrieval
and updates, manage data integrity and dispatch responses to client requests. The serverprocess acts as a software engine
that manages shared resources such as databases, printers, communication links, or high
powered-processors.It is the backend process of the application.
Client process:
Client programs usually manage the user-interface portion of theapplication, validate data
entered by the user, dispatch requests toserver programs, and sometimes execute business logic.
The client-based process is the front-end of the application.It is the interaction between the user and the rest of the application
system.
In client server testing test engineer are conduct the following testings:-
1.Behaviour testing(GUI TESTING)
2.Input domain testing
3.Error Handling testing
4.Backend testing
In Web testing test engineer are condut the following testings:-
1.Behaviour Testing
2.Static web testing
3.Input domain testing
4.Backend testing
5.Error handling testing
5.Frame Level testing
Difference between Application server and Web server:
Application server | Web server |
Developers can create, test, and execute application components | It is designed to create and deploy Web site, serving up content more so than applications. |
These are typically J2EE-based, running EJBs or other Java components. | It supports JSP,servlets and ASP |
Application servers are designed to create true applications with complex business logic, | Web servers are technology designed to create and deploy Web site serving |
Application Server supports HTTP,TCP/IP and many more protocols. | A Web Server understands and supports only HTTP protocol |
Capturing failures
Most of the load testing tools are capturing the objects as images or HTML files. Now Functional tools also providing this feature. Silktest provides the same feature through TrueLog Explorer. It is available from Silktest8.0 I hope that QTP also has same feature in different name.
Monday, March 3, 2008
Test Results Reporting
Automation Engineers are developing lot of test scripts. How will you check all scripts results? We can't check each testcase by testcase. Summary of test results is so important. Also the compiled results for all results is good to have.
Long back, I studied one article related with Automatic Results processing. That document discussed about extracting some keywords from particular log files and store the results in different format. I have implemented using Excel sheet and it will give result for each testcase(function) as well as compiled result for each scripts. If summary and results are stored into HTML files, we can easily get to know the results.
I agree, however one person need to look the results. Some of the tools are giving summary details after execution. I want to go one step ahead. I need to see all automation results of particular project from one file (HTML or Flat file or XL sheet). It is like maintaining history.
But Results processing is very common for test automation as well as general applications. You can follow like any standard log files format. You can maintain 2-3 log files for single script. One for all the activities of your suite and another one for Just giving Pass or Fail result for each testcase. It will be better, if all the log files are HTML files. At last prepare a single file to show the compiled results for the whole execution. You can publish the results easily.