我的要求如下:
我有几个.feature文件。我想创建所有这些功能文件都通用的测试数据。创建测试数据后,将从功能文件中运行场景。
在创建测试数据后,我还希望获得一些信息。例如,我创建的数据的ID。因此,我可以使用此信息来调用api,在我的方案中添加有效载荷。
我认为我们可以通过以下方法做到这一点: 1.创建一个junit java文件。我在其中使用@BeforeClass定义了一个静态方法,然后使用Karate的Runner()运行我的create-test-data.feature文件(我可以使用Karate击中应用程序api来创建一些数据)。我在类型为Object的java类中定义一个属性,并将其设置为Runner.runFeature()的结果。
然后,我创建一个单独的功能文件test-data-details.feature。我在这里定义我的Java Interop代码。例如
现在,我的test-data-details.feature文件中有我的测试数据对象。我将其中包含测试方案的功能文件的“背景”部分称为此.feature文件(callonce)。因此,我可以重试ID,名称等测试数据详细信息。等,然后可以在api请求路径和有效负载中使用。
我不确定以上设计是否是正确的方法。我尝试过,但是在我的Java文件中遇到了一些问题,其中下面的getClass()抱怨它不能在静态方法中使用。
@RunWith(Karate.class)
公共类AccountRunner {
public static Object job = null;
@BeforeClass
public static void create_job(){
Map<String, Object> result = Runner.runFeature(getClass(), "test-data.feature", null, true);
job = result.get("job");
}
}
现在,以上所有内容可能都是完全错误的。在空手道中如何解决这种情况需要帮助。
谢谢
答案 0 :(得分:1)
根据您的问题,我知道您有一个通用的测试数据功能文件,您希望在所有测试功能之前运行该文件,并将该响应保存在一个可用于所有测试功能的变量中。
您也可以在karate-config.js中使用karate.callSingle()
在您的karate-config.js
config["testdata"] = karate.callSingle("test-data.feature")
您的test-data.feature
将在所有测试之前执行一次,并将响应存储在testdata
中,您可以在功能中直接使用此变量。
答案 1 :(得分:0)
所以我实现了以下设计:
我已经在TestRunner.java文件中创建了两个方法,一个带有BeforeClass,另一个带有AfterClass注释。在这些方法中,我可以调用特定的数据创建和清理功能文件,并将args作为Json对象传递。
@RunWith(Karate.class)
@KarateOptions(tags = {"~@ignore"})
public class AccountRunner {
public static Map<String, Object> result = null;
@BeforeClass
public static void create_job() throws IOException, ParseException {
Class clazz = AccountRunner.class;
URL file_loc = clazz.getResource("create-test-data-1.json");
File file = new File(file_loc.getFile());
JSONParser parser = new JSONParser();
Object obj = parser.parse(new FileReader(file));
JSONObject jsonObject = (JSONObject) obj;
Map<String, Object> args = new HashMap();
args.put("payload", jsonObject);
result = Runner.runFeature(CommonFeatures.class, "create-data.feature", args, true);
}
@AfterClass
public static void delete_investigation() {
Map<String, Object> args = new HashMap();
args.put("payload", result);
Runner.runFeature(CommonFeatures.class, "delete-job.feature", args, true);
}
}
要使用“ mvn test”命令通过命令行运行这些测试,我已经对pom.xml进行了以下更改。
`<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
<includes>
<include>**/*Runner.java</include>
</includes>
</configuration>
</plugin>`
使用此解决方案,我可以通过直接执行运行程序或通过命令行来在IDE中运行测试。但是,我没有遵循空手道建议的方法来找到运行所有测试的方法,在该方法中,我在测试套件级别具有* Test.java文件,并且将默认的maven配置与“ mvn test”一起使用。该功能无法运行,因为在执行Runner文件之前调用了.feature文件,该文件具有创建测试数据的方法。
也许有人可以提出其他建议,我可以使用空手道方法来运行* Test.java文件而不是每个* Runner.java文件。