我想运行一个包含4个不同类的testng.xml文件。我想在另一个完成之后运行每一个。所以当1级完成然后2级开始,当2级完成时,3级开始执行。到目前为止,我已经编写了这个代码,但它同时触发了所有类。即使我尝试了parallel = false而且它也没有用。任何帮助将不胜感激。谢谢
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Smoke Test" parallel="false" preserve-order="true" verbose="2">
<test name="Test 1">
<classes>
<class name="class1"></class>
</classes>
</test>
<test name="Test 2">
<classes>
<class name="class2"></class>
</classes>
</test>
<test name="Test 2">
<classes>
<class name="class3"></class>
</classes>
</test>
</suite>
答案 0 :(得分:1)
您需要做的是同时使用@BeforeClass和@AfterClass批注来启动和退出Webdriver。您需要定义webdriver在@BeforeClass中启动,并且webdriver在@AfterClass方法中退出(如果您选择在完成此类后关闭此webdriver)。
举个例子...
@BeforeClass
public void initClass()
{
//Set the system property
String driverPath = System.getProperty("user.dir") +"\\chromedriver\\chromedriver.exe";
String driverType = "webdriver.chrome.driver";
System.setProperty(driverType, driverPath);
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
}
在本课程的最后,如果我想退出该webdriver实例:
@AfterClass
public void finish()
{
driver.manage().deleteAllCookies();
driver.quit();
}
对每个测试类都执行此操作,然后下一个类将仅在上一个类完成后才开始。
TestNG xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test thread-count="5" name="Test" preserve-order="true">
<classes>
<class name="Pkg.ClassA" />
<class name="Pkg.ClassB" />
<class name="Pkg.ClassC" />
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
答案 1 :(得分:0)
设置不完全相同,但我们使用&#34; next&#34;我们的一些工作中的属性要进行顺序处理:
<batch:job id="JOB_NAME" job-repository="jobRepository">
<batch:step id="process1" next="process2">
<batch:tasklet>
<batch:chunk>
processing info
</batch:chunk>
</batch:tasklet>
</batch:step>
<batch:step id="process2" next="process3">
<batch:tasklet>
<batch:chunk>
processing info
</batch:chunk>
</batch:tasklet>
</batch:tasklet>
</batch:step>
这样的事可能适合你。
答案 2 :(得分:0)
为什么不将所有测试类添加到同一个<test>
标记中然后运行它们?
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Smoke Test" parallel="false" preserve-order="true" verbose="2">
<test name="Test 1">
<classes>
<class name="class1"></class>
<class name="class2"></class>
<class name="class3"></class>
</classes>
</test>
</suite>
这基本上会一个接一个地在每个Test类中执行测试方法。您可以通过为每个System.out.println(Thread.currentThread().getId());
方法添加@Test
来确认这一点。您应该看到正在打印相同的线程ID。
答案 3 :(得分:0)
也许您在@Test注释中使用“priority”和“dependsOnGroups”。此参数对于订单更重要(请参阅6.10更改https://github.com/cbeust/testng/blob/master/CHANGES.txt)。
“优先级”示例。
此代码:
public class Class1 {
@Test(priority = 1)
public void test1() {
System.out.println("Class1 test1");
}
@Test(priority = 2)
public void test2() {
System.out.println("Class1 test2");
}
}
public class Class2 {
@Test(priority = 1)
public void test1() {
System.out.println("Class2 test1");
}
@Test(priority = 2)
public void test2() {
System.out.println("Class2 test2");
}
}
结果:
Class1 test1
Class2 test1
Class1 test2
Class2 test2
“dependsOnGroups”的示例。
此代码:
public class Class1 {
@Test(groups = {"someGroup"})
public void test1() {
System.out.println("Class1 test1");
}
@Test(dependsOnGroups = {"someGroup"})
public void test2() {
System.out.println("Class1 test2");
}
}
public class Class2 {
@Test(groups = {"someGroup"})
public void test1() {
System.out.println("Class2 test1");
}
@Test(dependsOnGroups = {"someGroup"})
public void test2() {
System.out.println("Class2 test2");
}
}
结果相同:
Class1 test1
Class2 test1
Class1 test2
Class2 test2
答案 4 :(得分:0)
测试名称标记应该是唯一的,我会看到第2类和第2类的测试名称3级是相同的,这就是你看到问题的原因。
如果您仍然看到问题,请添加日志/其他信息。