Testng: Factory๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ DataProvider๊ฐ€ ๋ณ‘๋ ฌ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์Œ

์— ๋งŒ๋“  2018๋…„ 11์›” 13์ผ  ยท  15์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: cbeust/testng

ํ…Œ์ŠคํŠธNG ๋ฒ„์ „

7.0.0-๋ฒ ํƒ€1

์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™

์—ฌ๊ธฐ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ๋ธŒ๋ผ์šฐ์ € ์ด๋ฆ„, ๋ฒ„์ „ ๋ฐ ํ”Œ๋žซํผ์„ ํฌํ•จํ•œ 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());
    }
}

ํ…Œ์ŠคํŠธ.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๋ฒˆ ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ํ–‰๋™

๋ณ‘๋ ฌ = true๊ฐ€ ๋ฌด์‹œ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์„ค์ •ํ•˜๋ ค๋Š” ์Šค๋ ˆ๋“œ ์ˆ˜์— ๊ด€๊ณ„์—†์ด ํ…Œ์ŠคํŠธ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์œ„์˜ testing.xml์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…๋ น์ค„์—์„œ -Dthreadcount=2 -Ddataproviderthreacount=4๋ฅผ ์ „๋‹ฌํ•˜๊ณ  Surefire ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๊ตฌ์„ฑ ํƒœ๊ทธ์—์„œ ์ด๋Ÿฌํ•œ ๊ฐ’์„ ์„ค์ •ํ•˜์—ฌ ์ด ๊ฐ’์„ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋งŽ์€ ์‹œ๋„๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์•„๋ฌด ๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋Ÿฌ๋„ˆ์—์„œ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

  • [x] ์‰˜
  • [x] ๋ฉ”์ด๋ธ
  • [ ] ๊ทธ๋ž˜๋“ค
  • [ ] ๊ฐœ๋ฏธ
  • [ ] ์ดํด๋ฆฝ์Šค
  • [x] ์ธํ…”๋ฆฌ์ œ์ด
  • [ ] ๋„ท๋นˆ

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ƒ˜ํ”Œ

๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€(๊ฐ€๋Šฅํ•œ ํ•œ ์ž‘๊ฒŒ)๋ฅผ ๊ณต์œ ํ•˜์‹ญ์‹œ์˜ค.

Question

๋ชจ๋“  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์ด๋ฏ€๋กœ ๋‘ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ํŠน์ •ํ•ด์•ผ ํ•จ).

์ƒ˜ํ”Œ์˜ ๋ฐ์ดํ„ฐ ์ œ๊ณต ์—…์ฒด๋Š” ๊ณต์žฅ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค @Test ๋ฐฉ๋ฒ•. ๋”ฐ๋ผ์„œ ์‹คํ–‰ ์ค‘์ธ ์Šค๋ ˆ๋“œ ์ˆ˜์— ๋Œ€ํ•ด ์•„๋ฌด๋Ÿฐ ์—ญํ• ๋„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋งŒ -

  • ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž๋Š” @Test ๋ฉ”์„œ๋“œ์™€ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค.
  • ์†์„ฑ๋“ค์˜ ๋ณ‘๋ ฌ @DataProvider ์„ค์ •๋˜์–ด true
  • ์†์„ฑ parallel ์„ค์ •๋˜์–ด methods ์—์„œ <suite> (๋˜๋Š”) <test> ํƒœ๊ทธ
  • data-provider-thread-count ๊ฐ’์ด 1๋ณด๋‹ค ํฐ ๊ฐ’์œผ๋กœ ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋Š” TestNG์— ์˜ํ•ด ํ™œ์„ฑํ™”๋˜๊ณ  ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž๊ฐ€ ์ œ๊ณตํ•˜๋Š” @Test ๋ฉ”์„œ๋“œ์˜ ์ˆ˜๋Š” data-provider-thread-count. ์†์„ฑ์„ ํ†ตํ•ด ์„ค์ •๋œ ์Šค๋ ˆ๋“œ ์ˆ˜์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ : ์ œํ’ˆ๊ตฐ xml ํŒŒ์ผ์˜ thread-count ์†์„ฑ์€ ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ์—๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์ œํ’ˆ๊ตฐ xml ํŒŒ์ผ์˜ data-provider-thread-count ์†์„ฑ ์€ ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ์—๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ์„ค๋ช…์ด ์˜๋ฏธ๊ฐ€ ์žˆ๊ณ  ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

@krmahadevan ์ž์„ธํ•œ ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ธฐํšŒ๊ฐ€ ๋˜๋ฉด ์ง์ ‘ ํ…Œ์ŠคํŠธํ•ด๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

