我搜索了高低,试图找出如何使用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>
祝你们这些正在寻找的人好运!
答案 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调用才能成功,并且要在下面将要总结的精确约束条件下进行。
第一个API调用是一个httpPost,它将创建一个测试运行。但是在测试实验室中将不可见! -不要问我为什么。它仅在测试的测试执行历史记录中可见。此外,除了最小的必填字段(测试ID,周期ID,测试集ID和其他一些……)之外,API调用还需要提供一个特定的临时状态:“未完成”。
< / li>第二个API调用是httpPut。真实测试的状态可以放在这里。这将使测试结果出现在测试实验室中(并更新测试历史记录的执行详细信息)。
龙虾先生对这个解决方案的描述如下: https://lobsterautomation.wordpress.com/2017/01/18/hp-alm-rest-api/ 并具有成功运行的所有详细信息。 请称赞他的帮助!