TestNG 依赖于不同类的方法
Posted
技术标签:
【中文标题】TestNG 依赖于不同类的方法【英文标题】:TestNG dependsOnMethods from different class 【发布时间】:2011-12-03 06:37:46 【问题描述】:@Test
注释的dependsOnMethods
属性在要依赖的测试与具有此注释的测试属于同一类时正常工作。但是如果要测试的方法和依赖的方法在不同的类中,则不起作用。示例如下:
class c1
@Test
public void verifyConfig()
//verify some test config parameters
class c2
@Test(dependsOnMethods="c1.verifyConfig")
public void dotest()
//Actual test
有没有办法绕过这个限制?一种简单的方法是在class c2
中创建一个调用c1.verifyConfig()
的测试。但这将是太多的重复。
【问题讨论】:
【参考方案1】:两种解决方案: 1.使用dependsOnGroups和继承
import static org.testng.Assert.fail;
import org.testng.annotations.Test;
public class PTest1
@Test(groups = "A")
public void test11()
System.out.println("test11");
fail();
import org.testng.annotations.Test;
public class PTest2 extends PTest1
@Test(groups = "B", dependsOnGroups = "A")
public void test21()
System.out.println("test21");
<suite name="priority" verbose="1">
<groups>
<run>
<include name ="B"/>
</run>
</groups>
<test name="pri2">
<classes>
<class name="priority.PTest2"/>
</classes>
</test>
<test name="pri1">
<classes>
<class name="priority.PTest1"/>
</classes>
</test>
</suite>
使用编程:
import static org.testng.Assert.fail;
import org.testng.annotations.Test;
public class PTest3
@Test
public void test31()
System.out.println("test31");
fail();
import org.testng.IInvokedMethod;
import org.testng.ITestContext;
import org.testng.SkipException;
import org.testng.annotations.Test;
public class PTest4
@Test
public void test41(ITestContext context)
for (IInvokedMethod iInvokedMethod : context.getSuite().getAllInvokedMethods())
if (iInvokedMethod.getTestMethod().getMethodName().equals("test31")
&& !iInvokedMethod.getTestResult().isSuccess())
throw new SkipException("test31 is not sucessful!");
System.out.println("test41");
<suite name="priority" verbose="1">
<test name="pri3">
<classes>
<class name="priority.PTest3"/>
</classes>
</test>
<test name="pri4">
<classes>
<class name="priority.PTest4"/>
</classes>
</test>
</suite>
【讨论】:
【参考方案2】:您可以在 TestNG @Test
注释中使用 groups
和 dependsOnGroups
,如之前的答案中所述。
但是,两个类需要在同一个<test>
下。
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite" verbose="1" >
<test name="Test" >
<classes>
<class name="c1" />
<class name="c2" />
</classes>
</test>
</suite>
运行测试套件时会出现以下异常。
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1" verbose="1" >
<test name="Test1" >
<classes>
<class name="c1" />
</classes>
</test>
<test name="Test2">
<classes>
<class name="c2" />
</classes>
</test>
</suite>
【讨论】:
【参考方案3】:DependsOnMethods 不能从不同的类中使用,为了解决这个问题,我们可以使用dependsOnGroups;
更改代码;
1。依赖组类;
@Test(groups="先决条件" )
public void M1()
2。调用dependOnGroups的类;
@Test(dependsOnGroups="prerequisites")
public void M2()
3。 xml
<groups>
<run>
<include name ="prerequisites"/>
</run>
</groups>
【讨论】:
【参考方案4】:将方法放在group
中并使用dependsOnGroups
。
class c1
@Test(groups="c1.verifyConfig")
public void verifyConfig()
//verify some test config parameters
class c2
@Test(dependsOnGroups="c1.verifyConfig")
public void dotest()
//Actual test
建议在@Before
* 中验证配置,如果出现问题则抛出,这样测试就不会运行。这样,测试就可以专注于测试。
class c2
@BeforeClass
public static void verifyConfig()
//verify some test config parameters
//Usually just throw exceptions
//Assert statements will work
@Test
public void dotest()
//Actual test
【讨论】:
这在运行类文件时工作正常,同时通过 testing.xml 文件运行它得到错误 DependencyMap::Method "LoanApprovalTest.testLoanApprova(java.util.Hashtable)[pri:0, instance :com.zions.release1.Sanity.LoanTestCases.LoanApprovalTest@3884b2]" 依赖于不存在的组 "CreateLoanAccountTest.testCreateLoanAccount" @ArpanSaini 两个类都需要在同一个测试下。 组名(c1)中需要写类名吗?如果我想将不同类别的测试方法归为一组怎么办?以上是关于TestNG 依赖于不同类的方法的主要内容,如果未能解决你的问题,请参考以下文章
TestNg依赖配置基础用法(单一方法依赖)------TestNg依赖详解
TestNg依赖高级用法之强制依赖与顺序依赖------TestNg依赖详解
如何跨具有TestNG测试的不同类访问dependsOnMethod或dependsOnGroup?