如何使用 REST API 将测试运行添加到 ALM

问题描述 投票:0回答:2

我到处搜索,试图找出如何使用 ALM 的 REST API 创建测试运行。

如果有人找到了更好的方法,那么我很乐意看到它!

昨晚才弄明白。

我使用名为 Postman 的工具来解决这个问题。

这是如何通过 REST API 获取您的 testcycl-id。首先转到测试实验室页面并创建一个测试集,然后向其中添加一个测试用例(或多个测试用例)。在执行网格中,您可以添加“测试 ID”和“ID”列。

测试 ID = test-id

ID = test-config-id

执行网格旁边还有另一个按钮,称为“详细信息”。如果单击它,您可以找到测试集 ID。

测试集 ID = cycle-id

一旦您获得了 cycle-id 和 test-id,您就可以执行 GET 并提取包含 testcycle-id 的测试集的整个记录。

GET https://SERVER/qcbin/rest/domains/DOMAIN/projects/PROJECT/test-instances?query={cycle-id[123];test-id[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>

祝那些正在寻找这个的人好运!

rest alm
2个回答
0
投票

使用 REST API 将测试运行添加到 ALM 的最简单方法是将具有状态的负载放入测试实例。我这样做的方法是使用自动化,它将我的测试实例的状态更改为阻塞,这会自动在测试运行模块中生成一个新的 fast_run。然后我的自动化脚本更改新创建的 fast_run 的状态,最终更改它链接到的测试实例的状态。

这是 Ruby(带有 Rest-Client 和 Nokogiri gems)代码:

 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}' "

0
投票

在测试实验室中为给定测试创建新测试执行的方法并不容易,必须依次调用 2 个 API 才能成功,并且具有精确的约束条件,我将在下面总结。

  1. 第一个 API 调用是将创建测试运行的 httpPost。但它在测试实验室中是不可见的! -别问我为什么。它将仅在测试的测试执行历史记录中可见。此外,除了最小的强制字段(测试 id、周期 id、测试集 id 和其他一些……)之外,api 调用还有一个需要放置的特定临时状态:“未完成”。

  2. 第二个 API 调用是 httpPut。真实测试的状态可以放在这里。这将使测试结果出现在测试实验室中(并更新测试历史执行细节)。

龙虾先生在这里亲切地描述了这个解决方案: https://lobsterautomation.wordpress.com/2017/01/18/hp-alm-rest-api/ 它具有成功运行的所有详细信息。 请为他的帮助点赞!

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.