Как добавить тестовый запуск в ALM с помощью REST API

Я искал как можно больше, пытаясь понять, как создать тестовый прогон с помощью REST API для ALM.

Если кто-то нашел лучший способ, я бы с удовольствием его увидел!

Только что понял это вчера вечером.

Я использовал инструмент под названием Postman, чтобы выяснить это.

Вот как получить свой testcycl-id через REST API. Сначала перейдите на страницу Test Lab и создайте набор тестов, а затем добавьте к нему тестовый пример (или несколько тестовых случаев). В сетке выполнения вы можете добавить столбцы для «ID теста» и «ID».

Идентификатор теста = идентификатор теста

ID = ID-теста-конфигурации

Рядом с сеткой выполнения есть еще одна кнопка под названием «Подробности». Если вы щелкнете по нему, вы сможете найти идентификатор набора тестов.

ID тестового набора = ID цикла

Когда у вас есть идентификатор цикла и идентификатор теста, вы можете выполнить GET и вытащить всю запись для своего набора тестов, которая будет включать идентификатор testcycl.

ПОЛУЧИТЬ https://SERVER/qcbin/rest/domains/DOMAIN/projects/PROJECT/test-instances?query= {идентификатор-цикла [123]; идентификатор-теста [4567]}

Получив эту информацию, вы получите обратно XML-файл со всеми деталями тестового экземпляра, включая testcycl-id, хотя в XML он называется просто «id».

Затем вы можете использовать это для создания тестового прогона, который создает тестовый прогон на странице «Тестовые прогоны», а также обновляет тестовый случай в наборе тестов на странице «Лаборатория тестирования».

POST https://SERVER/qcbin/rest/domains/DOMAIN/projects/PROJECT/runs

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Entity Type="run">
<Fields>
<Field Name="test-config-id"><Value>8901</Value></Field>
<Field Name="cycle-id"><Value>123</Value></Field>
<Field Name="test-id"><Value>4567</Value></Field>
<Field Name="testcycl-id"><Value>THIS IS THE VALUE THAT YOU RAN THE GET TO FIND</Value></Field>
<Field Name="build-revision"><Value>1</Value></Field>
<Field Name="name"><Value>MyRun</Value></Field>
<Field Name="owner"><Value>johnsmith</Value></Field>
<Field Name="status"><Value>Passed</Value></Field>
<Field Name="subtype-id"><Value>hp.qc.run.external-test</Value></Field>
<Field Name="duration"><Value>5</Value></Field>
<Field Name="execution-date"><Value>2016-09-23</Value></Field>
<Field Name="execution-time"><Value>08:01:07</Value></Field>
<Field Name="status"><Value>Passed</Value></Field>
</Fields>
</Entity>

Удачи тем из вас, кто это ищет!


person James Franken    schedule 23.09.2016    source источник
comment
Предлагаемый процесс можно легко автоматизировать, и вам не придется каждый раз проверять каждый параметр. Простой модуль можно создать на Python. Модуль запросов поможет вам легко отправлять сообщения REST. Я бы определенно потратил время на автоматизацию этой части :) иначе за большой проект убьешь себя! Хорошего дня!   -  person Marco smdm    schedule 21.03.2017
comment
Я уже написал его на Java и сделал частью моей Selenium Automation Framework. Работает как чемпион и экономит много времени. Основная идея моего поста заключалась в том, чтобы помочь людям определить отношения в ALM, которые могут быть очень запутанными.   -  person James Franken    schedule 22.03.2017
comment
REST API очень надежен и стабилен, поэтому автоматизация действительно сэкономит много времени :-) Молодец! Я сделал то же самое на питоне. Хорошего дня.   -  person Marco smdm    schedule 23.03.2017


Ответы (2)


Самый простой способ добавить тестовый запуск в ALM с помощью REST API - это поместить полезную нагрузку со статусом в тестовый экземпляр. Я сделал это с помощью автоматизации, которая меняет статус моего тестового экземпляра на заблокированный, что автоматически генерирует новый fast_run в модуле тестовых запусков. Затем мой автоматический скрипт изменяет статус вновь созданного fast_run, что в конечном итоге изменяет статус тестового экземпляра, с которым он связан.

