使用DataProvider在特定流程中运行测试

时间:2019-05-08 03:12:27

标签: java testng testng-dataprovider

我有一个DataProvider,它会读取以下CSV文件

john|26|mba
claire|33|bbl
knight|29|mpa

现在我有3个classes,每个都有1个@Test

类名是

NameReader.java
ProcessStudent.java
ValidateDatabase.java

我的NameReader.java有一个@Test方法,该方法从上述数据提供程序获取输入。因此,在这种情况下,如果我仅执行NameReader.java,由于存在三行,它将运行3次

但是问题是我希望NameReader.Java接受数据提供者的第一行,然后运行ProcessStudent.java,然后运行ValidateDatabase.java。对于DataProvider中剩余的两行,也应该发生这种情况。

但是如果我将我的testng.xml指定为以下内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
  <test thread-count="1" name="Test" preserve-order="true">
    <classes>
      <class name="com.java.testng.NameReader"/>
      <class name="com.java.testng.ProcessStudent"/>
      <class name="com.java.testng.ValidateDatabase"/>
    </classes>
  </test>
</suite> 

它首先在@Test内部运行NameReader.java 3次,然后移至@Test内部的ProcessStudent.java,然后移至{{1 }}。

请记住,我不需要在@TestValidateDatabase.java中使用上述DataProvider

我怎样才能实现我所需要的?

1 个答案:

答案 0 :(得分:0)

从NameReader测试方法中调用ProcessStudent和ValidateDatabase测试方法。必须将ProcessStudent和ValidateDatabase测试方法声明为静态方法。

public class NameReader {

@Test(dataProvider = "getData")
public void testNameReader(String str1, String str2) {

    System.out.println("data set = "+str1+"  "+str2);
    System.out.println("NameReader ends");

    ProcessStudent.testClassB();
    ValidateDatabase.testClassC();
}

@DataProvider
public Object[][] getData(){
//data set here
 }