Creating a seamless integration for automatic bug reporting
Introduction:
In this guide, we’ll walk through the process of integrating ServiceNow’s Automated Test Framework (ATF) with Jira. This integration enables automatic bug reporting whenever a test case fails, streamlining the communication between testing and development teams. While this is a personalized approach, it can be adapted to integrate Jira with other functionalities of ServiceNow.
Understanding the Workflow:
- Identifying Triggers:
We’ll set up a business rule in ServiceNow to trigger whenever a test case fails. This rule will be activated when a new entry is inserted in the sys_atf_test_result
table indicating a failure.
Why Use a Business Rule?
A business rule in ServiceNow allows you to execute server-side logic whenever records are inserted, updated, deleted, or queried. It helps automate processes and ensure that specific actions are taken under defined conditions. In this case, the business rule will detect test failures and trigger the creation of a Jira bug.
- Navigating to the
sys_atf_test_result
table - Setting up the business rule with the correct conditions
- Utilizing Jira API:
We’ll leverage the Jira API to create a bug issue in Jira automatically. It’s essential to understand the structure of the Jira API. Initially, you can test the API using tools like Postman to ensure it works as expected.
Implementation Steps:
- Setting Up Credentials:
First, securely store your Jira API token and username in ServiceNow. This ensures that your credentials are safely accessed later during the integration process.
Steps:
- Navigate to the credentials section in ServiceNow.
- Input your Jira username and API token.
- Storing credentials in ServiceNow
- Writing the Business Rule:
- Navigate to the
sys_atf_test_result
table either by searching it in the All section or directly entering its name followed by.list
in the search. - Create a business rule triggered on update when the status is ‘fail’.
Steps:
- Go to
sys_atf_test_result
table. - Right-click on the table header > Configure > Business Rule.
- Ensure ‘Advanced’ is checked since we will write code.
- Set “When to run” to “After” and check “Update” only.
Filter Condition:
- Status is ‘fail’.
- Accessing the
sys_atf_test_result
table - Configuring the business rule settings
- Integration with Jira:
Using the ServiceNow web service (sn_ws), we will send a REST message to Jira to create a bug issue.
Code Snippet:
var request = new sn_ws.RESTMessageV2(); request.setEndpoint("https://yourcompany.atlassian.net/rest/api/3/issue"); // Replace with a generic URL request.setHttpMethod("POST"); var provider = new sn_cc.StandardCredentialsProvider(); var credential = provider.getCredentialByID('your_credential_id'); var user = credential.getAttribute("user_name"); var password = credential.getAttribute("password"); request.setBasicAuth(user, password); request.setRequestHeader('Accept', 'application/json'); request.setRequestHeader('Content-Type', 'application/json');
- Writing and testing the REST message code
- Setting up credentials in the script
- Constructing the Request Body:
Retrieve the necessary data such as summary and description from the sys_atf_test_result_step
table, ensuring to filter for the current test result.
Code Snippet:
var testSteps = new GlideRecord('sys_atf_test_result_step'); testSteps.addQuery("status", 'Failure'); testSteps.addQuery("test_result", current.sys_id); testSteps.query(); testSteps.next(); var des = testSteps.description; var summary = testSteps.summary; // Formatting summary and description summary = summary.replace(/['"]/g, ''); if (summary.includes("\n")) { summary = summary.replace(/\n/g, ' '); } var arr = des.split("\n"); des = ""; for (var j = 0; j < arr.length; j++) { des += "{\"type\": \"paragraph\",\"content\": [{\"type\": \"text\",\"text\": \"" + arr[j] + "\"}]},"; } des = des.substring(0, des.length - 1); var body = "{\"fields\": {\"project\":{\"key\": \"PROJECT_KEY\"},\"summary\":\"" + summary + " " + current.status + "\",\"description\": {\"version\": 1,\"type\": \"doc\",\"content\": [" + des + "]},\"issuetype\": {\"name\": \"Bug\"}}}"; request.setRequestBody(body); var response = request.execute();
- Querying and retrieving test step data
- Formatting the retrieved data
Conclusion:
By following these steps, you can seamlessly integrate ServiceNow ATF with Jira to automate bug reporting. This approach streamlines the process, ensuring efficient communication between testing and development teams. Feel free to adapt this framework to suit other integration needs within your organization.
Additional Tips:
- Regularly test the integration to ensure seamless functionality.
- Keep credentials secure to prevent unauthorized access.
- Document the integration process for future reference and troubleshooting.