【问题标题】:Update test execution status in QC using Rest API + Python使用 Rest API + Python 更新 QC 中的测试执行状态
【发布时间】:2017-02-10 13:28:33
【问题描述】:

我想使用 Rest api 将 Robot framework 的测试结果更新为 QC。 通过获取机器人框架的 output.xml 文件,我想使用 rest api 将测试结果更新到 QC。

为此,我已经开始使用带有 python 请求和 ElementTree 模块的 HP ALM 11 Rest api 开发脚本。

现在我可以从 QC 进行身份验证、存储 cookie 和检索缺陷、测试 ID、测试实例。

但现在我想在 QC 的测试实验室中更新测试执行状态,我尝试如下: - 通过查询test-set id和testcase-id使用测试实例的post方法。

requests.put(self.url + u'/qcbin/rest/domains/<Domain name>/projects/<Project name>/test-instances/query={id[1];test-id[3]}', headers=self.header, data=xml, auth=(self.username,self.__password))

但我得到以下错误

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><QCRestException><Id>qccore.general-error</Id><Title>Not Found</Title><StackTrace>javax.ws.rs.WebApplicationException&#xD;
at org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleRequest(FindResourceMethodHandler.java:84)&#xD;
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)&#xD;
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)&#xD;
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:61)&#xD;
at org.apache.wink.server.internal.handlers.FindRootResourceHandler.handleRequest(FindRootResourceHandler.java:93)&#xD;
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)&#xD;
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)&#xD;
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:61)&#xD;
at org.apache.wink.server.internal.handlers.HeadMethodHandler.handleRequest(HeadMethodHandler.java:53)&#xD;
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)&#xD;
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)&#xD;
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:61)&#xD;
at org.apache.wink.server.internal.handlers.OptionsMethodHandler.handleRequest(OptionsMethodHandler.java:46)&#xD;
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)&#xD;
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)&#xD;
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:61)&#xD;
at org.apache.wink.server.internal.handlers.SearchResultHandler.handleRequest(SearchResultHandler.java:33)&#xD;
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)&#xD;
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)&#xD;
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:61)&#xD;
at org.apache.wink.server.handlers.AbstractHandlersChain.run(AbstractHandlersChain.java:48)&#xD;
at org.apache.wink.server.internal.RequestProcessor.handleRequestWithoutFaultBarrier(RequestProcessor.java:163)&#xD;
at org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:137)&#xD;
at org.apache.wink.server.internal.servlet.RestServlet.service(RestServlet.java:116)&#xD;
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)&#xD;
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)&#xD;
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)&#xD;
at org.hp.qc.web.restapi.RESTApiFilter.doFilter(RESTApiFilter.java:67)&#xD;
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)&#xD;
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)&#xD;
at org.hp.qc.web.restapi.performance.PerformanceMonitorRESTFilter.doFilter(PerformanceMonitorRESTFilter.java:45)&#xD;
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)&#xD;
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)&#xD;
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378)&#xD;
at com.hp.sw.bto.ast.security.lwsso.authenticator.springSecurity.SpringSecurity2LWSSOIntegrationFilter.doFilter(SpringSecurity2LWSSOIntegrationFilter.java:182)&#xD;
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)&#xD;
at org.hp.qc.web.restapi.sessionmanagement.ImplicitSessionFilter.doFilter(ImplicitSessionFilter.java:54)&#xD;
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)&#xD;
at org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)&#xD;
at org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)&#xD;
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)&#xD;
at com.hp.sw.bto.ast.security.lwsso.authenticator.springSecurity.LWSSO2SpringSecurityIntegrationFilter.doFilter(LWSSO2SpringSecurityIntegrationFilter.java:299)&#xD;
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)&#xD;
at org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101)&#xD;
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)&#xD;
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)&#xD;
at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)&#xD;
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)&#xD;
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)&#xD;
at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175)&#xD;
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)&#xD;
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)&#xD;
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)&#xD;
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)&#xD;
at com.mercury.optane.core.state.ServerStatusFilter.doFilter(ServerStatusFilter.java:33)&#xD;
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)&#xD;
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)&#xD;
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)&#xD;
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)&#xD;
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)&#xD;
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)&#xD;
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)&#xD;
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)&#xD;
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)&#xD;
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)&#xD;
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)&#xD;
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)&#xD;
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)&#xD;
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)&#xD;
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)&#xD;
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)&#xD;
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)&#xD;
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)&#xD;
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)&#xD;
at java.lang.Thread.run(Thread.java:619)&#xD;

有人可以帮我解决这个错误吗?或建议任何方法将测试执行状态更新为 QC?

提前致谢。

【问题讨论】:

    标签: python rest automated-tests robotframework hp-quality-center


    【解决方案1】:
    requests.put(self.url + u'/qcbin/rest/domains/<Domain name>/projects/<Project name>/test-instances/query={id[1];test-id[3]}', headers=self.header, data=xml, auth=(self.username,self.__password))
    

    您提到的查询结构从根本上是错误的。

    而不是

    /test-instances/query={id[1];test-id[3]}
    

    使用

    /test-instances?query={id[1];test-id[3]}
    

    一般情况下,任何包含查询参数的url都以'?'开头,如果有多个则应附加'&'

    【讨论】:

      【解决方案2】:

      请看这里:https://sqa.stackexchange.com/questions/9298/alm-qc-api-update-test-execution-in-a-test-set

      想通了

      我必须从 GET 查询中提取“id”值并在以下 PUT 调用中使用它: 把http://host:port/qcbin/rest/domains/domain/projects/project/test-instances/[id_from_GET_call]

      希望这会有所帮助。我搜索了大约 1 小时才找到这个答案...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-19
        • 1970-01-01
        相关资源
        最近更新 更多