Testng: Factoryを䜿甚しおいるずきにDataProviderが䞊列でテストを実行しおいない

䜜成日 2018幎11月13日  Â·  15コメント  Â·  ゜ヌス: cbeust/testng

TestNGバヌゞョン

7.0.0-beta1

予想される行動

ここに衚瀺されおいるように、ブラりザヌ名、バヌゞョン、プラットフォヌムを含む5぀のデヌタセットを持぀DataProviderを含むクラスがありたす。

public class DataProviderManager {
    @DataProvider(parallel = true)
    public static Object[][] defaultWebDataProvider() {
        return new Object[][] {
                new Object[]{"chrome", "70", "Windows 10"},
                new Object[]{"internet explorer", "11", "Windows 10"},
                new Object[]{"safari", "12.0", "Mac 10.13"},
                new Object[]{"chrome", "70", "Mac 10.13"},
                new Object[]{"firefox", "63", "Mac 10.13"}
        };
    }
}

私のテストクラスでは、Factoryを䜿甚しおデヌタを次のように枡したす。

public class MSGWebExampleTest extends BaseTest {
    // Declare page objects
    private MSGHome msgHome;
    // Declare test data

    @Factory(dataProvider = StaticProps.DEFAULT_WEB_DATA_PROVIDER, dataProviderClass = DataProviderManager.class)
    public MSGWebExampleTest(String browser, String browserVersion, String platform) {
        super.setRunParams(browser, browserVersion, platform);
    }

    @BeforeMethod(alwaysRun = true)
    public void setupTest() {
        msgHome = new MSGHome();
    }

    @Features({GroupProps.WEB})
    @Test(groups = {GroupProps.DEBUG})
    @Parameters({ParamProps.WEB, ParamProps.MOBILE_WEB})
    public void openSiteTest() {
        new WebInteract(null,null).pause(1000).openUrl(URLBuilder.buildUrl());
    }
}

tests.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Test Engineering Core Suite" parallel="methods" thread-count="2" data-provider-thread-count="4">

thread-count = 2およびdata-provider-thread-count = 4およびparallel = trueを蚭定した堎合、テストは8回䞊行しお実行されるはずです。

実際の動䜜

parallel = trueが無芖されるかのように蚭定しようずするスレッドの数に関係なく、テストは順番に実行されたす。 コマンドラむンから-Dthreadcount = 2 -Ddataproviderthreacount = 4を枡し、surefireプラグむンのconfigタグにこれらの倀を蚭定するこずで、䞊蚘のtesting.xmlを䜿甚しおこれを䞊行しお実行しようず䜕床も詊みたしたが、䜕も機胜しおいたせん。

問題はランナヌで再珟可胜ですか

  • [x]シェル
  • [x] Maven
  • [] Gradle
  • [ ] 蟻
  • [] Eclipse
  • [x] IntelliJ
  • [] NetBeans

テストケヌスサンプル

問題を瀺しおいるテストケヌスできるだけ小さいを共有しおください

党おのコメント15件

@ VinceBarresi -TestNGがテストを順番に実行しおいるずあなたがどのように蚀っおいるのかよくわかりたせん。

スレッドIDを出力するようにテストクラスを倉曎したした。次のようになりたす。

import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory;
import org.testng.annotations.Test;

public class MSGWebExampleTest {

  private String browser, browserVersion, platform;

  @Factory(dataProvider = "dp")
  public MSGWebExampleTest(String browser, String browserVersion, String platform) {
    this.browser = browser;
    this.browserVersion = browserVersion;
    this.platform = platform;
  }

  <strong i="8">@Test</strong>
  public void openSiteTest() {
    System.err.println("Running " + this + " on thread [" + Thread.currentThread().getId() + "]");
  }

  <strong i="9">@Override</strong>
  public String toString() {
    return String.format("[%s, %s, %s]", browser, browserVersion, platform);
  }

