ç·šéïŒ6.14.3
ã¹ãŒããŒã¯ã©ã¹ã®@BeforeClass
ãš@AfterClass
ã¯ãã°ã«ãŒããã©ã¡ãŒã¿ãå°éãããããã®ã°ã«ãŒãã®ã¯ã©ã¹ã®ååŸã«å®è¡ããå¿
èŠããããŸãã
6.14.3ã§ã¯ãæå±ããã°ã«ãŒãã«é¢ä¿ãªããã¯ã©ã¹ããšã«@BeforeClass
ãš@AfterClass
å®è¡ãããŸãã 以äžã®ãã¹ãäŸãšåºåãåç
§ããŠãã ããã @BeforeClass
ãš@AfterClass
ãã¹ãŒããŒã¯ã©ã¹ã§ã¯ãªãåãã¹ãã¯ã©ã¹ã«é
眮ãããšãæ£åžžã«æ©èœããŸããããã¹ãŠã®ãã¹ãã¯ã©ã¹ã®ã»ããã¢ãããšãã£ã¢ããŠã³ãåŠçããã¹ãŒããŒã¯ã©ã¹ãæã€ãšããç®çãæãªãããŸãã ããã«ãããã¯ãã€ã©ãŒãã¬ãŒãã®ãã³ãè¿œå ããŸãã
7.0.0ã§ã¯ã@ BeforeClass and
@ AfterClass`ãããã¹ãã¡ãœããã®åã«ã¯ã©ã¹ããšã«è€æ°åå®è¡ãããŸãã ãã¹ãã¡ãœããã®åŸã§åãããšãèµ·ãããŸãã
ã°ã«ãŒããaãã®ã¯ã©ã¹A
@Test(groups = ["a"])
class ClassA : BaseTest() {
<strong i="30">@Test</strong>
fun someTest() {
println("Test in class A with group A ran on ${Thread.currentThread().id} thread")
}
}
ã°ã«ãŒããbãã®ã¯ã©ã¹B
@Test(groups = ["b"])
class ClassB : BaseTest() {
<strong i="34">@Test</strong>
fun someTest() {
println("Test in class B with group B ran on ${Thread.currentThread().id} thread")
}
}
ã°ã«ãŒãããšã«@BeforeClass
@AfterClass
ã¡ãœãããš
open class BaseTest {
@BeforeClass(groups = ["a"])
fun beforeClassA() {
println("Ran before class A on ${Thread.currentThread().id} thread")
}
@BeforeClass(groups = ["b"])
fun beforeClassB() {
println("Ran before class B on ${Thread.currentThread().id} thread")
}
@AfterClass(groups = ["a"])
fun afterClassA() {
println("Ran after class A on ${Thread.currentThread().id} thread")
}
@AfterClass(groups = ["b"])
fun afterClassB() {
println("Ran after class B on ${Thread.currentThread().id} thread")
}
}
testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="All tests" verbose="1" parallel="classes" thread-count="2" >
<test name="Tests">
<classes>
<class name="test.ClassA" />
<class name="test.ClassB" />
</classes>
</test>
</suite>
å®éã®åºåïŒ
Ran before class A on 14 thread
Ran before class A on 15 thread
Ran before class B on 14 thread
Ran before class B on 15 thread
Test in class A with group A ran on 14 thread
Test in class B with group B ran on 15 thread
Ran after class A on 14 thread
Ran after class A on 15 thread
Ran after class B on 14 thread
Ran after class B on 15 thread
æåŸ ãããåºåïŒ
Ran before class A on 14 thread
Ran before class B on 15 thread
Test in class A with group A ran on 14 thread
Test in class B with group B ran on 15 thread
Ran after class A on 14 thread
Ran after class B on 15 thread
å®éãäžèšã®åäœã¯6.14.3ã§ãã 7.0.0ã§ã¯ããã«å¥åŠã§ãã 確ãã«ã¿ã€ã ã¹ã¿ã³ããè¿œå ããŸããã
7.0.0ã§ã®åºåïŒ
Ran before class A on 15 thread, 23:43:10.723
Ran before class A on 14 thread, 23:43:10.723
Ran before class B on 15 thread, 23:43:10.830
Ran before class B on 14 thread, 23:43:10.830
Ran after class B on 15 thread, 23:43:10.952
Ran after class A on 14 thread, 23:43:10.952
Ran before class A on 14 thread, 23:43:11.054
Ran before class B on 15 thread, 23:43:11.054
Test in class A with group A ran on 14 thread, 23:43:11.265
Test in class B with group B ran on 15 thread, 23:43:11.265
Ran before class A on 14 thread, 23:43:11.465
Ran after class B on 15 thread, 23:43:11.465
Ran before class B on 15 thread, 23:43:11.569
Ran after class A on 14 thread, 23:43:11.569
Ran after class A on 14 thread, 23:43:11.677
Ran after class A on 15 thread, 23:43:11.677
Ran after class B on 14 thread, 23:43:11.777
Ran after class B on 15 thread, 23:43:11.778
@ MindaugasMateika-åé¡ã¯ã¹ã€ãŒãã®xmlãã¡ã€ã«ã«ãããŸãã ã°ã«ãŒãã§å®è¡ããŠããŸãããã°ã«ãŒãã§å®è¡ã§ããããã«ããã«ã¯ãã¹ã€ãŒããã¡ã€ã«ã§<groups>
ã¿ã°ã䜿çšããåé¡ã®ã°ã«ãŒããéžæããå¿
èŠããããŸãã ããããªããšãã°ã«ãŒãã®å®è¡ã¯ããªã¬ãŒãããŸããïŒãã¹ã/æ§æãã°ã«ãŒãã«å±ããŠãããã©ããã«é¢ä¿ãªãïŒ
ãã®åé¡ã解決ããŸãã
ããã§ãåé¡ã解決ããªãå Žåã¯ããããè©ŠããŠã³ã¡ã³ãããŠãã ããã
Heya @ krmahadevan ãxmlã«ã°ã«ãŒããè¿œå ããŸããããåãåäœãçºçããŠããŸãã
testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="All tests" verbose="1" parallel="classes" thread-count="2" >
<test name="Tests">
<groups>
<run>
<include name="a" />
<include name="b" />
</run>
</groups>
<classes>
<class name="test.ClassA" />
<class name="test.ClassB" />
</classes>
</test>
</suite>
Ran before class A on 15 thread, 10:51:48.794
Ran before class A on 14 thread, 10:51:48.794
Ran before class B on 14 thread, 10:51:48.902
Ran before class B on 15 thread, 10:51:48.902
Ran after class A on 14 thread, 10:51:49.014
Ran after class B on 15 thread, 10:51:49.017
Ran before class A on 14 thread, 10:51:49.116
Ran before class B on 15 thread, 10:51:49.117
Test in class A with group A ran on 14 thread, 10:51:49.444
Test in class B with group B ran on 15 thread, 10:51:49.444
Ran after class B on 15 thread, 10:51:49.624
Ran before class A on 14 thread, 10:51:49.624
Ran after class A on 14 thread, 10:51:49.725
Ran before class B on 15 thread, 10:51:49.726
Ran after class A on 14 thread, 10:51:49.828
Ran after class A on 15 thread, 10:51:49.828
Ran after class B on 14 thread, 10:51:49.931
Ran after class B on 15 thread, 10:51:49.931
md5-37e721bbba1e94aae099dbc7071b38c3
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="All tests" verbose="1" parallel="classes" thread-count="2" >
<test name="Tests">
<groups>
<run>
<include name="a" />
</run>
</groups>
<classes>
<class name="test.ClassA" />
</classes>
</test>
<test name="Tests B">
<groups>
<run>
<include name="b" />
</run>
</groups>
<classes>
<class name="test.ClassB" />
</classes>
</test>
</suite>
md5-38a48c328d261b22db36e9db68bb81ec
Ran before class A on 14 thread, 10:55:06.758
Ran after class A on 14 thread, 10:55:06.875
Ran before class A on 14 thread, 10:55:06.975
Test in class A with group A ran on 14 thread, 10:55:07.278
Ran before class A on 14 thread, 10:55:07.522
Ran after class A on 14 thread, 10:55:07.625
Ran after class A on 14 thread, 10:55:07.728
Ran before class B on 15 thread, 10:55:07.840
Ran after class B on 15 thread, 10:55:07.941
Ran before class B on 15 thread, 10:55:08.044
Test in class B with group B ran on 15 thread, 10:55:08.151
Ran after class B on 15 thread, 10:55:08.254
Ran before class B on 15 thread, 10:55:08.356
Ran after class B on 15 thread, 10:55:08.458
@ MindaugasMateika-ããã«ã¯ããã€ãã®ããšããããŸãã
åé¡ã解決ããã«ã¯ãã¯ã©ã¹ã¬ãã«ã®ã¢ãããŒã·ã§ã³ãåé€ãã代ããã«ã°ã«ãŒããæå®ãããšãã«ãã¹ãã¡ãœããã¬ãã«ã®ã¢ãããŒã·ã§ã³ã䜿çšããŠãã ãããããã§åé¡ã解決ããã¯ãã§ãã
ã¿ã€ã ã¹ã¿ã³ãã«é¢ããŠ..ããã確èªããå¯äžã®æ¹æ³ã¯ãä»ã®ãã¹ãŠã®ã¡ãœãããåé€ããããšã§ãã2ã€ã®ãã¹ãã¡ãœãããçšæããŠãããäžåºŠè©ŠããŠãã ããã TestNGã¯ãå
éšã§ExecutorService
ã䜿çšããŠåæå®è¡æ§ã管çããŸãã AFAIKãã¿ã¹ã¯ãExecutorService
éä¿¡ããŠããããã«å®è¡ãããããã§ã¯ãããŸããã ãããã£ãŠãããã§ã§ããããšã¯ããŸããããŸããã ãã ãããã¹ãã¯äžŠè¡ããŠå®è¡ãããŠãããããåãã¹ã¬ããIDã衚瀺ãããŸãã
ããŠãå¥åŠãªæ¯ãèãã®ããã«ã
ããªãã®å Žåã2ã€ã®ã°ã«ãŒãa
ãšb
ãå«ãã2ã€ã®ãã¹ãã¯ã©ã¹ãå®è¡ããŠããŸãã ãããã£ãŠãéžæã®åäœã¯ãã°ã«ãŒããã§ãããããTestNGã¯ããã¹ãã¯ã©ã¹ããšã«ãåºæ¬ã¯ã©ã¹ã®äž¡æ¹ã®@BeforeClass
ã¡ãœãããå®è¡ããŸãã TestNGã¯ããäœãå®è¡ãããããèŠã€ããããã«ã®ã¿ã°ã«ãŒãã䜿çšããŸãã ãã®åŸãã°ã«ãŒãã«ã¯é¢é£æ§ããªããšå€æãããå Žåã åºæ¬ã¯ã©ã¹ã«ã¯@BeforeClass
ã¬ãã«ã®ã2ã€ã®ãæ§æã¡ãœãããããããããã¹ãŠã®ãã¹ãã¯ã©ã¹ã«å¯ŸããŠãäž¡æ¹ãå®è¡ãããŸãã ããèªäœãåé¡ã ãšã¯æããŸããã
ãŸãã䞊åå®è¡ãè©Šéšæ¹æ³ããã³NOTèšå®æ¹æ³ã«é©çšå¯èœã§ãããèŠããŠãããŠãã ããã
ããã§ä¿®æ£ããå¿ èŠãããã®ã¯ãã°ã«ãŒããã¯ã©ã¹ã¬ãã«ãšãã¹ãã¡ãœããã¬ãã«ã§å«ãŸããŠããå Žåãããã³ã°ã«ãŒãéžæã䜿çšããŠãã¹ããå®è¡ããå Žåãäœããæ©èœããªããšããããšã§ãã
_èªåãžã®ã¡ã¢_ïŒhttpsïŒ//github.com/cbeust/testng/pull/1992åšèŸºã®äœãã«é¢é£ããŠããå¯èœæ§ããããŸã
åçŸãããµã³ãã«
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.testng.ITestResult;
import org.testng.Reporter;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
public class BaseTest {
public static List<String> logs = new ArrayList<>();
@BeforeClass(groups = {"a"})
public void beforeClassA() {
printer();
}
@BeforeClass(groups = {"b"})
public void beforeClassB() {
printer();
}
@AfterClass(groups = {"a"})
public void afterClassA() {
printer();
}
@AfterClass(groups = {"b"})
public void afterClassB() {
printer();
}
void printer() {
ITestResult result = Reporter.getCurrentTestResult();
String className = "";
String methodName = result.getMethod().getMethodName();
Method m = result.getMethod().getConstructorOrMethod().getMethod();
String annotation = "";
String groups = "";
BeforeClass beforeClass = m.getAnnotation(BeforeClass.class);
if (beforeClass != null) {
annotation = "@BeforeClass";
groups = Arrays.toString(beforeClass.groups());
}
AfterClass afterClass = m.getAnnotation(AfterClass.class);
if (afterClass != null) {
annotation = "@AfterClass";
groups = Arrays.toString(afterClass.groups());
}
Test test = m.getAnnotation(Test.class);
if (test != null) {
annotation = "@Test";
groups = Arrays.toString(test.groups());
}
String tid = Long.toString(Thread.currentThread().getId());
String instanceId = result.getInstance().toString();
String msg =
String.format(
"Running %s annotated %s.%s() [ belongs to groups %s] on Thread [%s] aind instanceId = %s",
annotation, className, methodName, groups, tid, instanceId);
System.err.println(msg);
log(msg);
}
private static synchronized void log(String msg) {
logs.add(msg);
}
}
import org.testng.annotations.Test;
@Test(groups = "a")
public class ClassA extends BaseTest {
<strong i="5">@Test</strong>
// @Test(groups = "a")
public void someTest() {
printer();
}
}
import org.testng.annotations.Test;
@Test(groups = "b")
public class ClassB extends BaseTest {
<strong i="8">@Test</strong>
// @Test(groups = "b")
public void someTest() {
printer();
}
}
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.testng.Assert;
import org.testng.TestNG;
import org.testng.xml.XmlClass;
import org.testng.xml.XmlGroups;
import org.testng.xml.XmlRun;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlSuite.ParallelMode;
import org.testng.xml.XmlTest;
public class TestRunner {
public static void main(String[] args) {
XmlSuite xmlSuite = new XmlSuite();
xmlSuite.setName("test_suite");
XmlTest xmlTest = new XmlTest(xmlSuite);
xmlTest.setName("sample_test");
XmlGroups xmlGroups = new XmlGroups();
XmlRun xmlRun = new XmlRun();
xmlRun.onInclude("a");
xmlRun.onInclude("b");
xmlGroups.setRun(xmlRun);
xmlTest.setGroups(xmlGroups);
List<XmlClass> xmlClasses =
Arrays.asList(new XmlClass(ClassA.class), new XmlClass(ClassB.class));
xmlTest.setXmlClasses(xmlClasses);
xmlSuite.setParallel(ParallelMode.CLASSES);
xmlSuite.setThreadCount(2);
xmlSuite.setVerbose(2);
TestNG testng = new TestNG();
testng.setXmlSuites(Collections.singletonList(xmlSuite));
testng.run();
System.err.println(BaseTest.logs.size());
Assert.assertEquals(BaseTest.logs.size(), 10);
}
}
åºæ¬ã¯ã©ã¹ã«ã¯@BeforeClassã¬ãã«ã§ã2ã€ã®ãæ§æã¡ãœãããããããããã¹ãŠã®ãã¹ãã¯ã©ã¹ã«å¯ŸããŠãäž¡æ¹ãå®è¡ãããŸãã ããèªäœãåé¡ã ãšã¯æããŸããã
2ã€ã®æ§ææ¹æ³ã§ãããã°ã«ãŒããç°ãªããŸãã ããã¯ã°ã«ãŒãã®ç®çã®1ã€ã ãšæããŸãããã€ãŸãããããã®ã°ã«ãŒãã§ããŸããŸãªãã¹ãã¯ã©ã¹ã«å¯ŸããŠããŸããŸãªã»ããã¢ããã¡ãœãããšç Žæ£ã¡ãœããã䜿çšã§ããããã«ããããšã§ãã ïŒ/
@MindaugasMateika
2ã€ã®æ§ææ¹æ³ã§ãããã°ã«ãŒããç°ãªããŸãã ããã¯ã°ã«ãŒãã®ç®çã®1ã€ã ãšæããŸãããã€ãŸãããããã®ã°ã«ãŒãã§ããŸããŸãªãã¹ãã¯ã©ã¹ã«å¯ŸããŠããŸããŸãªã»ããã¢ããã¡ãœãããšç Žæ£ã¡ãœããã䜿çšã§ããããã«ããããšã§ãã
ã¯ãã ããããå®è¡ã«å«ããäž¡æ¹ã®ã°ã«ãŒããéžæããŠããŸããïŒ
@juherr @cbeust WDYTïŒ
ã¯ããäž¡æ¹ã®ã°ã«ãŒãã§ãã¹ãŠã®ãã¹ããå®è¡ãããã®ã§ãäž¡æ¹ã®ã°ã«ãŒããå«ããŠããŸãããæ§æã¡ãœããã®å®è¡ã«åœ±é¿ãäžããããšã¯ãªããšæããŸãã ãã®å Žåã§ããã°ã«ãŒããæã€before / afterã¡ãœããã¯ããããã®ã°ã«ãŒããæã€ã¯ã©ã¹ã®å/åŸã«å®è¡ããå¿ èŠããããšæããŸãã ¯_ïŒãïŒ_ /¯
@ MindaugasMateika-ç§ã¯èª¬æãæäŸããããã«æåãå°œãããŸããã ããªããçŽåŸããŠããªãããšãããã£ãã®ã§ãç§ãèã«çœ®ããŠã @ cbeustãŸãã¯@juherrã®ã©ã¡ãããããªãã«çããæäŸããã®ãåŸ ã¡ãŸãããã
https://github.com/cbeust/testng/issues/2135#issuecomment -524169438ã«é¢é£ããåé¡ã¯ãã¯ã©ã¹ã¬ãã«ã§@Test
ã¡ãœãããä»ããŠã°ã«ãŒãæ
å ±ãå«ãããšãæ§æãè¡ãããããã§ããã¡ãœãããã°ã«ãŒããç¶æ¿ããããšã«ãªããŸãã ãããTestNGã®åäœã§ãã
@BeforeXXX
æ§æã¢ãããŒã·ã§ã³ãä»ããŠå±æ§inheritGroups=false
ã䜿çšããããšã«ããããªãã«ããããšãã§ããŸãã
ãŸããTestNGã®åäœãå€æŽããŠãã¯ã©ã¹ã¬ãã«ã®@Test
ã¢ãããŒã·ã§ã³ããæ§æã¢ãããŒã·ã§ã³ã«ã°ã«ãŒãæ
å ±ãç¶æ¿ããTestNGã®åäœãã <groups>
ä»ããŠã°ã«ãŒããã£ã«ã¿ãªã³ã°ãéžæãããå Žåã«ã®ã¿ãªã³ã«ãªãããã«ããŸããã https://github.com/cbeust/testng/pull/2167
@ juherr @ cbeust-ãã®åé¡ã§ã¯ãã¹ãŠã®æªè§£æ±ºã®ã¯ãšãªã解決ãããŠããŸãã ä¿çäžã®å¯äžã®ããšã¯ããã£ã€ã ãå©ããŠ@MindaugasMateikaã®è³ªåã«è§£æ±ºçãæäŸããããš
ã³ãŒãã®èŠ³ç¹ããã¯ããã®åé¡ã§å¯ŸåŠããå¿ èŠã®ãããã®ã¯ä»ã«ãããŸããã
@krmahadevan naahã
äžèšã®ã³ã¡ã³ãã«åºã¥ããŠãããéãã
@Proryanator説æããµã³ãã«ã«ç¿»èš³ããŠ
NSïŒ
@BeforeMethodãå®çŸ©ããã 'BaseTest'ã¯ã©ã¹ãããã testã¡ãœããã¯ãããŸããã @BeforeMethodãdependsOnMethods = {"importantParentBeforeMethod"}ãšãšãã«äœ¿çšããŠããã®1ã€ã®éèŠãªã¡ãœããã倱æããå Žåã«@BeforeMethodãå®è¡ãããªãããã«ããŠããŸãã
public abstract class BaseTest {
@BeforeMethod(dependsOnMethods = {"importantParentBeforeMethod"})
public void setUp() {
...
}
}
@Proryanator説æããµã³ãã«ã«ç¿»èš³ããŠ
NSïŒ
@BeforeMethodãå®çŸ©ããã 'BaseTest'ã¯ã©ã¹ãããã testã¡ãœããã¯ãããŸããã @BeforeMethodãdependsOnMethods = {"importantParentBeforeMethod"}ãšãšãã«äœ¿çšããŠããã®1ã€ã®éèŠãªã¡ãœããã倱æããå Žåã«@BeforeMethodãå®è¡ãããªãããã«ããŠããŸãã
public abstract class BaseTest { @BeforeMethod(dependsOnMethods = {"importantParentBeforeMethod"}) public void setUp() { ... } }
ç§ã¯ãããããããšæã£ããåé¡ãªãïŒ
çŸåšãTestNG7.0.0ã䜿çšããŠããŸãã
ç§ã¯äž»ã«ã_group_ã«é¢ä¿ãªã_ @ BeforeMethod_ãå®è¡ããæ¹æ³ãç解ããããšããŠããŸãããããã§ãå¥ã®configã¡ãœããã®æåãã€ãŸã_alwaysRun = true_ãš_dependsOnMethods_ã®äž¡æ¹ã®äœ¿çšã«äŸåããŠããŸãã
ãã®ãããã¢ãã€ã«ãã©ã€ããŒãã»ããã¢ããããæäžäœã®èŠªã¯ã©ã¹ããããŸãã äœããããŸããããªãå Žåãããã¯ã¢ãµãŒã倱æãããŸãã
public abstract class AbstractMobileBaseTest{
@BeforeMethod(alwaysRun = true)
public void mobileDriverCreation(){
if (couldNotCreateDriver()){
Assert.fail("Could not create the driver at all...");
}
}
}
ãã¹ãŠã®ãã¹ãã¯ã©ã¹ãç¶æ¿ããåã¯ã©ã¹ãã°ã«ãŒãã«é¢ä¿ãªãåžžã«ãcreateSharedObjectsããå®è¡ããããšã«ãªã£ãŠããŸããã芪ã¯ã©ã¹ã®ã¡ãœããã倱æããå Žåã¯å®è¡ããªãã§ãã ããã
public abstract class MobileAppBaseTest extends AbstractMobileBaseTest{
@BeforeMethod(alwaysRun = true, dependsOnMethods = {"mobileDriverCreation"})
public void makeMostPages(){
// does some setup stuff here
}
}
åã¯ã©ã¹ã«ã¯ä»ã«ã_ @ BeforeMethods_ããããããã«è¡šç€ºããããšã¯éèŠã§ã¯ãããŸãããã_alwaysRun = true_ãš_dependsOnMethods = {"mobileDriverCreation"} _ã®äž¡æ¹ã䜿çšããŠãããããä»ã®æ¹æ³ã
ãããã©ã®ããã«æ©èœãããããã¹ãããããã«ãçŸåš1ã€ã®ãã¹ãã®ã¿ãå®è¡ããŠããŸãã
mvn verify ... -Dit.test=TestClassName -Dgroups=groupName
çµæã¯æ¬¡ã®ãšããã§ãã mobileDriverCreationïŒïŒ @ BeforeMethodã§åé¡ãçºçããå Žåãå@BeforeMethodsãå®è¡ãããªãããšãæåŸ ããŠããŸããã次ã®ããã«è¡šç€ºãããŸãã
mobileDriverCreationïŒïŒã§ã¢ãµãŒã·ã§ã³ãšã©ãŒãçºçããŸããããä»ã®ãã¹ãŠã®@BeforeMethodsãå®è¡ãããŸãïŒç¬èªã®äŸå€ãšãšã©ãŒãã¹ããŒããããããæåã®ã¡ãœããã«äŸåããŸãïŒã ããããããŠã³ããããå®è¡æéãmsã§ãããããã¡ãœããããŸã å®è¡ãããŠããããšãããããŸãã
ãã©ããŒã¢ãããã¹ããè¡ããŸãããåã®@BeforeMethodsã§_makeMostPages_ãš_digitalServicesMobileSetup_ã䜿çšããããã«çŽæ¥æå®ãïŒgroups = {"groupToRun"}ãdependsOnMethods = {"mobileDriverCreation"}ïŒãããã_alwaysRunã§å¥åŠãªããšã§ããããšã確èªããŸããã = true_ã®ã¿ã§ãã°ã«ãŒãã¿ã°ã¯ãããŸããã 以äžã®ã¹ã¯ãªãŒã³ã·ã§ããã§ãããã2ã€ã®ã¡ãœããã¯ãå£ããããšè¡šç€ºãããå®è¡ãããªãã£ãããšãããããŸããããã¯ã倱æã«äŸåããã¡ãœãããåå ã§ã¹ããããããããã§ãããããç®çã§ãã
_alwaysRun = true_ã¯_dependsOnMethods_ãããåªå ãããã»ãšãã©ç¡èŠãããŠããããæåŸã«äœ¿çš/ãã§ãã¯ãããŠããããã§ãã åŸã®ã¹ããããšããŠ_dependsOnMethods_ãè¿œå ããå¿ èŠããããšæããŸãã
_groups_ã䜿çšããªãéãã_dependsOnMethods_ã䜿çšããã ãã§æåŸ ã©ããã«æ©èœããããšã¯ããã£ãŠããŸããã_groups_ãå®æçã«äœ¿çšããŠããããããããè¡ãããšã¯ã§ããŸããð
@juherr @krmahadevan
念ã®ããã«èšã£ãŠãããŸãããç§ãã¡ã®ãããžã§ã¯ãã§ã¯ã¹ã€ãŒããã¡ã€ã«ã䜿çšããŠããŸããïŒãããããé¡ãããŸãïŒã 次ã®ããã«maven-failsafe-pluginã®ã¿ã°ã䜿çšããŠå®è¡ããŸããããã§ãincludesã¯ããã©ã«ãã§_ **ãjava_ã§ãããããã_alwaysRun = true_ããã³_dependsOnMethods_ã®è§£éã«åœ±é¿ãäžããå¯èœæ§ãããå ŽåïŒ
ã䜿ã£ãŠæ³šå°ããŠã¿ãŸãã
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${failsafe.plugin.version}</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<!-- This reads in any other system variables that you provide via -DparamName=value -->
<systemPropertyVariables>
<mobile>${mobile}</mobile>
<url>${url}</url>
<platform>${platform}</platform>
<remote>${remote}</remote>
<!-- Thread count is set by default variable at the top, if you'd like to change it pass in 'threadCount' as a system variable -->
<threadCount>${threadCount}</threadCount>
<retryCount>${retryCount}</retryCount>
<iosVersion>${iosVersion}</iosVersion>
</systemPropertyVariables>
<argLine>
-javaagent:${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar
</argLine>
<!-- Cannot run parallel using methods yet, use classes -->
<parallel>classes</parallel>
<threadCount>${threadCount}</threadCount>
<skip>false</skip>
<encoding>${project.build.sourceEncoding}</encoding>
<includes>
<include>${include}</include>
</includes>
<workingDirectory>target/${mobile}</workingDirectory>
</configuration>
</execution>
</executions>
</plugin>
@ Proryanator -TestNG 7.3.0
ã䜿çšããŠåé¡ãåçŸããããšã¯ã§ããŸããã æ·»ä»ã®ãµã³ãã«ããå©çšãã ããã
ãµã³ãã«ãç®çã®ãã®ã§ã¯ãªããåé¡ãåçŸã§ããããã«ãµã³ãã«ã埮調æŽã§ããå Žåã¯ãæ°ããåé¡ãéããŠãµã³ãã«ãæ·»ä»ããŠãã ããã
@krmahadevanç§ã¯ããªãã®ãµã³ãã«ã®ã¯ãã®ã¢ãããžãŒã倧奜ãã§ãð
ç§ã¯ããªãã®ãµã³ãã«ãããŠã³ããŒãããããã€ãã®å°ããªå€æŽãå ããŸããã倱æãããšããæžå¿µããŠããã®ã§ããGrandpaBearã @BeforeMethodãå°ãç°¡åã«ããããã«åžžã«å€±æããŸããã
æäžäœã®èŠªã¯ã©ã¹ã¯æ¬¡ã®ãšããã§ãã
public class GrandpaBearGitHubTest {
@BeforeMethod(alwaysRun = true)
public void mobileDriverCreation() {
Assert.fail("Could not create the driver at all...");
}
}
ãããã£ãŠããã®@BeforeMethodã¯åžžã«ã¢ãµãŒã·ã§ã³ãšã©ãŒãã¹ããŒããŸãã
ãã®ã¯ã©ã¹ã®äžã«ããæåã®ã¯ã©ã¹ã§ã_alwaysRun = true_ãš_dependsOnMethods_ãããã _mobileDriverCreation_ãšåŒã°ãã@BeforeMethodã倱æããå Žåã¯
public class PapaBearGithubTest extends GrandpaBearGitHubTest {
@BeforeMethod(alwaysRun = true, dependsOnMethods = {"mobileDriverCreation"})
public void makeMostPages() {
System.out.println("Ran makeMostPages");
}
}
åçŽãª@Testã¯ã©ã¹ã¯æ¬¡ã®ãšããã§ãã
public class GrandsonBearGithubTest extends PapaBearGithubTest {
@Test(groups = "yogi-bear")
public void testMethod() {
System.err.println("Running test method");
}
}
ããã¯ã-Dgroups = yogi-bearã䜿çšããå Žåãšäœ¿çšããªãå Žåã®äž¡æ¹ãå®è¡ããçµæã§ãã ã©ã¡ãã®å Žåããåã¯ã©ã¹@BeforeMethodã¯åŒãç¶ãå®è¡ãããŸãïŒäŸåããã¡ãœããã倱æããå Žåã§ãããRanmakeMostPagesããåºåãããšããããŸãã
[-Dgroupsã§å®è¡]
[-Dgroupsãªãã§å®è¡]
ãŸããIntelliJã§å®è¡ããŠãMavenãã°ã«ãŒããåŠçããæ¹æ³ã§ã¯ãªããTestNGã«é¢ãããã®ã§ããããšã確èªããŸããããçµæã¯åãã§ããã
ç§ã®æšæž¬ã§ã¯ã_alwaysRun = true_ã¯ç絡ãåŒãèµ·ããå¯èœæ§ããããããŸãã¯_dependsOnMethods_ãããåªå ãããå¯èœæ§ããããŸãã
ããã«èª¿æ»/ãã¹ããè¡ãã2çªç®ã®@BeforeMethodã@ BeforeMethodãå®è¡ãããªãã£ãããšã瀺ããŸããããã¯ãåäœã®åé¡ã_alwaysRun = true_ãäžå¿ã«å±éããŠããããšã瀺ããŠããŸãã
ããã¯ãäºæããã-Dgroups = yogi-bearãæå®ããå Žåã«ã®ã¿ããã®@BeforeMethodãå®è¡ããããã«ãªããŸãããã_dependsOnMethods_ãå°éãããããæ°ãã@BeforeMethodã¯å®è¡ãããŸããã
public class PapaBearGithubTest extends GrandpaBearGitHubTest {
@BeforeMethod(alwaysRun = true, dependsOnMethods = {"mobileDriverCreation"})
public void makeMostPages() {
System.out.println("Ran makeMostPages");
}
@BeforeMethod(groups = {"yogi-bear"}, dependsOnMethods = {"mobileDriverCreation"})
public void makeOtherPages() {
System.out.println("Ran makeOtherPages");
}
}
æ°ãã@BeforeMethodãå®è¡ãããå ŽåããRan makeOtherPagesãã衚瀺ãããŸããããã®ãããªåºåã¯è¡šç€ºããããæåã®åºåãããRanmakeMostPagesãã ãã衚瀺ãããŸãã
@krmahadevanæŽæ°ãããµã³ãã«ãæ·»ä»ããŸãããåçŸã§ããå Žåã¯ãå
ã«é²ãã§åé¡ãéããŸãã
æŽæ°-issue_2135.zip
ä¿®æ£ã«åãçµãã§ãããŸããŸãããããã¯ç§ã®çµç¹ã§äœ¿çšã§ããŸããã @ BeforeMethodã®ãã©ã¡ãŒã¿ãŒã®åææ¹æ³ã«é¢ããŠã¯ããœãŒã¹ã³ãŒãã®ã©ãã調ã¹ãã¹ãã
@Proryanatoræ°ããå·ãéããŠ
@Proryanatoræ°ããå·ãéããŠ
æ°ããéãããåé¡ã¯ããã«ãããŸãïŒïŒ2448