1

私は困惑しています。オンラインで多くのスレッドを読みましたが、探している解決策が見つからないようです。

私が望むのは、あるテストがデータを生成し、他のテストがデータを消費するように、テストをループで並行して実行することです。

渡された 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

ここで問題が...

テストは、テスト メソッドが実行_ExtractData()されるたびに for を実行します。_GenerateTestData()ただし、依存関係テストは、ループの最後の繰り返しでのみ実行されるようです。

次のようなテスト シーケンスを作成するにはどうすればよいですか。

Test_DependencyInjection_GenerateTestData -- "String1" を使用

Test_DependencyInjection_ExtractData -- 「String1」を使用

Test_DependencyInjection_GenerateTestData -- 「String2」を使用

Test_DependencyInjection_ExtractData -- 「String2」を使用

4

2 に答える 2

0

属性「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>
于 2017-12-27T09:40:23.817 に答える