Karate 为多个要素文件创建公共测试数据
我的要求如下:Karate 为多个要素文件创建公共测试数据,karate,Karate,我的要求如下: 我有两个.feature文件。我想创建所有这些功能文件都通用的测试数据。创建测试数据后,将从功能文件运行场景 在创建测试数据之后,我还需要一些信息。例如,我创建的数据的ID。因此,我可以使用此信息调用api,在我的场景中添加有效负载 我认为我们可以通过以下方式做到这一点: 1.创建JUnitJava文件。我用@BeforeClass定义了一个静态方法,并使用Karate的runner()运行我的create-test-data.feature文件(我可以使用Karate点击应用程
- def测试_数据= """ var JavaOutput=Java.type('com.mycompany.JavaFile'); var testData=JavaOutput.propertyName; “”“
@RunWith(Karate.class)
公共类帐户管理器{
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");
}
公共静态对象作业=null;
@课前
公共静态无效创建_作业(){
映射结果=Runner.runFeature(getClass(),“test data.feature”,null,true);
作业=结果。获取(“作业”);
}
}
现在以上所有的都可能是完全错误的。需要关于如何在空手道中解决这种情况的帮助
感谢您的提问,我知道您有一个通用的测试数据功能文件,您希望在所有测试之前运行该文件,并将该响应保存在可用于所有测试功能的变量中 您也可以通过使用 在您的
karate config.js
config[“testdata”]=karate.callSingle(“testdata.feature”)
您的
测试数据。功能
将在所有测试之前执行一次,并将响应存储在测试数据
中。您可以在功能中直接使用此变量。因此,我实现了以下设计:
我在TestRunner.java文件中创建了两个方法,一个使用BeforeClass,另一个使用AfterClass注释。在这些方法中,我能够调用特定的数据创建和清理功能文件,并将参数作为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);
}
}
@RunWith(空手道类)
@KarateOptions(标记={“~@ignore”})
公共类帐户管理器{
公共静态映射结果=null;
@课前
public static void create_job()引发IOException,ParseException{
clazz类=AccountRunner.Class;
URL文件_loc=clazz.getResource(“create-test-data-1.json”);
File File=新文件(File_loc.getFile());
JSONParser=新的JSONParser();
objectobj=parser.parse(新文件读取器(文件));
JSONObject JSONObject=(JSONObject)对象;
Map args=new HashMap();
参数put(“有效载荷”,jsonObject);
结果=Runner.runFeature(CommonFeatures.class,“创建数据.feature”,args,true);
}
@下课
公共静态无效删除_调查(){
Map args=new HashMap();
参数put(“有效载荷”,结果);
Runner.runFeature(CommonFeatures.class,“delete job.feature”,args,true);
}
}
为了使用“MVNTest”命令通过命令行运行这些测试,我在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>`
`
org.apache.maven.plugins
maven surefire插件
3.0.0-M3
**/*Runner.java
`
有了这个解决方案,我可以通过直接执行运行程序或通过命令行在IDE中运行测试。然而,我还没有找到一种方法来运行我所有的测试,方法是遵循空手道建议的方法,在测试套件级别有一个*Test.java文件,并且使用默认的maven配置和“mvn测试”。在执行运行程序文件之前调用.feature文件时,功能无法运行,运行程序文件具有为测试创建测试数据的方法
也许有人可以建议其他方法,我可以使用空手道方法运行*Test.java文件,而不是每个*Runner.java文件。好的,这只适用于一组特定的功能文件。我的要求是,我有一组功能,每个功能都有自己的测试数据,对于每一组功能,都有多个功能文件(由api组织)。我想,这种方法会使配置文件过长,对每个特定的“test data.feature”调用callSingle。我想知道一种方法,我们可以使用Java feature runner类来执行此操作,然后所有功能文件都使用它?此外,我需要在运行特定功能(包)下的所有功能文件后删除测试数据(使用单独的功能文件)。我认为这可以通过调用@AfterClass方法中的delete-data.feature并使用空手道跑步器来实现。关于如何克服在静态方法中调用Runner.runFeature()的问题,您可以继续使用上述方法,而不是在karate-config.js中硬编码功能文件路径,将其保存在json(
testdata.json
)中,其中key作为测试功能名称,value作为testdata功能名称。使用karate.info
在运行时获取当前功能名称,并使用该名称从testdata.json
中提取要运行的测试数据功能。如上所述,在变量中运行并返回。你不知道