  @DataProvider(parallel = true, name = "dp")
  public static Object[][] defaultWebDataProvider() {
    return new Object[][]{
        new Object[]{"chrome", "70", "Windows 10"},
        new Object[]{"internet explorer", "11", "Windows 10"},
        new Object[]{"safari", "12.0", "Mac 10.13"},
        new Object[]{"chrome", "70", "Mac 10.13"},
        new Object[]{"firefox", "63", "Mac 10.13"}
    };
  }
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Test Engineering Core Suite"
  parallel="methods"
  data-provider-thread-count="4"
  thread-count="2"
  verbose="2">
  <test name="Test Engineering Core_test">
    <classes>
      <class name="com.rationaleemotions.github.issue1951.MSGWebExampleTest"/>
    </classes>
  </test>
</suite>

出力

...
... TestNG 7.0.0-beta1 by Cédric Beust ([email protected])
...
Running [chrome, 70, Mac 10.13] on thread [11]
Running [chrome, 70, Windows 10] on thread [12]
Running [internet explorer, 11, Windows 10] on thread [12]
Running [firefox, 63, Mac 10.13] on thread [11]
Running [safari, 12.0, Mac 10.13] on thread [12]
PASSED: openSiteTest on [chrome, 70, Mac 10.13]
PASSED: openSiteTest on [chrome, 70, Windows 10]
PASSED: openSiteTest on [internet explorer, 11, Windows 10]
PASSED: openSiteTest on [firefox, 63, Mac 10.13]
PASSED: openSiteTest on [safari, 12.0, Mac 10.13]

===============================================
    Test Engineering Core_test
    Tests run: 5, Failures: 0, Skips: 0
===============================================

===============================================
Test Engineering Core Suite
Total tests run: 5, Passes: 5, Failures: 0, Skips: 0
===============================================

䞊蚘の出力からわかるように、スレッドIDは異なりたすスレッド数が2であるため、具䜓的には2぀のスレッド

あなたのサンプル䞭のデヌタプロバむダは、ファクトリメ゜ッドぞずNOTに瞛られる@Test方法。 したがっお、実行されるスレッドの数に圱響を䞎えるこずはありたせん。

以䞋が発生した堎合のみ-

  • デヌタプロバむダヌは@Testメ゜ッドず結合されおいたす
  • パラレル属性@DataProviderに蚭定されおいるtrue
  • <suite> たたは <test>タグで属性parallelがmethodsに蚭定されおいる
  • data-provider-thread-count倀が1より倧きい倀に蚭定されおいる

䞊列凊理はTestNGによっお有効になり、デヌタプロバむダヌによっお提䟛される@Testメ゜ッドの数は、属性data-provider-thread-count.介しお蚭定されたスレッドの数ず等しくなりたす。

泚スむヌトxmlファむルのthread-count属性は、通垞のメ゜ッドにのみ適甚可胜であり、スむヌトxmlファむルのdata-provider-thread-count属性は、デヌタプロバむダヌを利甚したテストメ゜ッドにのみ適甚可胜です。

その説明が理にかなっおいるかどうか、そしおこの問題を解決できるかどうかを教えおください。

@krmahadevan詳现な回答ありがずうございたす。 機䌚があれば、これを詊しおみたいず思いたす。 いく぀か質問がありたすが、

1デヌタプロバむダヌこの堎合は「dp」は、data-provider-thread-countおよびparallel = trueによる䞊列凊理を実珟するために、デヌタプロバむダヌを枡す@Testず同じクラスである必芁がありたすか 

2スむヌトレベルでテストを実行したしたか もしそうなら、これは䞊列凊理の芳点からも重芁ですか たずえば、mvn test -Dgroups = DEBUGを䜿甚しおsurefireを介しおグルヌプDEBUGのテストを開始した堎合、このコマンドのパラメヌタヌを介しおデヌタプロバむダヌのスレッド数を枡す必芁がありたすか

1デヌタプロバむダヌこの堎合は「dp」は、data-provider-thread-countによる䞊列凊理を実珟するために、デヌタプロバむダヌを枡す@Testず同じクラスである必芁がありたすかそしお䞊列=真

必芁はありたせん。 デヌタプロバむダヌがどこにあるかは関係ありたせん。

2スむヌトレベルでテストを実行したしたか もしそうなら、これは䞊列凊理の芳点からも重芁ですか たずえば、mvn test -Dgroups = DEBUGを䜿甚しおsurefireを介しおグルヌプDEBUGのテストを開始した堎合、このコマンドのパラメヌタヌを介しおデヌタプロバむダヌのスレッド数を枡す必芁がありたすか

はい、スむヌトレベルでテストを実行したした。 それは問題ではないはずです。 NS
デヌタプロバむダヌのスレッド数がスむヌトファむルで利甚可胜になっおいる限り
提䟛されおいない堎合のデフォルト倀は10だず思いたす、動䜜するはずです
シヌムレスに。

@krmahadevanそれで、私はあなたの提案された倉曎を䜿甚しお今朝テストし、いく぀かの芳察をする機䌚がありたした。

