передача результата теста в testlink из soapui с помощью скрипта groovy

Я хочу использовать SoapUI 5.0 для подключения с помощью скрипта groovy к серверу testlink, а затем передать результат теста на тестовую ссылку.

Прежде чем я попытался это сделать, я установил библиотеку TestLink Java API, загруженную с GitHub (https://github.com/kinow/testlink-java-api) в виде файла 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? И может ли кто-нибудь привести пример, как это сделать правильно?


person victor    schedule 05.02.2019    source источник
comment
Вы хотите обновить каждый тестовый пример, чтобы вызвать TestLink и обновить? или обновить все результаты теста в конце выполнения теста?   -  person Rao    schedule 07.02.2019
comment
Я хочу добавить в каждый тест-кейс шаг теста groovy script, результаты которого нужно передать в testlink. Но сначала мне нужно разобраться с подключением к тестлинку от soapui   -  person victor    schedule 07.02.2019


Ответы (2)


может кому будет полезно. Получилось решить эту проблему двумя способами:

  1. Проанализировав примеры в руководстве по тестовой ссылке, я добавил следующий код в тестовый шаг скрипта Groovy:

    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");
    
  2. Я думаю, самый элегантный способ.

в тестовом проекте soapui я создал новый сервис отдыха, указав путь к API testlink в пути к ресурсу с адресом сервера testlink. Вот так: остальная служба TestLink

а затем добавил следующий запрос REST для передачи параметров в тестовую ссылку:

<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>
person victor    schedule 20.06.2019

Вы должны динамически импортировать библиотеку следующим образом:

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.

После загрузки классов эта ошибка больше не будет отображаться.

person user311174    schedule 19.06.2019