Code Template
Document details | |
Purpose | To help you understand the usage and set up of code templates within test automation so that you can amend existing ones to fit your environment or create new ones. |
Audience | Anyone using Quality Modeller to generate automated tests. |
Requirements | Access to the Curiosity Dashboard. |
Introduction
When you generate and export code in order to automate the running of your tests, the generated code needs to be created. So it is based on a series of templates (code templates) for the particular language, test type and environment for your project.
For example, to test a website you can use the Quality Modeller Web Extension to record interactions with the web page which you can import into Quality Modeller. The code that is generated from this is based on the Automation framework, which in turn uses the framework code templates. These templates are set up to use the Curiosity cloud environment to analyse the web page. However if you have a secure environment, then you will want to use your own environment to analyse your pages. Hence you will need to create a new framework based on code templates you have updated to suit your environment.
Code templates are a group of template items that may be code snippets and template files that are pieced together by Quality Modeller to create automation code. There are templates for creating the test cases (referred to below as Test Cases or code) and others that produce the methods used to build tests (referred to below as Page Objects), for example a web page or an API interface. One or more of these template types will be packaged together as a Framework, which will be the basis of your project, if you are going to automate your tests. Typically a Framework will have page object templates and test case templates. Additionally, you can configure the framework to save your tests to a repository tool library. You can use the pre-existing templates as a basis to create templates that fit with your environment.
The rest of this document will show you how to navigate the screens linked to code templates and how to set up new templates and frameworks.
Code template configuration screen
This is the main screen that acts as a starting point for your interaction with the code templates and frameworks.
In order to navigate to this screen:
On the left hand menu select:
Management section → Workspace (expanded) → Configuration
On the table select:
Code Template tab
This page contains two tables, Automation Frameworks and Code Templates, which are detailed below.
Automation Frameworks table
This lists the frameworks that are available.
When a Project is created, the type of project chosen will determine the framework that is used. The list of frameworks used for different project types is available in the section: Framework set for project type
Note that some of these frameworks are not editable, like the QuickStart ones, as the underlying automation processes rely on them. If you do need to make a change to one of these QuickStart frameworks, then you can copy and edit the underlying code templates, then create a new framework based on your edited templates.
Automation framework table column and button descriptions
Column/button name | Content/action | |
---|---|---|
Name | The name of this template This icon shows the number of projects that use this template, if it is not present then no projects currently use the template. Click it to list the projects. The project link will take you to the project details page. However you need to have the appropriate permissions to view those details. | |
Language | The coding language or technology used in the framework. | |
Page Object | This is a link to the Code Template Items list for the page objects. These objects will be used in the automation code to access objects and actions. If a StepHandler has been defined for the framework, then the link for this will appear in this column as well. | |
Code | This is a link to the code template items for the test case code sections. The automation code will be built up from this and access the page objects. | |
Action | Actions available to this template (not all are available for all records) | |
Edit the details for this record (for some records, the details can only be viewed). In the dialog box, the language and source control tabs have the same options as when creating a new Framework. The execution tab will allow you to edit or create an execution for this framework. | ||
Delete this framework. | ||
This button allows you to add a new framework. The steps for this are listed in the section adding a new framework |
Code Templates table
This lists the available code templates. These are used as a basis for a Framework. Different frameworks could be linked to the same code templates.
Code template table column and button descriptions
Column/ button name | Content/ action | |
---|---|---|
Name | The name of the template item group. This is a link to the list of code template items for the template. | |
Type | The following types of template group are available: | |
TestCase | These are the templates for creating the code to run your tests. | |
PageObject | These are the templates for interacting with the objects that are being tested. | |
Excel | These are for exporting tests into an Excel file. There are more details about this here. Note that when exported, the representation will be an excel file rather than a JSON file. | |
UFT | These are templates for the UFT test tool. | |
StepHandler | This set of templates is used for the gherkin/cucumber behaviour driven development test cases. | |
Language | The programming language for the template items. | |
Action | Actions available to this template (not all are available for all records) | |
Edit the details for this template (displays a pop-up window). | ||
delete this template group | ||
import an update to the template (this should be a file) | ||
export the template as a file | ||
Toggle the search fields for the code templates | ||
This button allows you to add a new template group. The steps for this are listed in the section adding a new template | ||
imports a new code template, from a file |
Code Template Items screen
This is the list of individual code template items, these will be a mixture of template files and code snippets that will be added into template files, as needed. You can view the code for an item by selecting the item name.
Note that some code items are editable, if they are then you will see a red x box and the following buttons (seen in the screenshot below) may be visible.
Column/tab/button name | Content/action | |
---|---|---|
Delete the selected code template. | ||
Appears if you make changes to an item, so you can save them. | ||
Shows the Code Template item pop up that allows you to add a new code template item from the list available for that language. | ||
Embedded Code | Switch only visible for custom code functions. This option defines if the defined snippet should be inserted directly into a generated test script. If this is off, then the custom code function will be embedded using the definition from the Page Object template → FunctionCallTemplate. Or, if there is a return value, then the FunctionCallTemplateReturn template item. | |
Code Template (tab) | Tab showing the code for the template. | |
Details (tab) | Custom function name and description. Tab only visible for custom code functions. | |
Parameters (tab) | Custom function parameter list. Tab only visible for custom code functions. | |
Return (tab) | Custom function return value. Tab only visible for custom code functions. |
Code template item names
This section gives an overview of the types of template that are present when you look at the code template items screen.
Page objects
These template are for interacting with the test objects (for example a web page or an API interface).
There are the following main groups of items in this template group:
Prefix | Description | example |
---|---|---|
PageObjectClass | This is the master template for the object, other templates will be added into this one, as needed. | PageObjectClassTemplate |
PageObjectdentifier | These specify a particular identifier for an object, there is one for each type of identifier available, for example: id and xpath. | PageObjectdentifierTemplate_XPath |
PageObjectIdentifierTemplate_CustomType | These specify a custom identifier for an object | PageObjectIdentifierTemplate_CustomType |
TestCaseMethod | These code snippets carry out a specific action, like clicking a button or opening a URL. | TestCaseMethodTemplate_Click |
TestCaseMethodTemplate_CustomType | These code snippets carry out a specific custom actions | TestCaseMethodTemplate_CustomType |
TestCaseMethodAPI | These code snippets carry out specific API actions like POST and GET. | TestCaseMethodAPITemplate_POST |
Test suite
These are the templates for creating the test cases, generally, they will interact with the page objects created using the previous templates.
Prefix | Description | example |
---|---|---|
TestCase | This is the master template for running the test cases, other templates will be added into this one, as needed. There is a DataDriven template as well for testing data-driven application. | TestCaseTemplate |
TestCaseMethod | This is the template for a test case. There is a DataDriven template as well for testing data-driven application. | TestCaseMethodTemplate |
FunctionCall | Code snippet to insert a function call. | FunctionCallTemplate |
InitializePageObject | Code snippet to initialise a new object. | InitializePageObjectTemplate |
DataParsingFunctionExpression | Code snippet to parse data values from a data driven spreadsheet. | DataParsingFunctionExpression |
Adding a new code template
This describes the options available and the data you need to enter when creating a new code template (using the New Template button).
It is likely that you will need to carry this before creating a new Framework.
The advanced options
Field | Description | |
---|---|---|
Name | Name for your template | |
Type | The following types of template are available: | |
TestCase | These are the templates for creating the code to run the tests. | |
PageObject | These are the templates for interacting with the objects that are being tested. | |
Excel | These are for frameworks where the test data will be exported into Excel. Note that the template will only be created if a template file is specified. | |
UFT | These are for Frameworks that will use the UFT testing tool. Note that the template will only be created if a template file is specified. | |
StepHandler | This is used for setting up the gherkin/cucumber behaviour driven development test cases. | |
Language | The programming language for the template. Note, not available for Excel or UFT types. | |
Template File | This is required for Excel and UFT types and is only visible for those types. | |
Copy from | Use this option to create a new template copied from an existing one. Set to disabled to create a new one. Note that this is only visible if there are templates of the same type already present. | |
Show advanced | Shows the advanced options, listed below. | |
File Extension | This is used to override the default extension used for the language (for example .java .py). | |
Package | This is only available for the PageObject and StepHandler types. This will override the package outlined at the top of a Java page object collection. See an example Java page object collection below. | |
Merge Code | Note: only available for the TestCase type. This option defines if the generated test cases should be placed all within one file, or split into separate files. For example, in Java, typically you will have one file with X test cases within that file. For technologies like Cypress, each test case exists within it’s own file. | |
Cancel | Cancel the creation. | |
Save | Create the new template. Note that if this is successful you will see an alert: Success new template added. If it is not successful, then no alert will be seen. |
When creating a new template, if it is not based on an already existing template, then a minimum set of template items will be created and populated with code as a basis for you to edit.
Adding a new framework
The describes the options available when creating a new framework.
Clone Framework
This option is used to add a framework from a GitHub library.
If manual is chosen for the Git Connector, then you need to specify the relevant GitHub credentials.
Field | Description |
---|---|
Git Connector | The list of available git connectors, choose the one that will have the Framework. |
Opens the Connectors list in a new tab, allowing you to add a new git connector. | |
Git Username | Username to create a manual Github connection. Only visible if the Git connector is set to Manual. |
Git Token | Token to create a manual Github connection. Only visible if the Git connector is set to Manual. |
Automation Framework | The type of framework. |
View repository | Opens the Github library in a new tab. |
Repository Name | Name of the repository containing the Framework. |
Back | Go back to the previous screen (to choose Clone Framework or Customise). |
Save | Create the framework. |
Customise (Advanced)
This is a multi-step dialog to create a new Framework, based on code templates that will need to have been already set up. Below are the screens to step through for setting up the framework.
Specify Framework
Field | Description |
---|---|
Name | The Framework name. |
Language | The coding language or technology used for the framework. |
Page Object | Drop down list of the available code templates of type ‘PageObject’ for the selected language. Note that for certain Frameworks, you may set this to disabled, for example UFT or mainframe. |
Code Template | Drop down list of the available code templates of type ‘TestCase’ for the selected language. |
Cucumber | Switch on to add a step handler for gherkin/cucumber behaviour driven development type. |
Step Handler | Drop down list of the available code templates of type ‘StepHandler’ for the selected language. Note: only visible if Cucumber is enabled. |
Back | Go back to the previous screen (to choose Clone Framework or Customise). |
Next | Move to the next screen (Source Code Connection). |
Save | Create the framework (not available on this screen). |
Specify the source code connection
If the Git Connector has any value other than Disable, the further options will appear.
Field/button | Description |
---|---|
Git Connector | Github library to save test cases and page objects to when they are generated. |
Opens the Connectors list in a new tab, allowing you to add a new git connector. | |
Page Object Location | Location in the git library to store Page objects generated for test cases. Only visible if Git connector on this screen is not set to disabled and the page object is not disabled on previous screen. |
Test Location | Location in the git library to store the test cases. Only visible if Git connector on this screen is not set to disabled. |
Select the directory from the connector resource. | |
Back | Go back to the previous screen (Specify Framework). |
Next | Move to the next screen (Execution Settings). |
Save | Create the framework (not available on this screen). |
Execution Settings
These settings allow you to save the automation tests to your repository. There are more details on automation execution in the articles Automation Execution Parameters Explained and Trigger Automation Execution from within Quality Modeller.
Note that an execution (or additional ones) can be added later using the edit button for the Framework on the Framework table.
Field/button | Description |
---|---|
Execute on Publish | Executes the tests when they are published to the code repository. |
Execution Directory | Root location for the framework to execute the tests from. For example, for java this will be the location of the pom.xml file). |
Select the directory from the connector resource. | |
Execution Command | System command to execute the test. |
Execution Parameters | The command line parameters required to execute the test. |
Parameters | This button allows you to add a parameter that can be added to the execution parameters and can be set within the Model. |
Back | Go back to the previous screen (to choose (Source Code Connection). |
Save | Create the framework. Note that if this is successful you will see an alert: Success new framework added. If it is not successful, then no alert will be seen. |
How do I…?
Configure the quickstart frameworks to run in my environment?
You cannot configure them, but you can create copies. Create copies of the relevant code templates using the Adding a new code template option. Next create a new framework, using the Customise option and choose the relevant Page Object and Code templates. Then you will be able to edit the new framework and add/edit an execution on the execution tab.
Change the automation framework
This is not generally recommended, but it can be done on the Management → projects page, in the Settings section.
Appendix
Tag list
Tags in the templates are replaced in the final code with the value of the tag, as described in the table below. If you are creating templates from blank files then you will need to add these into your code.
Tag | Description |
---|---|
{{{AllocateColumnIndex}}} | Index of the value required from the allocation object for the referenced parameter. |
{{{AllocateGroupName}}} | Group of test names of the allocation to be consumed. |
{{{AllocatePoolName}}} | Allocation pool name being used. |
{{{AllocateSuiteName}}} | Suite name of the allocation to be performed. |
{{{allocateTag}}} | Allocate tag. If any allocations are defined for the test case this will be replaced with the ‘AllocateTagTemplate’. |
{{{AllocateVariableName}}} | Auto-generated value which refers to the corresponding allocation initialised within the ‘AllocateDataRowTemplate’. |
{{{CodeGenerationFunctionName}}} | Function name. |
{{{CodeGenerationFunctionParameters}}} | Parameter values to be embedded. |
{{{CodeGenerationObjectVariableName}}} | Variable name. |
{{{CodeGenFunctionReturnParamName}}} | Return parameter variable name. |
{{{CodeGenObjectReturnType}}} | Return object type. |
{{{CodeGenObjectType}}} | Object type to be initialised. |
{{{CommaIfNotLast}}} | Used to insert a comma into a list. |
{{{CSSIdentifier}}} | Object Xpath. |
{{{doc_description}}} | Description for documentation. |
{{{doc_function_name}}} | Function name for documentation. |
{{{documentation_parameter_description}}} | Parameter description for documentation. |
{{{documentation_parameter_name}}} | Parameter name for documentation. |
{{{documentation_parameter_type}}} | Parameter type for documentation. |
{{{FunctionMapFunctionCall}}} | |
{{{FunctionMapFunctionReturn}}} | |
{{{FunctionMapObjectName}}} | |
{{{FunctionMapObjectType}}} | |
{{{FunctionName}}} | Function name. |
{{{groups}}} | Tags defined in the model. |
{{{iframe_raw_xpath}}} | Xpath for iFrame (same as iframe_xpath). |
{{{iframe_xpath}}} | Xpath for iFrame. |
{{{ModuleCollectionId}}} | Module collection ID. |
{{{ModuleGuid}}} | Module GUID. |
{{{ModuleName}}} | Module name. |
{{{ModuleUrl}}} | Module URL. |
{{{ModuleObjectId}}} | Module Object ID. |
{{{NodeGuid}}} | Node GUID. |
{{{ObjectIdentifier}}} | Associated object identifier. |
{{{ObjectName}}} | Object variable name. |
{{{PackageName}}} | Package name. |
{{{PageObjectId}}} | object ID. |
{{{PageObjectName}}} | Object name with release and project name. |
{{{ParameterName}}} | Parameter name. |
{{{ParametersCallList}}} | List of parameters. |
{{{ParametersList}}} | List of parameters, with type. |
{{{ParametersNameList}}} | List of parameter names (spaces replaced with _). |
{{{ParametersRobotNameList}}} | List of parameter names . |
{{{ParameterValue}}} | Parameter column name to be retrieved. |
{{{ShadowRootList}}} | Shadowroot list. |
{{{TestCaseName}} | Test suite name. |
{{{test-guid}}} | Guid of the test case in . |
{{{TestName}}} | Name of the test case. This is the name of the path. |
{{{test-profile-id}}} | Id of the associated test profile being exported. |
{{{test-suite-id}}} | Id of the associated test suite being exported |
{{{url}}} | Page URL. |
{{{XPathIdentifier}}} | Object Xpath. |
Region tag list
Regions define areas in the template that will have the contents of other templates inserted.
Note that methods need to be used in the workspace that use the templates, in order for them to be inserted into the regions listed below and so added to the generated code.
Region | Description | Associated page or test suite object template files See the lists in: Code template item names |
---|---|---|
//APIAssertions | API call assertions. For an API Request, the assertion template will be inserted here. The template chosen will be based on the type of assertion selected, as in the screenshot | TestCaseMethodAPITemplate_AssertText TestCaseMethodAPITemplate_AssertStatusCode TestCaseMethodAPITemplate_AssertJSONPath TestCaseMethodAPITemplate_AssertResponseMilliseconds TestCaseMethodAPITemplate_AssertHeaderContains TestCaseMethodAPITemplate_AssertHeaderValue TestCaseMethodAPITemplate_AssertJSONPathExists TestCaseMethodAPITemplate_AssertJSONPathNotExists TestCaseMethodAPITemplate_AssertJSONValidation |
//APIBody | API call body. | TestCaseMethodAPITemplate_Body |
//APIExtractValue | API Extract value For an API Request, the extract template will be inserted here. The template chosen will be based on the type of assertion selected, as in the screenshot | TestCaseMethodAPITemplate_ExtractRegex TestCaseMethodAPITemplate_ExtractJSONPath TestCaseMethodAPITemplate_ExtractWholeResponse TestCaseMethodAPITemplate_ExtractCookieResponse |
//APIHeaders | API call headers. | TestCaseMethodAPITemplate_Header |
//APIParameters | API call parameters. | TestCaseMethodAPITemplate_Parameter |
//EnterIframe | Used to insert code snippet where an IFrame has been used on a webpage and so needs to be entered. | TestCaseMethodTemplate_IFrameEnter |
//LeaveIframe | This will insert the code for leavingthe IFrame | TestCaseMethodTemplate_IFrameLeave |
//Region - GherkinTag | Gherkin tag region (no end region tag used). | |
//Region - DocumentationParameter | Documentation parameter region. This inserts the description for any parameters set up for an object in a module collection, as below. | TestCaseMethodTemplate_DocumentationParameter |
//EndRegion - DocumentationParameter | ||
//Region - Identifiers | Associated object Identifiers region. The code templates linked to object identifiers will be inserted in this area. | PageObjectIdentifierTemplate* |
//EndRegion - Identifiers | ||
//Region - MethodDocumentation | Documentation method region. This inserts the description for the object, which is set up for an object in a module collection, as below. | TestCaseMethodTemplate_Documentation |
//EndRegion - MethodDocumentation | ||
//Region - Methods | Object interaction method region. Code templates linked to Test case methods will be inserted in this area | TestCaseMethodTemplate_* TestCaseMethodAPITemplate_* |
//EndRegion - Methods | ||
//Region - Testcases | Test case definition region Any test case methods will be inserted into this region | TestCaseMethodTemplate (this file will refer to one test case and will be repeated for each test case in the test case suite) |
//EndRegion - Testcases | ||
//Region - Test Logic | Region to embed the test logic for the test case. this will include initialising PageObjects, then embed the function calls | InitializePageObjectTemplate FunctionCallTemplate FunctionCallWithReturnTemplate |
//EndRegion - Test Logic |
Framework set for project type
You can choose a framework by selecting the type.
Project type | Framework set up |
---|---|
Web Automation | QuickStart Web Automation. |
Mobile Automation | QuickStart Mobile Automation. |
API Automation | QuickStart API Automation. |
Desktop Automation | QuickStart Desktop. |
Mainframe Automation | QuickStart Mainframe. |
Manual Testing | No framework set. |
Enterprise Test Data | Choose from the available Frameworks (or choose No Automation). |