Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

In this scenario, we are managing the specification of Cucumber Scenarios/Scenario Outline(s) based tests in Jira, using Xray, as detailed in the "standard workflow" mentioned in Testing with Cucumber

Then we need to extract this specification from Jira (i.e. generate related Cucumber .feature files), and run it in TeamCity GitLab against the code that actually implements each step that are part of those scenarios.

Finally, we can then submit the results back to JIRA and they'll be reflected on the related entities. 

Overall, our Build Configuration is composed of 3 basic steps.

Image Removed

Exporting Cucumber features 

We start by extracting the tests specification out of JIRA and generate the proper .feature files.

The export can take as input issue keys of requirements, Test Executions, Test Plans or a filter id, which will be the one we'll use.

For this, we'll invoke the REST API (Exporting Cucumber Tests - REST) in order to obtain a .zip file containing the .feature files.

We'll be using a Build Step of type "Command Line" for this purpose, along with "curl" utility to ease making the HTTP request.

Image Removed

The complete script content of the "custom script" field above is:


The GitLab configuration file .gitlab-ci.yml contains the definition of the build steps, including extracting the cucumber specification from Xray, running the automated tests and submitting back the results.

Code Block
languagejs
title.gitlab-ci.yml
image: "ruby:2.3"

test:
  script:
  - gem install cucumber
  - gem install rspec-expectations
  - 'curl -u $jira_user:$jira_password "http://$jira_server_url
No Format
curl -u %jira_user%:%jira_password% "%jira_base_url%/rest/raven/1.0/export/test?filter=11400&fz=truekeys=$cucumber_keys" -o features/features.zip'
  - 'rm -f features/*'
  - unzip -o features/features.zip -d features/

Notice that we're unzipping the .feature files to a local directory, so we're able to run them.

Run Cucumber scenarios

The exact syntax for running the Cucumber scenarios depends on the Cucumber implementation being used; in this case we're using Ruby's variant.

Therefore we're basically just invoking "cucumber" command with an option to generate a JSON report (e.g. "data.json").

Image Removed

You may have noticed a trick in the cucumber line above, in the end of the command (i.e. ".... || :"). That ensures that cucumber returns with exit code 0 (i.e. success), so the build may proceed.

Import execution results

In order to submit the results, we'll need to add a Build Step of type "Command Line", where we'll invoke the REST API, submitting the Cucumber JSON report generated in the previous step.

We also make sure this step is called always.

Image Removed

The complete script content of the "custom script" field above is:

No Format
curl -v -
  - cucumber -x -f json -o data.json
  - 'curl -H "Content-Type: application/json" -X POST -u %jira$jira_user%user:%jira$jira_password%password --data @data.json "%jira$jira_baseserver_url%url/rest/raven/1.0/import/execution/cucumber"

You may notice that we're using some parameters related with the Jira server, that we've configured at project level.

...

'
  - echo "done"