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

时间:2016-09-23 12:05:21

标签: rest alm

我搜索了高低,试图找出如何使用REST API for ALM创建测试运行。

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

昨晚才知道这件事。

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

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

测试ID = test-id

ID = test-config-id

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

测试集ID = cycle-id

一旦你拥有了cycle-id和test-id,就可以执行GET并为你的测试集提取包含testcycl-id的整个记录​​。

获取https://SERVER/qcbin/rest/domains/DOMAIN/projects/PROJECT/test-instances?query= {cycle-id [123]; test-id [4567]}

获得此信息后,您将获得一个包含所有测试实例详细信息的xml,包括testcycl-id,尽管在xml中它简称为“id”。

然后,您可以使用它来创建测试运行,该测试运行既可以在Test Runs页面上创建测试运行,也可以在Test Lab页面的测试集中更新测试用例。

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>

祝你们这些正在寻找的人好运!

2 个答案:

答案 0 :(得分:0)

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

这里是Ruby(With 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}' "

答案 1 :(得分:0)

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

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

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

龙虾先生对这个解决方案的描述如下: https://lobsterautomation.wordpress.com/2017/01/18/hp-alm-rest-api/ 并具有成功运行的所有详细信息。 请称赞他的帮助!

相关问题