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 ํ๋ฌ๊ทธ์ธ์ ๊ตฌ์ฑ ํ๊ทธ์์ ์ด๋ฌํ ๊ฐ์ ์ค์ ํ์ฌ ์ด ๊ฐ์ ๋ณ๋ ฌ๋ก ์คํํ๊ธฐ ์ํด ์๋ง์ ์๋๋ฅผ ์๋ํ์ง๋ง ์๋ฌด ๊ฒ๋ ์๋ํ์ง ์์ต๋๋ค.
๋ฌธ์ ๋ฅผ ๋ณด์ฌ์ฃผ๋ ํ ์คํธ ์ฌ๋ก(๊ฐ๋ฅํ ํ ์๊ฒ)๋ฅผ ๊ณต์ ํ์ญ์์ค.
@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 ๊ทธ๋์ ์ค๋ ์์นจ์ ์ ์ํ ๋ณ๊ฒฝ ์ฌํญ์ ์ฌ์ฉํ์ฌ ํ ์คํธํ๊ณ ๋ช ๊ฐ์ง ๊ด์ฐฐ์ ํ ๊ธฐํ๊ฐ ์์์ต๋๋ค.
...
... 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
...
... 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์์ ๋์ผํ ๋ธ๋ผ์ฐ์ , ๋ฒ์ , ํ๋ซํผ์ผ๋ก ์ฌ๋ฌ ์ธ์คํด์ค๋ฅผ ์คํํ๊ณ ์์ต๋๋ค.
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์๋ ์๋์ผ๋ก ์ด ์์ ์ ์ํํ๋ ๊ฒ์ด ์์ต๋๋ค. ์ง์ ํด์ผ ํฉ๋๋ค.