Интеграција на Xray со Azure DevOps

Photo by ThisIsEngineering from Pexels

Xray лесно се интегрира со други алатки, без разлика дали спроведуваме континуирана интеграција на нашиот систем или едноставно сакаме да добиеме некои податоци.  Xray со методот на внесување на резултати од Cucumber, Junit, TestNG, NUnit ги поддржува најчестите извештаи на Test Runner.

Ако тестовите кои се импортираат сеуште не се креирани во Xray / Jira, тогаш Xray ќе ги креира автоматски.  Креираните тестови ќе имаат генерички тип на тест и ќе содржат идентификатор или име во полето за дефиниција. Xray ги искористи истите методиaa s во JIRA и за последователеното импортирање на резултатите од извршувањето.

DevOps е брзо развивање и деплоирање на софтвер за да се овозможи континуирана испорака на вредност до крајните корисници, а со тоа се постигнува зголемување на испораката на софтвер.  Azure DevOps е местото каде што тимовите управуваат, развиваат и испорачуваат софтвер во cloud или облак архитектура.  Azure DevOps нуди бесплатен приватен Git проект за најмногу 5 корисници, алатки за управување со проекти и тестови, градење континуирана интеграција –  CI и тимска соработка.  Може да се интегрира со повеќе од 2 000 апликации, вклучувајќи Trello, Slack, GitHub, Jira Software Server / Cloud, Google Sheets, Gmail и многу повеќе.  Постојат, исто така, Git интеграции кои се готови за употреба и се достапни на интернет, но ние нема да се фокусираме на нив. Ние ќе го користиме Azure DevOps како една CI алатка која што може да комуницира со Xray /Jira  проект за извршување тестови и испраќање на резултатите во Xray.  Кога кодот е комитуван, CI автоматски го гради и извршува тест-проектот, овозможувајќи рано откривање на грешки.  Бизнис организациите можат да постигнат брзо и идентично употребување на истата конфигурација во производствената околина во кое било дадено време.

AZUREDEVOPS ИТЕГРАЦИЈА СО XRAY CLOUD

Пре-сетинзи во Xray

Xray ја поддржува интеграцијата со алатките за континуирана интеграција, благодарение на неговиот REST API.  За овој пример имаме cloud инстанца од Jira поставена со Xray plugin.  Прво, креираме еден „Тест “ (Xray issue), додаваме Gherkin reference во делот Scenario и за детали на тест избираме Cucumber како на слика 1:

Слика 1: Cucumber Test во Jira/Xray cloud Инстанца

Cucumber feature фајловите можат да се експортираат од Xray UI или преку командната линија и да се извршат надворешно.  Тие може да се генерираат и од други типови на issues на Xray, како што се Test Set, Test Execution, and Test Plan. Во прилог е командата за експорт на фајловите за горенаведениот „Тест “:

curl -H "Content-Type: application/json" --output features.zip -X GET -H "Authorization: Bearer ${token}" "https://xray.cloud.xpand-it.com/api/v1/export/cucumber?keys= AZMARIJA-1"

Следниот  feature документ е генериран од примерот погоре:

Azure DevOps поставки

За да изградиме проект во Azure DevOps, треба да имаме познавање за структурата на CI или pipeline executions.  Бидејќи целта на овој документ е ориентирана кон QA, а не DevOps, ние ќе се задржиме само на креирањето на pipelineконфигурација и нејзино извршување за конкретниот пример. Azure DevOps pipeline може да изврши каков било тест со која било алатка што ја сакаме, но во овој пример, ние ќе ја користиме Cucumber алатката за тест како еден од стандардните видови на тест во Xray, но процесот повеќе или помалку е ист за Junit, NUnit или други алатки за тестирање.

Прво, за да ги користиме Azure DevOps cloud услугите , можеме да користиме Microsoft Account и  да се регистрираме тука.  Потоа треба да креираме нов проект со кликнување на копчето New Project и новиот креиран проект ќе ја има следнава рута „dev.azure.com/{YourProjectName}“.

Слика 2: Azure DevOps Dashboard

Бидејќи нема да навлегуваме премногу длабоко во можностите на Azure DevOps, ќе го користиме Repo service што е интегрирано складиште на нашиот проект и Pipelines каде што ги извршуваме командите:

Слика 3: Контролна табла на ново креиран проект – Repos and Pipelines се потенцирани на левото мени

Git repository или repo, е папка каде што се наоѓа кодот за тестирање и каде Git ги контролирапромените на фајловите. Кога ќе кликнеме на Repos на левото мени, можеме да креираме Git track во нашата папка што содржи maven проект од cucumber тест (слика 3). Можеме да користиме и други типови на Repo како GitHub, Bucket, итн. Но, бидејќи услугата Azure Repos вклучува неограничено cloud-hosted private Git repository за нашиот проект, ќе го користиме оној што го нуди Azure DevOps.

Git repo ја содржи секоја верзија на секоја датотека зачувана на таа локација.  Git ги зачувува овие датотеки многу ефикасно, така што имањето на голем број верзии не значи дека користи многу простор на дискот.  Зачувувањето на секоја верзија на датотеки му помага на Git подобро да го спои кодот и брзо и лесно се справува со извршување и контрола на повеќе верзии на кодот.

Слика 4: Repo со cucumber test

