Test Automation Using SilkTest 1 Test Automation Rules • Product feature understanding, test planning, test case documentation, test bed setup, defect tracking, progression tests are all manual • Test automation success depends on test cases • Every manual step has commands in test script • If it is not worth, do NOT automate 2 Tools - Comparison • • • • • • • • • WinRunner, QTP are from Mercury Interactive – USD 1bn company and market leader; Robot from Rational IBM - USD 100bn company’ Silk from Segue – USD 50mn company Script here is object oriented and close to QTP script. Winrunner TSL is like C and Robot SQA Basic is like Visual Basic GUI to create verification points are better in WinRunner, QTP and Robot Silk is more towards moving scripts on MS Windows and Unix; whereas Robot or WinRunner scripts cannot be moved to other OS as those tools do not support Rational does not provide GUI specification in a separate file; WinRunner, QTP and Silk provide that You need to buy Java Plugin for WinRunner; Silk and Robot come with Java plugin Record, replay, verification method, data driven tests, database connectivity, bitmap verification are all same at concept level and differ only at script syntax level Wizards are less in SilkTest, compared to other tools Cost-wise, QTP and WinRunner are most expensive; Silk stands in between WinRunner and Rational Robot 3 4 Architecture • • • • • • • • Project .vtp (for maintenance) Testplan .pln (organizing the tests) Test Frame* .inc (AUT Window details) Scripts .t (test scripts) Data driven tests .g.t (scripts with many data) Include file .inc Suite .s (for batch runs) Result .res 5 Test Automation Principle • • • • • • • • • Make the tool learn about AUT GUI Record steps based on mouse and key events Organize steps into test case Organize test cases into test plans Run test cases Batch different sets and run Analyze results Do NOT try to code application logic into testing code Whenever possible, generate code thru the tool and not hand-code • Read STUSER Help file (user guide for SilkTest) 6 Test Process • Manage requirements using SilkCentral Test Manager • Manage test plans and cases using Silk test • Associate test plans/cases to requirements using test manager • Declare GUI declarations using SilkTest • Develop scripts for atomic activities first so that they can be reused later • Develop scripts using SilkTest and run them • Track defects using Defect Tracker 7 Test Frames • • • • • • • • • Before test case recording, do this step This creates an .inc file that has GUI declarations Identifies GUI controls as classes Label or caption is the best way to identify objects; if not available, object index is used (available tags are caption, prior text, index, window id, coordinates) Class and tag are the key elements in declarations Record window declarations is the way to store test frames When objects are not identified properly, use different tags to uniquely identify the objects. This will vary from application to application If object X,Y coordinates are to be used, declare constants and then use those constants for further declarations To declare new objects within a window, it is better to use AnyWin or CustomWin classes. Use ~ActiveApp to specify the coordinates 8 9 Test Frames • Along with window declarations, we can declare methods that are specific to that window and objects • The method declarations within a window object is similar to object oriented programming • Uses can use these method declarations as wrapper classes for executing a series of steps that are recorded • To the extent possible, do not have any hard coded values in the GUI Window methods • While recording new test cases, ensure that you update window declarations as well; but check the frame.inc file, not to have duplicate declarations for same window • Default is frame.inc; but we can have any number of include files • Unless the window declarations are in scope, the test script will not recognize the controls 10 Recording • Recording will automatically generate statements on every user action • To capture the mouse click coordinates and keyboard events, we can use low level enabler for every control in recording options • We can record the base state as well as test steps • Soon after recording, ensure the test frame declarations, for any changes or duplicates • Recording can be done for window declarations or test case or actions • Every recorded script must start from a known base state and must return back to the same known base state • BaseState and DefaultBaseState can also be specified using recording (appState is a function that ensures the pre-condition state for a test case) 11 12 13 Test Cases • • • • • • • • • • • Each test case must be independent Initialize (pre-requisite setup), run and verify, cleanup One test case must have One purpose Establish application state for every test case. Record the base state Test Case contains commands for every test step. Record the steps and edit if needed Establish verification points for every test case Record the clean up steps as well Sequencing of test cases is very important when it comes to automation These are also functions, with the type as “testcase” We can use parameters for testcase as well A testcase is also a function by itself, but it can have base states 14 4Test Elements • • • • • • • • • • • • • • Variables – INTEGER, STRING, BOOLEAN, ANYTYPE, REAL, LIST Variables do have scope – public or private Const is for constants Regular arithmetic and string operations hold good 2 types of for statements Foreach and While loops are also available IF, select-case and SWITCH-case are available for branching Do-except is for exception handling Exception functions will be useful for tracing exception number and details Test steps will have window.object.method or window.object.property style of commands User defined functions with in, out, inout parameters Functions can return values as well Use built-in functions for list and array manipulations Print and Printf commands are used for sending output to results file 15 Built-in Functions, Classes • For debugging purpose, we can use print function. It helps in documentation as well as to track the test run status, at any given point of time • Refer to General Core Classes section in SilkTest Help (PARTNER file) – AnyWin, MainWin, CheckBox, ComboBOx, DialogBox, ListBox, Menu, PushButton, RadioButton, StaticText, TextField, StatusBar are the most used classes • Refer to Functions by Programming Task section in SilkTest Help (PARTNER file) – Datatype commands, Database commands, List and string Manipulations, Window Information commands are the most used ones • System related functions can be used to carry out any DOS commands to set the test environment (Sys_Execute, Sys_Kill) • String functions such as ltrim, rtrim, etc are used extensively to manipulate test data; arithmetic functions are not used often • User defined functions must be called from main function 16 17 18 AnyWin Properties & Methods • • • • • • • • • • • • • • • • • • CaptureBitmap ClearTrap Click DoubleClick Exists GenerateDecl GetAppId GetArrayProperty GetBitmapCRC GetCaption GetChildren GetClass GetContents GetEverything GetHandle GetHelpText GetIDGetIndex GetInputLanguage • • • • • • • • • • • • • • • • • • • GetManyProperties GetName GetNativeClass GetParent GetProperty GetPropertyList GetRect GetTag InvokeMethods IsActive IsArrayProperty IsDefined IsEnabled IsOfClass IsVisible InvokeJava MenuSelect MoveMouse MultiClic 19 AnyWin Properties & Methods • • • • • • • • • • • • • • • • • • • MultiClick PopupSelect PressKeys PressMouse ReleaseKeys ReleaseMouse ScrollIntoView SetArrayProperty SetInputLanguage SetProperty SetTrap TypeKeys VerifyActive VerifyBitmap VerifyEnabled VerifyEverything VerifyText VerifyProperties WaitBitmap • • • • • • • • • • • • • bActive AppId sCaption lwChildren Class bEnabled bExists sID iIndex sName wParent Rect hWnd WndTag 20 Method examples • • • • • • • • • • • Find.OK.Click Find.MatchCase.Check Find.FindText.SetText(“abc”) Notepad.CloseWindows Find.Up.VerifyValue(TRUE) Fonts.FontName.verifyContents(…) Notepad.Editor.SelectAll() // this is a custom method to select all contents. This needs to be declared in the windows declarations User defined functions can have in, out, inout and optional parameters ClipBoard functions are used to manipulate clipboard text Cursor class methods can be used to manipulate coordinates Property prefixes – b for boolean, I for int, ls for list, s for string 21 Get, Set, Verify for Controls • • • • • • • • • For every object, Get methods are used to obtain attribute values into a variable. After getting to a variable, we need to manipulate For every object, Set methods are used to set attribute values on the screen. This will work only when the object cooperates with SilkTest operations For every object, Verify methods are used to check the attribute values – implicit Get and an if-then-else condition. It must have an expected value as argument Whatever properties that can be used for get statement, can be used for set and verify statements Verify methods evaluate to pass or fail status Any other custom methods can be used, if they are already declared in window declarations Most of the properties and methods are inherited from AnyWin to all other GUI classes Dlls can be loaded using dll declaration and the functions can be invoked from 4Test Capture and Compare bitmap commands are used for image checks 22 Utility Elements • • • • • • • • • • • • • Array functions are used to manipulate arrays (ArraySize, ArrayFind) List functions are used to manipulate lists (ListSort, ListAppend) DateStr, TimeStr, Sleep, StartTimer, StopTimer are used for timer functions FileOpen, FileClose, FileWriteLine, FileReadLine are used for file operations Wild cards - ? And *; MatchStr command is used for expressions Multitags enable an object to be identified with many labels Registry Operations are available – not used widely (Reg_CreateKey) LogError, LogWarning, Print to write to results file Timer commands to create, start, stop, destroy and get the interval Date format and functions to manipulate date fields DLLs can be loaded and then functions can be executed; but this needs to be kept at minimum To get script, environment and browser related information, we can use the respective built-in functions (GetArgs, GetBrowserType) Date related functions are available; but it is advised not to use inside script to manipulate dates 23 Database Test • Database tests follow the verification of GUI verifications • Database commands start with DB_ • Connect to DB (DSN needed) • Execute Query (give SELECT) • Fetch the records and compare with baseline • Finish DB operation (release resources) • Disconnect after every database operation • Do not keep the database connections for a long time in 4Test scripts 24 Verification • Object properties are the key elements • Control state, value, label, text, count, size, location are the most common properties • Feed the expected result to the verify command • Bitmaps can be verified using CaptureBitmap and VerifyBitmap • Use Bitmap tool to capture baseline image • Is* methods evaluate to a boolean value (IsActive, IsEnabled) • LinkTester checks the links in web applications 25 Data Driven Tests • Same script, variety of data, less coding • Use Data Driven work flow for a standard recorded test case • Create a test database and configure DSN • Replace hard coded recorded values to data driven variables (using find/replace option) • When you run the test, it runs for all rows of data in the data set • A new test case with DD_ prefix will be created 26 27 Run Tests • One can run a test case or test plan or test suite • Suite contains many test cases in it • Using distributed run mode, one can run scripts in another machine that has Silk Agent • We can run in run mode or debug mode • Debug mode enables us to step, step into, step out, declare breakpoints etc • All other hosts run the Agent • Spawn, Parallel, Rendezvous are used in distributed testing – but unless required, distributed testing is not widely used • One must connect and disconnect to target machines 28 Traceability • Requirements to test traceability is thru Test Manager • Test case to tester traceability is again part of test manager • We need to define naming conventions by ourselves for test plans, test cases, requirements • Suggested guideline is to name the test case with the test case ID itself and have the test case description as comments • Use base states for capturing test pre-requisites • Version control is integrated with PVCS for check-in, check-out and labeling features 29 Recovery Scenarios • Recovery system enables the test to come to the Base State • Record application state is used to specify the recovery scenarios • Exception handler itself is script recovery feature • StopRunning() method bypasses all recovery settings 30 Test Extensions • These are used to help SilkTest to identify new objects and their properties • Silktest can automatically enable extensions for open applications • Java, .Net, AOL Browser, Netscape Navigator, Internet Explorer require extensions • For browsers, enabling DOM or Virtual Object mode would be configured to identify objects 31 32