我是 Java 新手,正在使用 Karate 进行 API 自动化。我需要帮助将 testrail 与 Karate 集成。我想为每个场景使用标签,这将是测试用例 ID(来自 testrail),并且我想将结果推送到“场景之后”。
有人可以指导我吗?代码片段将更受赞赏。谢谢你!
最佳答案
我为此付出了很多努力。 我就是这样实现的。也许你可以关注它。
首先,您应该从下面的链接下载 APIClient.java
和 APIException.java
文件。
然后您需要将这些文件添加到项目中的以下路径中。
例如: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/