【问题标题】:dependsOnMethods and @Factory依赖方法和@Factory
【发布时间】:2023-03-12 11:18:02
【问题描述】:

我被难住了。我已经阅读了许多在线主题,似乎无法找到我正在寻找的解决方案。

我想要的是在一个循环中并行运行测试,这样一个测试生成数据,另一个测试使用数据。

我发现传入的 ITestContext 对于在测试之间存储测试数据很有用。但是,当使用 dependsOnMethod 时,所有数据生成测试都会在第一个依赖方法运行之前运行。

有没有办法指定@Factory 和@DataProvider 的组合来实现我想要的?

public class DependencyTest1 {
    private String value;

    @DataProvider()
    public static Object[][] DependencyTestProvider() {
        return new Object[][] {
                // Data passed into tests
                { "String1" },
                { "String2" },
        };
    }

    @Factory(dataProvider = "DependencyTestProvider")
    public DependencyTest1(String value) {

        System.out.println("DataDependencyTest1 Constructor");
        System.out.println("String: " + value);

        this.value = value;

    }

    //*****************************************************************************
    //*****************************************************************************
    @Test(description = "Test Dependency Injection: Generate Test Data", groups = "unit")
    public void Test_DependencyInjection_GenerateTestData(ITestContext context, Method method) throws Exception {

        System.out.println("Test Name: " + method.getName());
        System.out.println("Create Test Data");
        System.out.println("String: " + value);
        System.out.println("Add data to current test context");

        context.setAttribute("value", value);
    }

    //*****************************************************************************
    //*****************************************************************************
    @Test(description = "Test Dependency Injection: Extract Test Data",groups = "unit", dependsOnMethods = "Test_DependencyInjection_GenerateTestData")
    public void Test_DependencyInjection_ExtractData(ITestContext context, Method method) {

        System.out.println("Test Name: " + method.getName());
        System.out.println("Extract data from test context");

        String value = (String) context.getAttribute("value");

        System.out.println("String: " + value);

    }
} 

测试输出:

DataDependencyTest1 构造函数

字符串:默认测试名称

DataDependencyTest1 构造函数

字符串:字符串 1

DataDependencyTest1 构造函数

字符串:字符串2

测试名称:Test_DependencyInjection_GenerateTestData

创建创建测试数据

字符串:字符串 1

将数据添加到当前测试上下文

测试名称:Test_DependencyInjection_GenerateTestData

创建创建测试数据

字符串:字符串2

将数据添加到当前测试上下文

测试名称:Test_DependencyInjection_ExtractData

从测试上下文中提取数据

字符串:字符串2

测试名称:Test_DependencyInjection_ExtractData

从测试上下文中提取数据

字符串:字符串2

现在问题来了……

每次运行_GenerateTestData() 测试方法时,测试都会运行_ExtractData()。然而,依赖测试似乎只在循环的最后一次迭代中运行。

我如何制作这样的测试序列:

Test_DependencyInjection_GenerateTestData -- 使用“String1”

Test_DependencyInjection_ExtractData -- 使用“String1”

Test_DependencyInjection_GenerateTestData -- 使用“String2”

Test_DependencyInjection_ExtractData -- 使用“String2”

【问题讨论】:

    标签: java testng factory testng-dataprovider


    【解决方案1】:

    将您的测试添加到不同的组中,并将 group-by-instances 设置为 true。这应该可以解决问题。

    【讨论】:

      【解决方案2】:

      将属性“group-by-instances”添加为testNG xml的“true”并运行它,现在你的每个类的测试应该先执行执行另一个类实例

      <suite name="Suite">
        <test name="Test" group-by-instances="true">
          <classes>
            <class name="Your.test.class.DependencyTest1"/>
          </classes>
        </test> 
      </suite>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-27
        相关资源
        最近更新 更多