当前位置: 首页 > 知识库问答 >
问题:

通过groovy脚本将测试结果从soapui传递给testlink

沈国安
2023-03-14

我想使用SoapUI 5.0将groovy脚本连接到testlink服务器,然后将测试结果传递给测试链接

在尝试这样做之前,我安装了从GitHub(https://github.com/kinow/testlink-java-api)下载的TestLinkJavaAPI库作为jar文件。

我复制了testlink-java-api-1.9.17-1归档文件。jar到具有SoapUI的目录的路径如下:\SoapUI\lib和\SoapUI\bin\ext

//here is my code from the groovy script test step

    import testlink.api.java.client.TestLinkAPIResults.*;
    import testlink.api.java.client.TestLinkAPIClient.*;

     def DEVKEY="2f404203b306bd8dd811a7f824c194d0";
     def  URL="http://172.29.0.73/testlink/lib/api/xmlrpc/v1/xmlrpc.php";

    TestLinkAPIClient api = new TestLinkAPIClient(DEVKEY, URL);

运行此脚本时,发生以下无法解决的类错误

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: Script74.groovy: 7: unable to resolve class TestLinkAPIClient @ line 7, column 19. TestLinkAPIClient api = new TestLinkAPIClient(DEVKEY, URL); ^ org.codehaus.groovy.syntax.SyntaxException: unable to resolve class TestLinkAPIClient @ line 7, column 19. at org.codehaus.groovy.ast.ClassCodeVisitorSupport.addError(ClassCodeVisitorSupport.java:146) at ....... 

在此处输入图像描述

在我的例子中,是否可以使用groovy脚本从SoapUI连接到testlink?有谁能举例说明如何正确地做到这一点?

共有2个答案

靳金鹏
2023-03-14

您必须以如下方式导入库:

this.getClass().classLoader.addURL(new File(context.expand(project.resourceRoot) + "/libs/testlink.jar").toURL());

或者更好的是,将所有依赖项放在一个jar文件中,并使用该脚本行。您可以使用类的修饰名称:

testlink.api.java.client.TestLinkAPIClient api = new testlink.api.java.client.TestLinkAPIClient(DEVKEY, URL);

90%的时候这是对的。

由于Groovy和SoapUI不一致,您可能必须使用两个步骤:

  1. 动态导入库
  2. 使用TestLinkAPIClient。

加载类后,该错误将不再显示。

萧胜
2023-03-14

也许有人会有用。结果用两种方法解决了这个问题:

>

import com.eviware.soapui.model.testsuite.Assertable.AssertionStatus
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Map;

import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
def TranId= "TranId : " + testRunner.testCase.getPropertyValue( "TranId" )
def  Response= "Response: "+ testRunner.testCase.getPropertyValue( "Response" )
def  TL_extid = testRunner.testCase.getPropertyValue( "TL_extid" )
def add_info = TranId +" " + Response;

public class TestlinkAPIXMLRPCClient 
{   
    // Substitute your Dev Key Here
    public static final String DEV_KEY =  "fcd38512b5c3e44befbc8b862e678894";
    // Substitute your Server URL Here
    public static final String SERVER_URL = "http://172.29.0.78/testlink/lib/api/xmlrpc/v1/xmlrpc.php"; 

    /**
     * report test execution to TestLink API
     * 
     * @param int tcid
     * @param int tpid
     * @param String status
     */
    public static void testLinkReport(String tcid, int tpid,int bid,String plname, String status, String notes)
    {
        try 
        {
            XmlRpcClient rpcClient;
            XmlRpcClientConfigImpl config;

            config = new XmlRpcClientConfigImpl();
            config.setServerURL(new URL(SERVER_URL));
            rpcClient = new XmlRpcClient();
            rpcClient.setConfig(config);        

            ArrayList<Object> params = new ArrayList<Object>();
            Hashtable<String, Object> executionData = new Hashtable<String, Object>();              
            executionData.put("devKey", DEV_KEY);
            executionData.put("testcaseexternalid", tcid);
            executionData.put("testplanid", tpid);
            executionData.put("buildid", bid);
            executionData.put("platformname", plname);
            executionData.put("status", status);
            executionData.put("notes", notes);
            params.add(executionData);

            Object[] result = (Object[]) rpcClient.execute("tl.reportTCResult", params);

            // Typically you'd want to validate the result here and probably do something more useful with it
            System.out.println("Result was:\n");                
            for (int i=0; i< result.length; i++)
            {
                Map item = (Map)result[i];
                System.out.println("Keys: " + item.keySet().toString() + " values: " + item.values().toString());
            }
        }
        catch (MalformedURLException e)
        {
            e.printStackTrace();
        }
        catch (XmlRpcException e)
        {
            e.printStackTrace();
        }
    }
}
    //Send to testlink:
    //TestCaseID tcid, TestLpanID  tpid, BuildId bid, PlatformName plname,  status  ,notes

    TestlinkAPIXMLRPCClient.testLinkReport("$TL_extid", 7367,238 ,"FLORAWARE", "p",  
    "Result from  GROOVY SOAPUI $add_info");

我认为这是最优雅的方式。

在soapui测试项目中,我创建了一个新的rest服务,方法是在带有testlink服务器地址的资源路径中指定testlink api的路径。如下所示:TestLink rest服务

然后添加了以下REST请求,用于将参数传递到testlink:

<methodCall>
   <methodName>tl.reportTCResult</methodName>
   <params>
      <param>
         <value>
            <struct>
               <member>
                  <name>devKey</name>
                  <value>${#TestSuite#DEV_KEY}</value>
               </member>
               <member>
                  <name>status</name>
                  <value>${TL_Properties#TestResult}</value>
               </member>
               <member>
                  <name>buildid</name>
                  <value>
                     <i4>${TL_Properties#LatestBuildID}</i4>
                  </value>
               </member>
               <member>
                  <name>platformname</name>
                  <value>FLORAWARE</value>
               </member>
               <member>
                  <name>notes</name>
                  <value>TEST RUN FROM SOAPUI Transaction ID: ${TL_Properties#TranID} Response: ${TL_Properties#Response}</value>
               </member>
               <member>
                  <name>testplanid</name>
                  <value>
                     <i4>7367</i4>
                  </value>
               </member>
               <member>
                  <name>testcaseexternalid</name>
                  <value>${#TestCase#TL_extid}</value>
               </member>
                   <member>
                  <name>execduration</name>
                  <value>1</value>
               </member>
            </struct>
         </value>
      </param>
   </params>
</methodCall>
 类似资料:
  • 问题内容: 我刚开始学习groovy,我想将svnSourcePath和svnDestPath传递给svn copy命令中的shell脚本。但是网址未呈现。 输出量 问题答案: 在变量周围添加了单引号和加operator(’+ variable +’)。现在正在工作

  • 当我尝试在soapUI测试步骤中解析响应时,收到了以下异常。也尝试了getXMLHolder方法。还是没运气。 答复如下

  • 我是SoapUI的新手,遇到了一个我不明白的问题。目标:我想在不同的测试步骤中将结果从一个Groovy脚本传递到另一个Groovy脚本。 第1步:我有一个生成GUID的Groovy脚本: 步骤2:我有一个属性转移步骤,它接受上述脚本的结果,并将其传递到HTTP请求步骤(正在工作) 步骤3:我有第二个Groovy脚本,它运行curl命令,其中需要包含相同的GUID。 第3步是问题开始的地方。如何从第

  • 我有一个在生成SpringBoot jar文件后运行的gradle脚本: 到目前为止,gradle脚本只打印了一条消息: 这对我的身材很好。 gradle runScript 任务:运行脚本你好世界从groovy版本2.4.15 我想要的是: 我想做的是传入SpringBoot生成的jar名称,或者在或其他任何东西。 所以它会打印: hello world生成的jar文件名是my-service-

  • 问题内容: 我是docker世界的新手。我必须调用一个通过Docker容器获取命令行参数的shell脚本。例如:我的shell脚本如下所示: Dockerfile看起来像这样: 我不确定如何在运行容器时传递参数 问题答案: 使用相同 使用现有的Dockerfile构建映像: 使用参数或其他方式运行映像。

  • 问题内容: 我从Jenkins触发了一个shell脚本,该脚本获取日期并将其导出为环境(Linux)变量$ DATE。我需要在同一詹金斯工作中使用此$ DATE。我做了工作作为参数构建。创建一个字符串参数作为DATE值,如DATE = $ DATE。但这是行不通的。 请建议! 问题答案: 您提到要在外壳程序脚本中导出环境变量,该脚本可能是通过“执行外壳程序”步骤启动的。 问题是,一旦完成外壳程序步