如何使用RESTAPI向ALM添加测试运行

如何使用RESTAPI向ALM添加测试运行,rest,alm,Rest,Alm,我到处搜索,试图找出如何使用RESTAPI for ALM创建测试运行 如果有人找到了更好的方法,那么我很想看看 我昨晚才弄明白 我用了一个叫邮递员的工具来解决这个问题 这是如何通过RESTAPI获取TestCycle id的。首先转到测试实验室页面,创建一个测试集,然后向其中添加一个测试用例(或多个测试用例)。在执行网格中,可以添加“测试ID”和“ID”列 测试ID=测试ID ID=测试配置ID 在执行网格旁边有另一个名为“详细信息”的按钮。如果单击该按钮,则可以找到测试集ID 测试集ID=循

我到处搜索,试图找出如何使用RESTAPI for ALM创建测试运行

如果有人找到了更好的方法,那么我很想看看

我昨晚才弄明白

我用了一个叫邮递员的工具来解决这个问题

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

测试ID=测试ID

ID=测试配置ID

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

测试集ID=循环ID

一旦您有了循环id和测试id,您就可以执行GET并取出测试集的整个记录,其中将包括TestCycle-id

获取{循环id[123];测试id[4567]}

一旦您获得了这些信息,您将返回一个包含所有测试实例详细信息的xml,包括TestCycle id,尽管在xml中它被简单地称为“id”

然后,您可以使用它来创建测试运行,该测试运行既可以在“测试运行”页面上创建测试运行,也可以在“测试实验室”页面中更新测试集中的测试用例

职位


8901
123
4567
这是您运行GET以查找的值
1.
MyRun
约翰史密斯
通过
hp.qc.run.external-test
5.
2016-09-23
08:01:07
通过

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

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

以下是Ruby(带有Rest客户端和Nokogiri gems)代码:

test\u实例\u url=”http://ALM-SERVER/qcbin/rest/domains/#{@alm_domain_name}/projects/{@alm_project_name}/test instances“
放置“测试实例URL>>{Test_实例URL}”
@report.puts“测试实例URL>>{Test\u实例\u URL}”
测试\实例\添加\文档=”
1.
#{test_id}
hp.qc.test-instance.MANUAL
#{test_set_id}
"
放置“测试实例添加XML>>{Test_instance_Addition_doc}”
@report.puts“测试实例添加XML>{Test_instance_Addition_doc}”
RestClient.post(URI.escape(test_instances_url),test_instances_addition_doc,:content_type=>'application/xml',:cookies=>{:QCSession=>@session_cookie,:LWSSO_cookie_KEY=>@token})
新的\u测试\u实例\u url=”http://ALM-SERVER/qcbin/rest/domains/#{@alm_domain_name}/projects/{@alm_project_name}/test instances?query={cycle id[#{test_set_id}]}”
放置“新测试实例URL>>{New_Test_Instances_URL}”
@report.puts“新测试实例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']/../previous sibling::Field[@Name='id']/Value”).text
放置“测试实例ID>>”#{Test_实例ID}”
@report.puts“Test Instance ID>>”#{Test_Instance_ID}”
新的测试实例url=”http://ALM-SERVER/qcbin/rest/domains/#{@alm_domain_name}/projects/{@alm_project_name}/test instances/{test_instance_id}”
测试\u实例\u更新\u文档=“已阻止”
RestClient.put(URI.escape(new_test_instance_url),test_instance_update_doc,:content_type=>'application/xml',:cookies=>{:QCSession=>@session_cookie,:LWSSO_cookie_KEY=>@token})
睡眠(2)
运行\u 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同级::Field[@Name='id']/Value”).last.text
将“运行ID>>”#{Run_ID}”放入
@report.puts“Run ID>>”#{Run\u ID}”

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

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

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

  • lobster先生在此亲切地描述了该解决方案: 它拥有成功运行的所有细节。
    请表扬他的帮助

    建议的整个过程可以很容易地自动化,您不必每次都检查每个参数。可以用python创建一个简单的模块。请求模块将帮助您轻松发送其余消息。我肯定会花一些时间和自动化这一部分:)否则的大项目,你会自杀!祝你有美好的一天!已经用Java编写了它,并将其作为我的Selenium自动化框架的一部分。像冠军一样工作,节省了很多时间。我这篇文章的主要目的是帮助人们确定ALM中与c的关系
    <?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>
    
     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}' "