我第一次使用testNG并且有一个问题。我试图从json文件加载一些数据,并将数据与dataProviders结合使用来编写一些测试。我有一个辅助文件,它有一个parseData方法,它从json文件中获取数据,并构建我需要测试的所有数据的映射。在我的主测试文件中,我按如下方式定义了一个测试:
在我的主测试文件中,我还有一个BeforeClass方法,它加载调用tDataHelper类中的parseData方法。
每次运行测试时,都会跳过它,因为每当我尝试调试createStudents数据提供程序时,tDataHelper文件都有空映射。我认为这与静态vs实例有关,我不确定究竟是什么问题。以下代码是否正常,它应该工作?任何人都可以对此有所了解吗?
public class testStudents
{
private static tDataHelper helper = new tDataHelper();
@BeforeClass
public void setup() throws Exception
{
tDataHelper.parseData();
}
@FunctionalTest
@Test(dataProvider = "createStudents", dataProviderClass = tDataHelper.class)
public void testCreateStudents(List<Student> studentsToCreate){}
}
public class tDataHelper
{
private static List<Student> studentsToCreate = new HashSet<>();
static void parseData() throws Exception
{
// read in json file and add students to the students list
// studentsToCreate.add(node.parse(....))
}
@DataProvider
public static Object[][] createStudents()
{
return new Object[][]{
{
studentsToCreate
}
}
}
答案 0 :(得分:0)
您的数据提供程序类可能存在配置问题。
你想迭代所有学生的循环吗?对!那么你的测试方法应该如下所示。
@Test(dataProvider = "createStudents", dataProviderClass = tDataHelper.class)
public void testCreateStudents(Student studentsToCreate){}
我用String类替换了Student类更新了示例,下面是工作示例。 请用下面的代码进行交叉检查。
public class tDataHelper {
private static List<String> studentsToCreate = new ArrayList<String>();
static void parseData() throws Exception {
studentsToCreate.add("user1");
studentsToCreate.add("user2");
studentsToCreate.add("user3");
}
@DataProvider
public static Object[][] createStudents() {
Object[][] objArray = new Object[studentsToCreate.size()][];
for (int i = 0; i < studentsToCreate.size(); i++) {
objArray[i] = new Object[1];
objArray[i][0] = studentsToCreate.get(i);
}
return objArray;
}
}
public class testStudents {
private static tDataHelper helper = new tDataHelper();
@BeforeClass
public void setup() throws Exception {
tDataHelper.parseData();
}
@Test(dataProvider = "createStudents", dataProviderClass = tDataHelper.class)
public void testCreateStudents(String studentsToCreate) {
System.out.println(studentsToCreate);
}
}
我正在使用qaf作为Json Data Provider,因此您不需要手动解析json数据并摆脱数据提供程序类。
答案 1 :(得分:0)
数据提供程序应该是独立的,不能从外部初始化。检查the documentation。
你有选择:
使用数据提供程序的设计方式:
public class testStudents {
@FunctionalTest
@Test(dataProvider = "createStudents", dataProviderClass = tDataHelper.class)
public void testCreateStudents(List<Student> studentsToCreate){}
}
public class tDataHelper {
private static List<Student> parseData() throws Exception {
// read in json file and add students to the students list
// studentsToCreate.add(node.parse(....))
}
@DataProvider
public static Object[][] createStudents() {
return new Object[][]{
{
parseData();
}
};
}
}
使用您的类a utils并在测试中使用它:
public class testStudents {
private static List<Student> studentsToCreate;
@BeforeClass
public void setup() throws Exception {
studentsToCreate = tDataHelper.parseData();
}
@FunctionalTest
@Test
public void testCreateStudents() {}
}
public class tDataHelper {
public static List<Student> parseData() throws Exception {
// read in json file and add students to the students list
// studentsToCreate.add(node.parse(....))
}
}