Вот код Ruby (с гемами Rest-Client и Nokogiri):

 test_instances_url = "http://ALM-SERVER/qcbin/rest/domains/#{@alm_domain_name}/projects/#{@alm_project_name}/test-instances"
    puts "Test Instance URL >> #{test_instances_url} "
    @report.puts "Test Instance URL >> #{test_instances_url} "
    test_instance_addition_doc = "
    <Entity Type=\"test-instance\">
      <Fields>
        <Field Name=\"order-id\">
          <Value>1</Value>
        </Field>
        <Field Name=\"test-id\">
          <Value>#{test_id}</Value>
        </Field>
        <Field Name=\"subtype-id\">
          <Value>hp.qc.test-instance.MANUAL</Value>
        </Field>
        <Field Name=\"cycle-id\">
          <Value>#{test_set_id}</Value>
        </Field>
      </Fields>
    </Entity>"

    puts "Test instance Addition XML  >> #{test_instance_addition_doc} "
    @report.puts "Test instance Addition XML  >> #{test_instance_addition_doc} "

    RestClient.post(URI.escape(test_instances_url), test_instance_addition_doc, :content_type => 'application/xml', :cookies => {:QCSession => @session_cookie, :LWSSO_COOKIE_KEY => @token} )
    new_test_instances_url = "http://ALM-SERVER/qcbin/rest/domains/#{@alm_domain_name}/projects/#{@alm_project_name}/test-instances?query={cycle-id[#{test_set_id}]}"
    puts "New Test Instances URL >>  #{new_test_instances_url}"
    @report.puts "New Test Instances URL >>  #{new_test_instances_url}"

    test_instance_id_doc = Nokogiri::XML(RestClient.get(URI.escape(new_test_instances_url), :cookies => {:QCSession => @session_cookie, :LWSSO_COOKIE_KEY => @token}))
    test_instance_id = test_instance_id_doc.xpath("//Field[@Name='status']/Value[text()='No Run']/../preceding-sibling::Field[@Name='id']/Value").text
    puts "Test Instance ID  >>  '#{test_instance_id}'  "
    @report.puts "Test Instance ID  >>  '#{test_instance_id}'  "

    new_test_instance_url = "http://ALM-SERVER/qcbin/rest/domains/#{@alm_domain_name}/projects/#{@alm_project_name}/test-instances/#{test_instance_id}"
    test_instance_update_doc  = "<Entity Type='test-instance'><Fields><Field Name='status'><Value>Blocked</Value></Field></Fields></Entity>"
    RestClient.put(URI.escape(new_test_instance_url), test_instance_update_doc, :content_type => 'application/xml', :cookies => {:QCSession => @session_cookie, :LWSSO_COOKIE_KEY => @token} )
    sleep(2)
    runs_doc = Nokogiri::XML(RestClient.get(URI.escape("http://ALM-SERVER/qcbin/rest/domains/#{@alm_domain_name}/projects/#{@alm_project_name}/runs?query={cycle-id[#{test_set_id}]}"),:cookies => {:QCSession => @session_cookie, :LWSSO_COOKIE_KEY => @token}))
    run_id = runs_doc.xpath("//Field[@Name='cycle-id']/Value[text()='#{test_set_id}']/../following-sibling::Field[@Name='id']/Value").last.text
    puts "Run ID  >>  '#{run_id}' "
    @report.puts "Run ID  >>  '#{run_id}' "
person ayushk    schedule 03.04.2017
comment
Было бы более полезно, если бы вы добавили код и \ или запросы, которые вы используете - person The Godfather; 19.10.2017
comment
Возможно, уже слишком поздно отвечать, но я сделал это, используя Ruby с гемом Rest-Client, а не Java, если вы хотите увидеть код Ruby, я отправлю его - person ayushk; 09.02.2018

Способ создания нового выполнения теста в тестовой лаборатории для данного теста непрост, и для успешного выполнения необходимо последовательно выполнить 2 вызова API и с точными ограничениями, которые я резюмирую ниже.

  1. первый вызов API - это httpPost, который создаст тестовый прогон. Но в тестовой лаборатории его не будет видно! -не спрашивайте меня, почему. Это будет видно только в истории выполнения теста. Кроме того, вызов api имеет, помимо минимальных обязательных полей (идентификатор теста, идентификатор цикла, идентификатор набора тестов и некоторые другие ...), КОНКРЕТНЫЙ ВРЕМЕННЫЙ СТАТУС, который необходимо указать: «Не завершено».

  2. второй вызов API - это httpPut. здесь можно указать настоящий статус теста. Это заставит результат теста появиться в тестовой лаборатории (и обновить детали выполнения истории теста).

Это решение было любезно описано мистером лобстером здесь: https://lobsterautomation.wordpress.com/2017/01/18/hp-alm-rest-api/, и в нем есть все детали для успешного запуска. Пожалуйста, похвалите его за помощь!

person Bastien Gallienne    schedule 24.05.2019