  1. DataProviderをテストクラスに保持し、DataProvider名をテストアノテヌションに枡すず、テストは䞊行しお実行しようずしおいるように芋えたすが、次の゚ラヌが衚瀺されたす。
...
... TestNG 7.0.0-beta1 by Cédric Beust ([email protected])
...

org.testng.internal.reflect.MethodMatcherException: 
Data provider mismatch
Method: openSiteTest([])
Arguments: [(java.lang.String) chrome,(java.lang.String) 70,(java.lang.String) Windows 10]

    at org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments(DataProviderMethodMatcher.java:40)
    at org.testng.internal.Parameters.injectParameters(Parameters.java:936)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1057)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:140)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:122)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)


org.testng.internal.reflect.MethodMatcherException: 
Data provider mismatch
Method: openSiteTest([])
Arguments: [(java.lang.String) chrome,(java.lang.String) 70,(java.lang.String) Windows 10]

    at org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments(DataProviderMethodMatcher.java:40)
    at org.testng.internal.Parameters.injectParameters(Parameters.java:936)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1057)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:140)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:122)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)


org.testng.internal.reflect.MethodMatcherException: 
Data provider mismatch
Method: openSiteTest([])
Arguments: [(java.lang.String) chrome,(java.lang.String) 70,(java.lang.String) Windows 10]

    at org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments(DataProviderMethodMatcher.java:40)
    at org.testng.internal.Parameters.injectParameters(Parameters.java:936)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1057)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:140)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:122)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)


org.testng.internal.reflect.MethodMatcherException: 
Data provider mismatch
Method: openSiteTest([])
Arguments: [(java.lang.String) chrome,(java.lang.String) 70,(java.lang.String) Windows 10]

    at org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments(DataProviderMethodMatcher.java:40)
    at org.testng.internal.Parameters.injectParameters(Parameters.java:936)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1057)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:140)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:122)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)


org.testng.internal.reflect.MethodMatcherException: 
Data provider mismatch
Method: openSiteTest([])
Arguments: [(java.lang.String) chrome,(java.lang.String) 70,(java.lang.String) Windows 10]

    at org.testng.internal.reflect.DataProviderMethodMatcher.getConformingArguments(DataProviderMethodMatcher.java:40)
    at org.testng.internal.Parameters.injectParameters(Parameters.java:936)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1057)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:140)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:122)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)


Test ignored.

===============================================
Test Engineering Core Suite
Total tests run: 5, Passes: 0, Failures: 5, Skips: 0
===============================================


Process finished with exit code 0

  1. DataProviderをDataProviderManager.javaクラスに戻し、DataProviderをテストアノテヌションに枡しお実行しようずするず、再び䞊行しお実行しようずしおいるように芋えたすが、次のように衚瀺されたす。これは別の゚ラヌです。
...
... TestNG 7.0.0-beta1 by Cédric Beust ([email protected])
...
[Utils] [ERROR] [Error] org.testng.TestNGException: 
Method public void com.msg.test.coretest.uitests.msgdotcom.MSGWebExampleTest.openSiteTest() requires a <strong i="7">@DataProvider</strong> named : defaultWebDataProvider
    at org.testng.internal.Parameters.findDataProvider(Parameters.java:614)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:808)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:775)
    at org.testng.internal.ParameterHandler.handleParameters(ParameterHandler.java:60)
    at org.testng.internal.ParameterHandler.createParameters(ParameterHandler.java:39)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1024)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:140)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:122)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

[Utils] [ERROR] [Error] org.testng.TestNGException: 
Method public void com.msg.test.coretest.uitests.msgdotcom.MSGWebExampleTest.openSiteTest() requires a <strong i="8">@DataProvider</strong> named : defaultWebDataProvider
    at org.testng.internal.Parameters.findDataProvider(Parameters.java:614)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:808)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:775)
    at org.testng.internal.ParameterHandler.handleParameters(ParameterHandler.java:60)
    at org.testng.internal.ParameterHandler.createParameters(ParameterHandler.java:39)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1024)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:140)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:122)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

[Utils] [ERROR] [Error] org.testng.TestNGException: 
Method public void com.msg.test.coretest.uitests.msgdotcom.MSGWebExampleTest.openSiteTest() requires a <strong i="9">@DataProvider</strong> named : defaultWebDataProvider
    at org.testng.internal.Parameters.findDataProvider(Parameters.java:614)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:808)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:775)
    at org.testng.internal.ParameterHandler.handleParameters(ParameterHandler.java:60)
    at org.testng.internal.ParameterHandler.createParameters(ParameterHandler.java:39)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1024)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:140)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:122)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

