我有3种测试方法,让我们来电话method1
,method2
和method3
。 Method1
可以单独执行。但method2
取决于method1
,这意味着method1
准备method2
继续工作的工作流程。在这方面,method3
取决于method1
和method2
。
当然,我可以将所有三合一测试方法结合起来并且有效。但是因为我使用了TestNG,并且我发现了dependsOnMethods
,所以我想尝试一下。这就是我将测试分解为3种方法的原因:
@Test
public void method1() {
// do test steps
}
@Test(dependsOnMethods = {"method1"})
public void method2() {
// do test steps
}
@Test(dependsOnMethods = {"method2"})
public void method3() {
// do test steps
}
method1
成功执行。当我执行method2
时,首先执行method1
,然后执行method2
。这就是我想要的。
这就是为什么我认为,如果我执行method3
,那么method2
将被执行,而method2
依赖于method1
,那么{{ 1}}应该先执行,所以按此顺序执行:method1
。但它显然不起作用。我得到了method1 -> method2 -> method3
:
TestNGException
之后我试试这个:
method2() is depending on method1(), which is not annotated with @Test or not included
实际上,首先调用method1,因为我看到网页浏览器是用网址打开的,但是那个,它没有进一步,它停在那里,我得到这个日志:
@Test(dependsOnMethods = {"method1" , "method2"})
public void method3() {
// do test steps
}
任何人都可以向我提出解释和解决方案。我的测试在Chrome上运行。谢谢你的阅读。
答案 0 :(得分:0)
如果您想按特定顺序(method1->method2->method3
)运行测试用例,请尝试以下解决方案。
Approach1
public class TestOrder {
@Test
public void method1() {
System.out.println("method1");
}
@Test(dependsOnMethods = {"method1"})
public void method2() {
System.out.println("method2");
}
@Test(dependsOnMethods = {"method2"})
public void method3() {
System.out.println("method3");
}
}
,您的testng.xml
文件结构就像这样
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" preserve-order="true">
<test thread-count="1" name="Test">
<classes>
<class name="grid.TestOrder"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
我正在得到这样的输出。
method1
method2
method3
===============================================
Suite
Total tests run: 3, Failures: 0, Skips: 0
===============================================
Approach2
public class TestOrder {
@Test
public void method1() {
System.out.println("method1");
}
@Test
public void method2() {
System.out.println("method2");
}
@Test
public void method3() {
System.out.println("method3");
}
}
您必须在testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" preserve-order="true">
<test thread-count="1" name="Test">
<classes>
<class name="grid.TestOrder">
<methods>
<include name="method1" />
<include name="method2" />
<include name="method3" />
</methods>
</class>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
这一次,我也得到了相同的输出
method1
method2
method3
===============================================
Suite
Total tests run: 3, Failures: 0, Skips: 0
===============================================
method2()取决于method1(),它没有使用@Test注释 或不包括
因为您尝试单独运行method2
而未提供依赖方法的详细信息。
您可能就是这样设计了xml
文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" preserve-order="true">
<test thread-count="1" name="Test">
<classes>
<class name="grid.TestOrder">
<methods>
<include name="method2" />
<include name="method3" />
</methods>
</class>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
您应该在<classes>
标记中包含所有方法或类名。您可以结帐this thread了解详情。
From Cedric Beust's answer(link source):
“<classes>
标记是类和方法的列表 TestNG应该在它开始解析之前看一下,例如 要运行哪些组,依赖项是什么等等......所以要做的第一件事就是在testng.xml中包含整个类“