Manager 9.7.1 Release Notes

July 19, 2019

We are happy to announce the release of qTest Manager 9.7.1 for our OnDemand customers! Here are a few release highlights:

  • APIs for Jira integration and configuration

  • New Site Templates APIs

  • New Project APIs and additional inputs

  • VERA integration pre-execution approval of Test Cases

New APIs to Automate Jira Integration Configuration and Retrieval

New APIs are available for our Jira Integration that automates the configuration and retrieval of Releases, Requirements, and Defects between qTest and your Jira instance. This is beneficial for Enterprise customers who want to manage their qTest Jira integration outside of the qTest UI.

Add a New Connection

The following APIs allow you to add a new Jira connection using either the username and password/token option, or through OAuth. If using OAuth, you will need to retrieve an authorize URL from Jira prior to attempting connection setup.

Add a new Jira connection, not using OAuth

  • POST {qTest URL}/api/v3/projects/{projectId}/settings/integration/connection
    • New connections are inactive. Once Jira Properties are added and configured you will use a separate API to activate the connection.

Sample Request:

{

"external_system": "Jira",

"connection_name": "new connection",

"server_url": "https://....",

"web_url": "https://...."

"authentication_type": "Token",

"username": "...@tricentis.com",

"token": "..."

}

Sample Response:

{

"Status": "Inactive",

"Connection id":30009

}

Jira Server=use Token or username/password for

Jira Cloud= use Token

Values in the sample request in bold cannot be changed.

Atlassian deprecated the ability to configure a Jira connection using username/password for Jira Cloud in 2018. Therefore, you must use the Token method.

Retrieve a Jira OAuth authorize URL in the event you would like to add a new Jira connection using OAuth method. This API must be performed first, before adding a new connection using OAuth.

  • GET {qTestURL}/api/v3/projects/0/settings/integration/connections/oauthAuthorizeURL?serverURL=...

Sample Response:

{

"jiraToken": "...",

"jiraSecret": "...",

"authorizeUrl":

"https://.../plug-ins/servlet/oauth/authorize?oauth_token=..."

}

  • Access the authorizeURL in a web browser that is retrieved in the response. Log in to Jira, grant access, and copy the verification code.
  • Use the Jira Token, Jira Secret, and the verification code as inputs in the subsequent API call to create a new connection using Jira OAuth.

Add a new Jira connection, using OAuth

  • POST {qTest URL}/api/v3/projects/{projectId}/settings/integration/connections
    • New connections are inactive. Once Jira Properties are added and configured you will use a separate API to activate the connection.

Sample Request:

{

"external_system":"Jira",

"connection_name":"https://...",

"server_url":"https://...",

“web_url”:“https://...”,

"authentication_type":"Oauth",

"username":"apikey",

"jiraToken": "...",

"jiraSecret": "...",

"jiraVerifier": "..."

}

Sample Response:

{

"Status": "Inactive",

"Connection id":

30009

}

Values in the sample request in bold cannot be changed.

Retrieve Jira ID's

The following APIs allow you to retrieve details of your Jira Projects, Issue Types, and Fields. You will receive the Jira ID's for each component which will be used in subsequent APIs.

Retrieve details of all Jira Projects

  • GET {Jira URL}/rest/api/2/project
    • Use the Jira Project Id in the response when calling subsequent qTest APIs

Retrieve details of all Jira Issue Types

  • GET {Jira URL} /rest/api/2/issuetype
    • Use the Jira Issue Type id in the response when calling subsequent qTest APIs

Retrieve details of Jira Fields of a Jira Project

  • GET {jiraUrl}/rest/api/2/issue/createmeta?expand=projects.issuetypes.fields&issuetypeIds={jiraIssueTypeId}
    • Use the key in the response when calling subsequent qTest APIs

Defects

The following APIs allow you to add and configure a defect type. You will use the Jira ID's received from the API responses above.