[Utils] [ERROR] [Error] org.testng.TestNGException: 
Method public void com.msg.test.coretest.uitests.msgdotcom.MSGWebExampleTest.openSiteTest() requires a <strong i="10">@DataProvider</strong> named : defaultWebDataProvider
    at org.testng.internal.Parameters.findDataProvider(Parameters.java:614)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:808)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:775)
    at org.testng.internal.ParameterHandler.handleParameters(ParameterHandler.java:60)
    at org.testng.internal.ParameterHandler.createParameters(ParameterHandler.java:39)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1024)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:140)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:122)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

[Utils] [ERROR] [Error] org.testng.TestNGException: 
Method public void com.msg.test.coretest.uitests.msgdotcom.MSGWebExampleTest.openSiteTest() requires a <strong i="11">@DataProvider</strong> named : defaultWebDataProvider
    at org.testng.internal.Parameters.findDataProvider(Parameters.java:614)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:808)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:775)
    at org.testng.internal.ParameterHandler.handleParameters(ParameterHandler.java:60)
    at org.testng.internal.ParameterHandler.createParameters(ParameterHandler.java:39)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1024)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:140)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:122)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)


org.testng.TestNGException: 
Method public void com.msg.test.coretest.uitests.msgdotcom.MSGWebExampleTest.openSiteTest() requires a <strong i="12">@DataProvider</strong> named : defaultWebDataProvider

    at org.testng.internal.Parameters.findDataProvider(Parameters.java:614)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:808)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:775)
    at org.testng.internal.ParameterHandler.handleParameters(ParameterHandler.java:60)
    at org.testng.internal.ParameterHandler.createParameters(ParameterHandler.java:39)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1024)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:140)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:122)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)


org.testng.TestNGException: 
Method public void com.msg.test.coretest.uitests.msgdotcom.MSGWebExampleTest.openSiteTest() requires a <strong i="13">@DataProvider</strong> named : defaultWebDataProvider

    at org.testng.internal.Parameters.findDataProvider(Parameters.java:614)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:808)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:775)
    at org.testng.internal.ParameterHandler.handleParameters(ParameterHandler.java:60)
    at org.testng.internal.ParameterHandler.createParameters(ParameterHandler.java:39)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1024)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:140)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:122)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)


org.testng.TestNGException: 
Method public void com.msg.test.coretest.uitests.msgdotcom.MSGWebExampleTest.openSiteTest() requires a <strong i="14">@DataProvider</strong> named : defaultWebDataProvider

    at org.testng.internal.Parameters.findDataProvider(Parameters.java:614)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:808)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:775)
    at org.testng.internal.ParameterHandler.handleParameters(ParameterHandler.java:60)
    at org.testng.internal.ParameterHandler.createParameters(ParameterHandler.java:39)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1024)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:140)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:122)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)


org.testng.TestNGException: 
Method public void com.msg.test.coretest.uitests.msgdotcom.MSGWebExampleTest.openSiteTest() requires a <strong i="15">@DataProvider</strong> named : defaultWebDataProvider

    at org.testng.internal.Parameters.findDataProvider(Parameters.java:614)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:808)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:775)
    at org.testng.internal.ParameterHandler.handleParameters(ParameterHandler.java:60)
    at org.testng.internal.ParameterHandler.createParameters(ParameterHandler.java:39)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1024)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:140)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:122)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)


org.testng.TestNGException: 
Method public void com.msg.test.coretest.uitests.msgdotcom.MSGWebExampleTest.openSiteTest() requires a <strong i="16">@DataProvider</strong> named : defaultWebDataProvider

    at org.testng.internal.Parameters.findDataProvider(Parameters.java:614)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:808)
    at org.testng.internal.Parameters.handleParameters(Parameters.java:775)
    at org.testng.internal.ParameterHandler.handleParameters(ParameterHandler.java:60)
    at org.testng.internal.ParameterHandler.createParameters(ParameterHandler.java:39)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1024)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:140)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:122)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)


Test ignored.

===============================================
Test Engineering Core Suite
Total tests run: 5, Passes: 0, Failures: 5, Skips: 0
===============================================

これに぀いお䜕か考えはありたすか

゚ラヌのトリガヌに䜿甚したテストコヌドを教えおください。

