有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在使用数据提供程序时使用Testng优先级

我将数据提供程序与test ng一起使用,我希望特定的测试对数据收集对象中的每个元素都遵循一系列步骤

测试:

For each element in the object, validate the form can input the values

因此,该过程具有以下特点:

  1. 打开网页(从数据中)
  2. 检查页面上是否存在元素
  3. 输入值

但是,对于对象中的每个元素,我尝试使用下面的方法,它运行步骤1,然后在步骤2之后移动,而不是按照流程。因此,我要问的是,是否有可能使用test ng进行“测试步骤”方法

如果Data中有2个值,它将执行Open两次,然后继续执行CheckElementExists

@Test (priority = 1, dataProvider = "Data")
public void Open(Data data) throws InterruptedException
{ 
    System.out.println("Step 1");
    this.module.open(data);
}

@Test (priority = 2, dataProvider = "Data")
public void CheckElementExists(Data data)
{
   System.out.println("TWO");
}

共 (2) 个答案

  1. # 1 楼答案

    根据你的测试,它运行良好,因为测试就是这样设计的。根据您的场景,每个步骤都是一个步骤,您也可以设置优先级。所以它首先对所有数据执行,然后对所有数据执行第二步。看起来像是BDD风格。您可以尝试使用cucumber、jbehave等任何BDD框架

    如果要使用testng对每个数据重复所有步骤。然后将所有步骤组合在一个测试中,然后使用下面给出的数据提供程序对数据进行迭代

    @Test (priority = 1, dataProvider = "Data")
    public void OpenAndCheck(Data data) throws InterruptedException
    { 
        System.out.println("Step 1");
        this.module.open(data);
        System.out.println("TWO");
    }
    
  2. # 2 楼答案

    在这种情况下,可以使用Factory类

    public class TestCase {
        Data data;
    
        @Factory(dataProvider = "Data")
        public TestCase(Data data){
            this.data=data;
        }
    
        @Test(priority = 1)
        public void Open() throws InterruptedException {
            System.out.println("Step 1");
            this.module.open(data);
        }
    
        @Test(priority = 2)
        public void CheckElementExists(Data data) {
            System.out.println("TWO");
        }
    }
    

    您需要在testng套件xml文件中提到group-by-instance = true,并使用xml套件运行

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="Test Suite New"  group-by-instances="true" configfailurepolicy="continue" preserve-order="true">
       <test name="Test Case">
          <classes>
    
             <class name="com.package.TestCase"></class>
    
          </classes>
       </test>
    </suite>