Add a Defect type with default configurations

  • POST{qTestURL}/api/v3/projects/{projectId}/settings/integration/connections/{connectionId}/defect/mappings?externalProjectId={jiraProjectId}&externalIssueTypeId={jiraIssueTypeId}

Sample Response:

{

"externalProjectId":

"10003",

"externalTypeId":

"10004",

"sendAttachmentToJira

": "true",

"configures": [

…,

{

"externalFieldId":

"description",

"qTestFieldIds":

"Session

Description,Session

Environment,Description"},

...

]

}

The following id's needed for this API are retrieved from the API responses in the GET Jira Projects and GET Jira Issue Types APIs.

  • jiraProjectId
  • jiraIssueTypeId

The bold text in the sample response defines the default auto-fill configuration.

You cannot add duplicate Defect mappings with the same Jira Project ID or Issue Type ID.

Configure a Defect Type

  • PUT{qtestUrl}/api/v3/projects/{projectId}/settings/integration/connections/{connectionId}/defect/mappings?externalProjectId={jiraProjectId}&externalIssueTypeId={jiraIssueTypeId}

Sample Request:

{

"sendAttachmentToJira": "true",

"configures": [

{

...

},

{

"externalFieldId": "description",

"qTestFieldIds": "Name,Target Release/Build"

},

{

...

}

]

}

The following id's are needed for this API and are retrieved from the API responses in the GET Jira Projects and GET Jira Issue Types APIs.

  • jiraProjectId
  • jiraIssueTypeId

The configure property is an array to define the auto-fill configurations.

  • Each element is a pair of Jira fields (external field id) and the qTest fields (qTest field id) will be auto-filled to the Jira field.
  • You can only auto-fill for Jira text type fields.
  • You can auto-fill multiple qTest fields to one Jira field. Use a comma with no spaces to separate the fields.

The following qTest fields can be configured to be auto-filled to Jira fields:

  • Assigned To
  • Description
  • Environment
  • Execution Type
  • Planned End
  • Planned Start
  • Submitter
  • Target Release/Build
  • Test Case Version
  • Test Data Source
  • Name
  • Precondition
  • Test Case Description
  • Session URL
  • Sessions Description
  • Session Environment
  • Test Run URL

Enable populating Jira unlinked Defects

  • PUT /api/v3/projects/{projectID}/settings/integration/connections/{connectionID}/defect?storeUnlinkedDefects=...
    • The following id's are needed for this API are retrieved from the API responses in the GET Jira Projects and GET Jira Issue Types APIs.
      • jiraProjectId
      • jiraIssueTypeId
    • New connections, by default, will not have this enabled. To enable, set the Store Unlinked Defects value =true.

Requirements

The following APIs allow you to add and configure Requirements. You will use the Jira ID's received from the API responses above.

Add a Requirement type with default configurations

  • POST{qtestUrl}/api/v3/projects/{projectId}/settings/integration/connections/{connectionId}/requirement/mappings?externalProjectId={jiraProjectId}&externalIssueTypeId={jiraIssueTypeId}

Sample Response:

{

"externalProjectId": "10003",

"externalTypeId": "10001",

"mapping_id": 73157,

"external_filter": "",

"external_field_1_id": "",

"external_field_2_id": "",

"active_external_fields": "id,status,summary,description"

}

The following id's needed for this API are retrieved from the API responses in the GET Jira Projects and GET Jira Issue Types APIs.

  • jiraProjectId
  • jiraIssueTypeId

You cannot add duplicate Requirement mappings with the same Jira Project ID or Issue Type ID.

Configure a Requirement Type and organize the imported Requirements

  • PUT{qtestUrl}/api/v3/projects/{{projectId}}/settings/integration/connections/{connectionId}/requirement/mappings?externalProjectId={jiraProjectId}&externalIssueTypeId={jiraIssueTypeId}

Sample Request:

{

"externalProjectId": "10003",

"externalTypeId": "10001",

"mapping_id": 73157,

"external_filter": "",

"external_field_1_id": "",

"external_field_2_id": "",

"active_external_fields": "id,status,summary,description,customfield_10021"

}

The following id's needed for this API are retrieved from the API responses in the GET Jira Projects and GET Jira Issue Types APIs.

  • jiraProjectId
  • jiraIssueTypeId

“external_field_1_id” and “external_field_2_id”: Keys of 2 Jira fields that are used to organize imported Requirements.

“active_external_fields": Keys of Jira fields that will display in the qTest Requirement page (Jira read-only properties panel).

  • You can specify a list of Jira fields. Use a comma with no spaces to separate the fields.

Enable Requirement Integration feature

  • PUT {qtestUrl}/api/v3/projects/{projectId}/settings/integration/connections/{connectionId} /requirement?active=true
    • Requirement Types must be added prior to enabling the Requirement integration.
    • Disable the Requirement integration by setting active=false.

Releases

The following APIs allow you to add and configure Releases. You will use the Jira ID's received from the API responses above.

Add a Release Type

  • POST{qtestUrl}/api/v3/projects/{projectId}/settings/integration/connections/30009/release/mappings?externalProjectId={jiraProjectId}&externalIssueTypeId={jireReleaseType}

Sample Response:

{

"externalProjectId": "10003",

"externalIssueTypeId":

"Sprint",

"data_retrieval_options": [ "active" ],

"auto_update_release_scope": "true" }

The following id is needed for this API and is retrieved from the API response in the GET Jira Projects.

  • jiraProjectId

External Issue Type ID allowed values:

  • fixVersions
  • Sprint
    • case sensitive

Configure a Release Type

  • PUT{qtestUrl}/api/v3/projects/{projectId}/settings/integration/connections/{connectionId}/release/mappings?externalProjectId={jiraProjectId}&externalIssueTypeId=Sprint

Sample Request:

{ "data_retrieval_options": [

"active", "future", "completed"

],

"auto_update_release_scope": "true"

}

The following id is needed for this API are retrieved from the API responses in the GET Jira Projects.

  • jiraProjectId

External Issue Type ID allowed values:

  • fixVersions
  • Sprint
  • case sensitive

Data Retrieval Options allowed values:

  • fixVersions:
    • released
    • unreleased
  • Sprint:
    • active
    • future
    • completed

Enable Release Integration

  • PUT{qtestUrl}/api/v3/projects/{projectId}/settings/integration/connections/{connectionId}/release?active=true &autoFilterTestRun=true
    • Release Types must be added prior to enabling the Release integration.
    • Disable the Release integration by setting active=false.
    • Enable the "Auto filter Test Runs on Jira iframe to match FixVersions/Sprint of Jira issue" by setting autoFilterTestRun=true

Activate Jira Connection

The following API allows you to activate your Jira connection once you have configured the Jira properties you want to sync with qTest.

  • PUT{qtestUrl}/api/v3/projects/{projectId}/settings/integration/connections/{jiraConnectionId}?active=true
    • You cannot activate the Jira connection if you have not added any Defect types.
    • Activating this connection will deactivate any other active connections. If this is the only available connection, activating it will also enable the Jira integration.
    • Disable the Jira Connection by setting active=false.

Trigger Data Retrieval from Jira to qTest

The following API allows you to trigger the data retrieval from the Jira properties you selected, from an activate Jira connection. The response includes a job ID so you can check when the data retrieval is completed, by using this API: GET {qtestUrl}/api/v3/projects/queue-processing/{jobId}

  • GET{qtestUrl}/api/v3/projects/{projectId}/settings/integration/connections/{ConnectionId}/retrieve?artifact={artifactType}

Sample Response:

{ "id": 2133988,

"type":

"FETCH_EXTERNAL_RELEASES",

"state":

"IN_WAITING" }

Artifact allowed values:

  • defects
  • requirements
  • releases

Retrieve and Remove Jira Connection Information

The following APIs allow you to retrieve and remove qTest information associated with your Jira connection.

Retrieve All Jira Connections of a qTest Project

  • GET /api/v3/projects/{projectID}/settings/integration/connections

Retrieve Defect Types of a Jira Connection

  • GET{qtestUrl}/api/v3/projects/{projectID}/settings/integration/connections/{connectionID}/defect/mappings? externalProjectId={jiraProjectId}&externalIssueTypeId={jiraIssueTypeId}
    • If externalProjectId and externalIssueTypeId are ommitted, all defect types are included in the response.

Remove a Defect Type

  • DELETE{qtestUrl}/api/v3/projects/{projectId}/settings/integration/connections/{connectionId}/defect/mappings?externalProjectId={jiraProjectId}&externalIssueTypeId={jiraIssueTypeId}

Retrieve Requirement Types of a Jira Connection

  • GET{qtestUrl}/api/v3/projects/{{projectId}}/settings/integration/connections/{connectionId}/requirement/mappings?externalProjectId={jiraProjectId}&externalIssueTypeId={jiraIssueTypeId}
    • If externalProjectId and externalIssueTypeId are ommitted, all defect types are included in the response.

Remove a Requirement Type

  • DELETE{qtestUrl}/api/v3/projects/{{projectId}}/settings/integration/connections/{connectionId}/requirement/mappings?externalProjectId={jiraProjectId}&externalIssueTypeId={jiraIssueTypeId}

Retrieve Release Types of a Jira Connection

  • GET{qtestUrl}/api/v3/projects/{projectId}/settings/integration/connections/{connectionId}/release/mappings?externalProjectId={jiraProjectId}&externalIssueTypeId=Sprint
    • externalIssueTypeId: its allowed values include fixVersions and Sprint (case-sensitive)

Remove a Release Type

  • DELETE{qtestUrl}/api/v3/projects/{projectId}/settings/integration/connections/{connectionId}/release/mappings?externalProjectId={jiraProjectId}&externalIssueTypeId=Sprint
    • externalIssueTypeId: its allowed values include fixVersions and Sprint (case-sensitive)

New APIs

Project APIs

These Project APIs combined with the new UUID or Template ID inputs, allow you to search for qTest Projects and update a Project with the provided values in the API request. Example, inclusion/exclusion of a UUID or a Template ID to a specific project.

Permissions Required:

  • Edit Projects
  • Manage Site Fields (only if using the Template ID input)

Search for Projects

  • POST /api/v3/projects/search

Updates a Project

  • PUT /api/v3/projects/{projectID}
    • This action will also be logged in the Audit Log as an 'Edit Project' action.

Site Templates API

The new Site Template APIs allow you to retrieve all Site Templates, overwrite a Site Template in an existing qTest Project, as well as remove qTest Projects from a Site Template. The new Template ID input available to you, in the Project APIs, allows you to complete the calls below.

Permissions Required:

  • Edit Projects
  • Manage Site Fields

Retrieves all Site Templates

  • GET /api/v3/site-templates

Apply a Site Template to an existing Project

  • POST /api/v3/site-templates/{templateID}/projects
    • Create new Site Field values = true creates new values to the site fields
    • Create new Site Field values = false keeps the values private to the project when there are "unique values in project fields that do not exist in site fields"

Removes Projects from a Site Template

  • DELETE /api/v3/site-templates/{templateID}/projects
  • Template ID = 0 removes all site templates associated with the provided Project ids list.

User APIs

The new User APIs allow you to update User information, such as status, authentication, groups, passwords, assigned Projects etc. This will allow customers to centrally maintain their base user access to qTest through APIs. New inputs are also available for the User API.

Update information of a user

  • PUT /api/v3/users/{user_id}

Remove association between users and projects

  • PUT /api/v3/users/projects

API Enhancements

The following APIs are enhanced to provide you the ability to manage qTest information through the use of APIs as opposed to using the qTest Manager UI.

Project APIs

Two new inputs are available in the Project APIs.

  • UUID: is an upper-level identifier for Enterprise customers utilizing APIs to link qTest Projects with additional, external ID's.

    UUID is case sensitive and space(s) are not allowed. You can assign a single UUID to multiple qTest Projects. A qTest Project can have one, or no UUID assigned.
    • POST/api/v3/projects create a new Project and assign a UUID

    • GET/api/v3/projects retrieves all Projects with a UUID

    • POST/api/v3/projects/search will search for Projects with/without UUID

      • Set “uuid”: [“”] to query all projects with an empty uuid

      • Set “uuid”: [“uuid_1”,””] to query all projects with a uuid =uuid_1 and projects with an empty uuid

    • PUT/api/v3/projects/{projectID} updates a specific Project with a UUID

      • Set " uuid": “” to remove UUID

  • Template ID:

    • POST/api/v3/projects create a new Project and assign a Site Field Template

    • GET/api/v3/projects retrieves all Projects with a Template ID

    • PUT/api/v3/projects/{projectID} add/remove a Site Template from a qTest Project

      • Set "template_id": “” to remove associated Template

User APIs

Several new inputs are available in the User APIs.

  • Status:
    • PUT /api/v3/users/{user_id}
      • Example, set “status” to 1 for “ACTIVE”, to 3 for “INACTIVE” to update the status of a user.
  • User Group IDs: List user group ids will be assigned for new user.
    • PUT /api/v3/users/{user_id}
  • Send Activation Email: activation email will be ignored if this is set to false
  • External Auth Config ID: auto assign this new user with External Authentication system by this providing config id here. If this value is provided, “external_user_name” need to have value, or it will fail to create.
    • PUT /api/v3/users/{user_id}
      • Set “external_auth_config_id” to LDAP/SSO configuration ID to link user to an LDAP/SSO user.
      • Set “external_auth_config_id” to -1 to turn user to INTERNAL user.
  • External User Name:
    • PUT /api/v3/users/{user_id}
      • external username that will be assigned to a newly created qTest user
      • Set “external_user_name” to the LDAP/SSO username to link the qTest user to an LDAP/SSO user.

New Features and Enhancements

Requirements Tab new UI

The Requirements tab has a new UI with the 9.7 release to provide an enhanced user experience. All of the information previously displayed is still available, however, the Description field is no longer displayed at the top of the main page. The Requirements description is now located within the Properties tab.

 

Vera Integration Pre-Execution Approval of Test Cases

The 9.6.1 Manager release, included the ability to integrate with VERA, which is an e-signature tool used for validation testing within a LifeSciences FDA regulated environment.

As of Manager 9.7, the VERA integration allows you to route a Test Case from qTest for approval/rejection to VERA prior to the Test Case execution. Previously, you could only route a Test Run for approval/rejection after execution.

For more information on the VERA integration, please read VERA Integration.

 

Additionally, the following enhancements have been made to the Post-Execution approval process.

  • You cannot delete a Test Run that has been approved in VERA from the Test Execution Tree or the Data Query.

Jira Plug-in 8.02/6.11.12

This new version of the Jira Plug-in for Jira Server and Jira Data Center, is now compatible with Jira SSO users who are submitting bugs from qTest to Jira . You can download the new version here from the Atlassian Marketplace.

Compatibility Matrix

Jira Plug-in Version Jira Data Center Version Jira Server Version

6.11.12

7.5.0-7.13.5

7.5.0-7.13.5
8.0.2 8.0.0-8.2.1 8.0.0-8.2.1

Bug Fixes and Performance Improvements

Projects with a Large Number of Users

Ticket 27711: Performance is now improved when moving from one Project to the next when there are a large number of users assigned to the Project.

Ticket # Component Description
28146 Data Query Previously, System Queries of All test cases would display all test cases, but when trying to customize the view to add several customized fields, the query results were not as expected. This is now resolved.
29213 Test Status Test Statuses displayed in the Test Cycle and in the Tree View, as 'incomplete' when they are actually passed. This is now fixed.