2013-07-01 31 views
1

我很难过。我已经通过在线阅读了许多线索,似乎无法找到我正在寻找的解决方案。dependsOnMethods和@Factory

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

我发现传入的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构造

字符串:String2的

测试名称:Test_DependencyInjection_GenerateTestData

创建创建测试数据

字符串:字符串1

将数据添加到当前的测试情境

测试名称: Test_DependencyInjection_GenerateTestData

创建创建测试数据

字符串:从测试情境Test_DependencyInjection_ExtractData

提取数据

字符串:String2的

将数据添加到当前的测试情境

测试名称String2的

测试名称:Test_ DependencyInjection_ExtractData从测试情境

提取数据

字符串:String2的

现在,这里的问题是...

测试运行_ExtractData()每次运行_GenerateTestData()测试方法的时间。但是,依赖性测试似乎只在循环的最后一次迭代中运行。

如何让我的测试顺序是这样的:

Test_DependencyInjection_GenerateTestData - 使用 “的String1”

Test_DependencyInjection_ExtractData - 使用 “的String1”

Test_DependencyInjection_GenerateTestData - 使用 “字符串2”

Test_DependencyInjection_ExtractData - using“String2”

回答

0

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

0

添加属性“组按实例”为TestNG的XML的“真正”并运行它,现在你的每个类的测试,应先执行其他类的实例

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