1: ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž(์ด ๊ฒฝ์šฐ - "dp)"๋Š” ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž ์Šค๋ ˆ๋“œ ์ˆ˜ ๋ฐ ๋ณ‘๋ ฌ = true์— ์˜ํ•œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ณ„์† ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž๋ฅผ ์ „๋‹ฌํ•˜๋Š” @Test ์™€ ๋™์ผํ•œ ํด๋ž˜์Šค์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ?

2: ์ œํ’ˆ๊ตฐ ์ˆ˜์ค€์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๊ฒƒ์ด ๋ณ‘๋ ฌ์„ฑ ์ธก๋ฉด์—์„œ๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด mvn test -Dgroups=DEBUG๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์‹คํ•œ DEBUG ๊ทธ๋ฃน ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๋ช…๋ น์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž ์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

1: ๋ฐ์ดํ„ฐ ์ œ๊ณต์ž(์ด ๊ฒฝ์šฐ - "dp)๋Š” ๋ฐ์ดํ„ฐ ์ œ๊ณต์ž ์Šค๋ ˆ๋“œ ์ˆ˜๋กœ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ์ œ๊ณต์ž๋ฅผ ์ „๋‹ฌํ•˜๋Š” @Test ์™€ ๋™์ผํ•œ ํด๋ž˜์Šค์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋ณ‘๋ ฌ = ์‚ฌ์‹ค์ž…๋‹ˆ๊นŒ?

ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ œ๊ณต์ž๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

2: ์ œํ’ˆ๊ตฐ ์ˆ˜์ค€์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๊ฒƒ์ด ๋ณ‘๋ ฌ์„ฑ ์ธก๋ฉด์—์„œ๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด mvn test -Dgroups=DEBUG๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์‹คํ•œ DEBUG ๊ทธ๋ฃน ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๋ช…๋ น์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž ์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ, ์Šค์œ„ํŠธ ๋ ˆ๋ฒจ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ™์ด
๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž ์Šค๋ ˆ๋“œ ์ˆ˜๊ฐ€ ์ œํ’ˆ๊ตฐ ํŒŒ์ผ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ•œ
(์ œ๊ณต๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’์€ 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

์˜ค๋ฅ˜ org.testng.internal.reflect.MethodMatcherException: Data provider mismatch ๋‹น์‹ ์ด ์‹œํ—˜ ๋ฐฉ๋ฒ•์„ ๋ฌถ๋Š” ๋•Œ๋ฌธ์—์˜ค๊ณ  public void openSiteTest() 3 ๊ฐœ ๊ฐœ์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž์™€ defaultWebDataProvider() ๊ทธ๋Ÿฌ๋‚˜ ๋‹น์‹ ์˜ ์‹œํ—˜ ๋ฐฉ๋ฒ•์€ ์–ด๋–ค ๋ฐฉ๋ฒ• ์ธ์ˆ˜์—์„œ์ด์—†๋Š” ๋ชจ๋‘. ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•๊ณผ ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ธธ์ด, ์œ ํ˜• ๋ฐ ์ˆœ์„œ ์ธก๋ฉด์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค.

์‹œ๋‚˜๋ฆฌ์˜ค 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์— ๋Œ€ํ•œ ์˜คํ•ด์ž…๋‹ˆ๋‹ค - ํ…Œ์ŠคํŠธ ์ž์ฒด์—์„œ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— (๋‚ด

์ž ์‹œ ์‹œ๊ฐ„์ด ์žˆ๋‹ค๋ฉด ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ด ํ•˜๋‚˜ ๋” ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž ์Šค๋ ˆ๋“œ ์ˆ˜ ๋ฐ/๋˜๋Š” ์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ์„ค์ •ํ•˜์—ฌ

@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 ์— ๋Œ€ํ•ด ์ •ํ™•ํžˆ ๊ฐ™์€ ์‹œ๊ฐ„์— ์‹คํ–‰

๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž์™€ ํ•จ๊ป˜ ํŒฉํ† ๋ฆฌ( @Factory ์ฃผ์„)๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒฉํ† ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค(ํ•˜๋‚˜ ์ด์ƒ์˜ @Test ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ํด๋ž˜์Šค)๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์‹คํ–‰๋  ๋•Œ TestNG๋Š” ์ธ์Šคํ„ด์Šค์˜ ๋ชจ๋“  ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ( parallel=instances ์†์„ฑ ์‚ฌ์šฉ)

@krmahadevan ์ €๋Š” DataProvider์—์„œ ๋ธŒ๋ผ์šฐ์ €, ๋ฒ„์ „, ํ”Œ๋žซํผ์„ ํฌํ•จํ•œ ๊ธฐ๋Šฅ์„ ์„ค์ •ํ•˜๊ณ  WebDriver์˜ ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” @Factory ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (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", "Mac 10.13"} ์ด๊ฒƒ์€ ์Šค๋ ˆ๋“œ 5์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@VinceBarresi - ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์งˆ๋ฌธ ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‹ต๋ณ€์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ @Factory ๋ฅผ @DataProvider ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด TestNG๋Š” ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณ‘๋ ฌ๋กœ ์ธ์Šคํ„ด์Šคํ™”ํ•˜์ง€๋งŒ ๊ฐ @Test ์ˆœ์„œ๋Œ€๋กœ ๊ฐ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ.

@krmahadevan StackOverflow์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ๋‹ต๋ณ€์€ ๋งค์šฐ

ํ•œ ๊ฐ€์ง€ ์งˆ๋ฌธ: ๋ชจ๋“  ํ…Œ์ŠคํŠธ์— ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํด๋ž˜์Šค์—์„œ ํŒฉํ† ๋ฆฌ ์ฝ”๋“œ ์ค‘๋ณต์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ ํ•ด์š”!

@borbamartin - @Factory ์ฃผ์„์˜ dataProviderClass ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  @Factory ๊ตฌ๋™ ํŒฉํ† ๋ฆฌ๊ฐ€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰์ž๋ฅผ ๊ณต์œ ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

StackOverflow์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ๋‹ต๋ณ€์€ ๋งค์šฐ ์œ ์ตํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋„์›€์ด ๋˜์…จ๋‹ค๋‹ˆ ๋‹คํ–‰์ž…๋‹ˆ๋‹ค๐Ÿ‘

@krmahadevan ์˜ˆ, ๋‹ค์‹œ ๋งํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ๊ฐ ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” 50๊ฐœ์˜ ํ”ผ์ณ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ๋‹ค์Œ 50 ๋ฒˆ์„ ์ž‘์„ฑํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค (๊ฐ ์ˆ˜์—…์—์„œ)

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

์งˆ๋ฌธ์€ TestNG๊ฐ€ ๋ชจ๋“  ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์—์„œ ์ด๊ฒƒ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@borbamartin - ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ, TestNG์—๋Š” ์ž๋™์œผ๋กœ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ง์ ‘ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