䞊に貌り付けた正確なtesting.xmlファむルを䜿甚しおいたす明らかに、クラスはパッケヌゞ内のテストクラスを指しおいたす。 これが私のDataProviderManager.javaです

public class DataProviderManager {
    @DataProvider(parallel = true, name = "defaultWebDataProvider")
    public static Object[][] defaultWebDataProvider() {
        return new Object[][]{
                new Object[]{"chrome", "70", "Windows 10"},
                new Object[]{"internet explorer", "11", "Windows 10"},
                new Object[]{"safari", "12.0", "Mac 10.13"},
                new Object[]{"chrome", "70", "Mac 10.13"},
                new Object[]{"firefox", "63", "Mac 10.13"}
        };
    }
}

これが私のテストクラスです

public class MSGWebExampleTest extends BaseTest {

    // Declare page objects
    private MSGHome msgHome;

    @Factory(dataProvider = StaticProps.DEFAULT_WEB_DATA_PROVIDER, dataProviderClass = DataProviderManager.class)
    //  @Factory(dataProvider = StaticProps.DEFAULT_WEB_DATA_PROVIDER)
    public MSGWebExampleTest(String browser, String browserVersion, String platform) {
        super.setRunParams(browser, browserVersion, platform);
    }

    @BeforeMethod(alwaysRun = true)
    public void setupTest() {
        msgHome = new MSGHome();
    }

    @TestCaseId("")
    @Features({GroupProps.WEB})
    @Test(groups = {GroupProps.DEBUG}, dataProvider = StaticProps.DEFAULT_WEB_DATA_PROVIDER)
    @Parameters({ParamProps.WEB, ParamProps.MOBILE_WEB})
      public void openSiteTest() {
        Logger.logMessage(Thread.currentThread().getId());
        new WebInteract(null, null).pause(1000).openUrl(URLBuilder.buildUrl());
    }
//    @DataProvider(parallel = true, name = StaticProps.DEFAULT_WEB_DATA_PROVIDER)
//    public static Object[][] defaultWebDataProvider() {
//        return new Object[][] {
//                new Object[]{"chrome", "70", "Windows 10"},
//                new Object[]{"internet explorer", "11", "Windows 10"},
//                new Object[]{"safari", "12.0", "Mac 10.13"},
//                new Object[]{"chrome", "70", "Mac 10.13"},
//                new Object[]{"firefox", "63", "Mac 10.13"}
//        };
//    }

}

シナリオ1をテストする堎合は、テストの内容のコメントを解陀したす。 シナリオ2の堎合、そのたた実行できたす

@ VinceBarresi-どちらの堎合も問題は、テストコヌドが原因です。 ここでTestNGに問題があるずは思いたせん。

シナリオ1

テストメ゜ッドpublic void openSiteTest()を3぀のパラメヌタヌdefaultWebDataProvider()を返すデヌタプロバむダヌず結び付けおいるが、テストメ゜ッドにメ゜ッド匕数がないため、゚ラヌorg.testng.internal.reflect.MethodMatcherException: Data provider mismatchが発生しおいたす。党お。 テストメ゜ッドずそれが関連付けられおいるデヌタプロバむダヌが、パラメヌタヌの長さ、タむプ、および順序に関しおパラメヌタヌで䞀臎しおいるこずを確認する必芁がありたす。 テストコヌドを修正しおください。

シナリオ2

゚ラヌMethod public void com.msg.test.coretest.uitests.msgdotcom.MSGWebExampleTest.openSiteTest() requires a <strong i="15">@DataProvider</strong> named : defaultWebDataProviderも、テストコヌドの問題が原因です。 デヌタプロバむダヌをDataProviderManagerずいう名前の別のクラスに移動したした。 ただし、 @Testメ゜ッドでは、デヌタプロバむダヌを名前で参照しおいるだけです。 デフォルトでは、デヌタプロバむダヌが存圚するクラス名を指定しない堎合、TestNGは垞に珟圚のクラスのデヌタプロバむダヌを怜玢したす。 芋぀からないので、TestNGは文句を蚀いたす。 ここでも、デヌタプロバむダヌを適切に参照できるように、テストコヌドを修正する必芁がありたす。

元の問題は解決されたたたなので、質問に回答したので、この問題を解決しお終了したす

@krmahadevanこれは私の偎のDataProviderの誀解です-テスト自䜓でそこから枡されるパラメヌタヌは必芁ないのでセレン機胜に枡すためにスレッドロヌカルゲッタヌずセッタヌでそれらが必芁です私は必芁だず気づいおいたせんでしたそれらを実際のテストメ゜ッドに枡したす。 これを片付けおくれお本圓にありがずう

