java - 如何将 Karate 与 testrail 集成

标签 java cucumber karate testrail

我是 Java 新手,正在使用 Karate 进行 API 自动化。我需要帮助将 testrail 与 Karate 集成。我想为每个场景使用标签,这将是测试用例 ID(来自 testrail),并且我想将结果推送到“场景之后”。

有人可以指导我吗?代码片段将更受赞赏。谢谢你!

最佳答案

我为此付出了很多努力。 我就是这样实现的。也许你可以关注它。

首先,您应该从下面的链接下载 APIClient.javaAPIException.java 文件。

TestrailApi in github

然后您需要将这些文件添加到项目中的以下路径中。 例如:YourProjectFolder/src/main/java/testrails/

在 karate-config.js 文件中,每次测试后,您可以将案例标签、测试结果和错误消息发送到 BaseTest.java 文件,我将很快讨论该文件。

karate-config.js 文件


function fn() {

  var config = {
    baseUrl: 'http://111.111.1.111:11111',
  };
        
    
  karate.configure('afterScenario', () => {
    try{
         const BaseTestClass = Java.type('features.BaseTest');
         BaseTestClass.sendScenarioResults(karate.scenario.failed, 
         karate.scenario.tags, karate.info.errorMessage);
        }catch(error) {
       console.log(error)
       }
    });
      
   return config;
}

请不要忘记在功能文件中为场景添加标签。 例如@1111


Feature: ExampleFeature

  Background:
    * def conf = call read('../karate-config.js')
    * url conf.baseUrl

  @1111
  Scenario: Example

接下来,创建一个名为 BaseTests.java 的运行程序文件

BaseTest.java 文件


package features;

import com.intuit.karate.junit5.Karate;
import net.minidev.json.JSONObject;
import org.junit.jupiter.api.BeforeAll;
import testrails.APIClient;
import testrails.APIException;

import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

public class BaseTest {

    private static APIClient client = null;
    private static String runID = null;

    @BeforeAll
    public static void beforeClass() throws Exception {
        String fileName = System.getProperty("karate.options");
        //Login to API
        client = new APIClient("Write Your host, for example 
        https://yourcompanyname.testrail.io/");
        client.setUser("user.name@companyname.com");
        client.setPassword("password");

        //Create Test Run
        Map data = new HashMap();
        data.put("suite_id", "Write Your Project SuitId(Only number)");
        data.put("name", "Api Test Run");
        data.put("description", "Karate Architect Regression Running");


        JSONObject c = (JSONObject) client.sendPost("add_run/" + 
        TESTRAİL_PROJECT_ID, data);
        runID = c.getAsString("id");
    }
       //Send Scenario Result to Testrail
    public static void sendScenarioResults(boolean failed, List<String> tags, String errorMessage) {
        try {
            Map data = new HashMap();
            data.put("status_id", failed ? 5 : 1);
            data.put("comment", errorMessage);
            client.sendPost("add_result_for_case/" + runID + "/" + tags.get(0), 
            data);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (APIException e) {
            e.printStackTrace();
        }
    }

    @Karate.Test
    Karate ExampleFeatureRun() {
        return Karate.run("ExampleFeatureRun").relativeTo(getClass());
    }

}

关于java - 如何将 Karate 与 testrail 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48785037/

相关文章:

java - 我的 bean 中出现 IllegalArgumentException

java - 如何将颜色资源作为参数传递 (Android)

java - 何时使用 Android 的 ArrayMap 而不是 HashMap?

conditional - 是否可以在条件语句中使用 Karate 'match'?

java - 如何为 Karate 框架指定 SNI header

karate - 如何使用 Karate 框架动态创建在 URL 之间具有路径的 URL

java - 将 map 添加到列表中。 map 是在循环列表时创建的

testing - TestCafe 适合 BDD 和 cucumber 吗?

ruby - 如何使用 Cucumber Ruby Automation 打印浏览器控制台日志?

ruby - cucumber 。跳过所有场景,如果一个失败