На сликата, можеме да видиме една дополнителна датотека со име azure-pipelines.yml.  Ова е главниот фајл за изградба на pipeline структурата.  Azure Pipeline е cloud-hosted pipeline за брз CI / CD кој работи со кој било јазик, платформа и cloud.  Датотеките YAML (Yet Another Markup Language) се многу корисни во пишувањето дефиниции за build и release на продуктот.  Azure Pipelines имаат вградени компоненти за креирање, испраќање, библиотеки, групи на задачи, групи за распоредување.  Azure-pipeline.yml фајлот се состои од код за извлекување на feature датотеките  од Xray, градење (извршување на тестот) и испраќање на резултатите назад со создавање на Test Execution во Xray.

trigger:
- master
 
pool:
  vmImage: 'windows-2019'
 
steps:
# With this bash command we interact with the Xray Jira project to get Auth token

- bash: |
    token=$(curl -H "Content-Type: application/json" -X POST --data "{ \"client_id\": \"$(client_id)\",\"client_secret\": \"$(client_secret)\" }" https://xray.cloud.xpand-it.com/api/v1/authenticate| tr -d '"')
    echo "##vso[task.setvariable variable=token;]$token"
  displayName: GetToken

# We request Xray REST API to get the feature file from the specified issue
- bash: |
    curl -H "Content-Type: application/json" --output features/features.zip -X GET -H "Authorization: Bearer $(token)"  "https://xray.cloud.xpand-it.com/api/v1/export/cucumber?keys=$(keys)"
    unzip -o features/features.zip -d ./IWECProject/features
  displayName: 'Get Feature From Xray'

# This step is the maven build of the project - it depends how our project is built and how we want to be run
- task: Maven@3
  inputs:
   mavenPomFile: 'IWECProject/pom.xml'
   mavenOptions: '-Xmx3072m'
   javaHomeOption: 'JDKVersion'
   jdkVersionOption: '1.11'
   jdkArchitectureOption: 'x64'
   publishJUnitResults: false
   testResultsFiles: '**/*.json'
   goals: 'clean compile test'
   
# With this bash command we push cucumber.json results file (created from the run in the before step) in the required Xray - cucumber issue

- bash: |
    curl -H "Content-Type: application/json" -X POST -H "Authorization: Bearer $(token)" --data @IWECProject/cucumber.json "https://xray.cloud.xpand-it.com/api/v1/import/execution/cucumber"
    echo "Sending results to XRay done"
  displayName: 'Send Results To Xray'
 
# Generate HTML report to display it in Azure Dashboard
- bash: |
    npm i cucumber-html-reporter
    node index.js
  displayName: 'Generate HTML Report'
  
# Publish HTML report in Azure DevOps 
- task: PublishHtmlReport@1
  inputs:
    reportDir: 'D:\a\1\s\cucumber_report.html'

Како што можеме да видиме од yml фајлот, користиме REST API повици за интеракција со Xray.  Client_id, client_secret и keys се поставени како променливи вредности во поставките на pipeline. Тие параметри се потребни за овластување и интеракција со Jira instance.  Од безбедносни причини, можеме да ги поставиме променливите client_id и client_secret како тајни вредности со примена на опцијата “Keep this value secret”.  Исто така, променливите се користат за лесна промена на вредноста, на пример, променливата keys е името на issue-то со кое сакаме да комуницираме и веројатно ќе ја менуваме често.  Така ќе можеме да работиме со истиот pipeline за различни или повеќе проблеми.

Излезната датотека со cucumber.json резултатите (–data @IWECProject/target/cucumber.json), генерирана од Test runner class, се користи за испраќање на резултатите во Xray issue и со тоа ќе се создаде Test Execution тип на issue со автоматски генерирано име “Execution results $timestamp” и ќе биде поврзано со Cucumber Test од каде ја извлековме features датотеката (“ AZMARIJA-1 ”) како на слика 5.

Слика 5: Test Execution Xray issue тип креиран со извршувањето на тестот во Azure DevOps

ЗАКЛУЧОК

Xray за Jira, алатката за проектен менаџмент, е високо препорачан plug-in, поради лесната употреба и можноста за интеграција со многу апликации / алатки.  Една од можностите кои ги нуди Xray е интеграција со Azure DevOps и неговите алатки за континуирана интеграција, благодарение на Xray REST API-то.  Со ваква интеграција, успеваме да ги следиме сите промени, модификации или регресии на едно место.  Со создавање на Xray issue, на пример со Gherkin kind reference, можеме автоматски да работиме и да го ажурираме статусот на извршување со минимален или без никаков човечки напор.  Процесот на автоматизација се прави со Azure DevOps pipeline со повлекување на конфигурацискиот feature фајл, извршување на тестот и испраќање на резултатите назад кон Xray – со создавање на Test Execution за поврзаното issue.

Ако сакате да дознаете повеќе за оваа тема, бидете со нас на 22.04.2021 во 18 часот на нашиот на тема “Intelligent Automation testing using Jira and Xray”.

Стани премиум член и доби пристап до сите содржини, специјален попуст на над 2.200 производи во ИТ маркет, верификуван профил и можност за огласување на ИТ Огласник. Плус ќе го поддржиш медиумот кој го градиме цели 16 години!

basic

членство

42 ден./мес

зачлени се

1337

членство

125 ден./мес

зачлени се
* плаќањето е на годишно ниво

Доколку веќе имаш премиум членство, најави се тука.

Добивај известувања
Извести ме за
guest
1 Коментар
Најнови
Најстари Со највеќе гласови
Inline Feedbacks
View all comments
trackback

[…] If you want to learn even more on this topic, we prepared two blogs on the topic available both in English and Macedonian. […]