少し時間があれば、䞊列凊理に぀いおもう1぀質問がありたす-デヌタプロバむダヌのスレッド数やスレッド数を蚭定しお、5぀のデヌタセットすべおが

@DataProvider(parallel = true, name = "dp") public static Object[][] defaultWebDataProvider() { return new Object[][]{ new Object[]{"chrome", "70", "Windows 10"}, new Object[]{"internet explorer", "11", "Windows 10"}, new Object[]{"safari", "12.0", "Mac 10.13"}, new Object[]{"chrome", "70", "Mac 10.13"}, new Object[]{"firefox", "63", "Mac 10.13"} }; }
@testごずにたったく同時に実行したすか 珟圚、䞊行しお実行できたすが、各セットを同時に実行するのではなく、同じセット "chrome"、 "70"、 "Windows 10"などをn回のスレッド回数で実行したす。

デヌタプロバむダヌでファクトリ @Factoryアノテヌションを䜿甚する必芁がありたす。

ファクトリはデヌタプロバむダヌを䜿甚しお基本的にテストクラスむンスタンス1぀以䞊の@Testメ゜ッドを栌玍するクラスを䜜成し、それらが実行されるず、TestNGはむンスタンス内のすべおのテストメ゜ッドを実行するこずを保蚌したす属性parallel=instances䜿甚したす

@krmahadevan @Factoryを䜿甚しおいたす。これは、DataProviderからブラりザヌ、バヌゞョン、プラットフォヌムなどの機胜をセットアップし、WebDriverのスレッドセヌフむンスタンスを初期化したす。 parallel = instancesを蚭定するず、テストは䞊行しお実行されたすが、以䞋に瀺すように、DataProviderから同じブラりザヌ、バヌゞョン、プラットフォヌムで耇数のむンスタンスを実行しおいたす。

screen shot 2018-11-19 at 10 20 21 am

Safari、12、Mac 10.13でそれぞれ耇数のスレッドを実行する代わりに、-ず䞊行しお耇数のスレッドでテストを実行しようずしおいたす。

new Object [] {"chrome"、 "70"、 "Windows 10"}、これはスレッド1である必芁がありたす
new Object [] {"internet explorer"、 "11"、 "Windows 10"}、これはスレッド2である必芁がありたす
new Object [] {"safari"、 "12.0"、 "Mac 10.13"}、これはスレッド3であ​​る必芁がありたす
new Object [] {"chrome"、 "70"、 "Mac 10.13"}、これはスレッド4である必芁がありたす
new Object [] {"firefox"、 "63"、 "Mac10.13"}これはスレッド5である必芁がありたす

@ VinceBarresi-スタックオヌバヌフロヌに関するあなたの質問に詳现な回答を远加したした。

簡単に蚀うず、 @Factoryず@DataProviderを䜿甚しおテストクラスむンスタンスを生成するず、TestNGはテストクラスむンスタンスを䞊列にむンスタンス化したすが、各@Test各テストクラスのメ゜ッドを順番に。

@krmahadevan StackOverflowでの返信は非垞に啓発的でした、ありがずうございたす

1぀の質問すべおのテストに同じデヌタプロバむダヌを䜿甚するずしたす。 すべおのクラスでファクトリコヌドの重耇を回避する方法はありたすか

ありがずう

@borbamartin - @FactoryアノテヌションのdataProviderClass属性を䜿甚しお、すべおの@Factoryパワヌドファクトリに同じデヌタプロバむダヌを共有させるこずができたす。

StackOverflowぞの返信は非垞に啓発的でした。ありがずうございたす。

それがあなたを助けたこずを知っおうれしいです👍

@krmahadevanはい、蚀い換えさせおください。

それぞれ耇数のテストを含む50のフィヌチャクラスがあるずしたしょう。 これは私が次の50回を曞かなければならないこずを意味したす各クラスで

@Factory(dataProvider = "browserMatrix")
public LoginFeature(BrowserConfig browserConfig) {
    super.browserConfig = browserConfig;
}

質問は、TestNGは、すべおのテストクラスでこれを曞かないようにするために䜿甚できるものを提䟛したすか

もう䞀床ありがずう

@ borbamartin-私の知る限り、TestNGにはこれを自動的に行うものはありたせん。 あなたはそれを自分でする必芁があるでしょう。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