Java--TestNG
TestNG类的配置信息:
@BeforeSuite:在此套件中的所有测试运行之前,将运行带注释的方法。
@AfterSuite:在此套件中的所有测试运行后,将运行带注释的方法。
@BeforeTest:在运行属于<test>标记内的类的任何测试方法之前,将运行带注释的方法。
@AfterTest:在运行了属于<test>标记内的类的所有测试方法之后,将运行带注释的方法。
@BeforeGroups:此配置方法之前将运行的组列表。保证在调用属于任何这些组的第一个测试方法之前不久运行此方法。
@AfterGroups:此配置方法将在之后运行的组列表。保证在调用属于任何这些组的最后一个测试方法后不久运行此方法。
@BeforeClass:在调用当前类中的第一个测试方法之前,将运行带注释的方法。
@AfterClass:在运行当前类中的所有测试方法之后,将运行带注释的方法。
@BeforeMethod:带注释的方法将在每个测试方法之前运行。
@AfterMethod:带注释的方法将在每个测试方法之后运行。
TestNG类的超类中的注释行为:
在这种情况下,TestNG保证“@Before”方法以继承顺序执行(首先是最高超类,然后是继承链),而“@After”方法则按相反的顺序执行(向上继承链)。
TestNG.xml文件样例:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 3 <!-- @BeforeSuite --> 4 <suite name="All Test Suite"> 5 <test verbose="1" preserve-order="true" name="Z:\\project\\XunitDemo"> 6 <!-- @BeforeGroups --> 7 <groups> 8 <dependencies> 9 <group name="group1" depends-on="" > 10 <classes> 11 <class name="QFDemo.LoginTest"> 12 <methods> 13 <parameter name="username" value="lisi"></parameter> 14 <!-- 通过方法名来运行 --> 15 <include name="testUserLogin"></include> 16 <exclude name="testUserLogin1"></exclude> 17 </methods> 18 </class> 19 <!-- 通过类名来运行 --> 20 <class name="QFDemo.DataProviderParameterTest"></class> 21 </classes> 22 </group> 23 <!-- 通过groupName来运行 --> 24 <group name="group2" depends-on=""> 25 <run> 26 <!-- 测试方法上可以定义groups = {"",""} --> 27 <include name="1group1"></include> 28 <exclude name="1group2"></exclude> 29 </run> 30 </group> 31 </dependencies> 32 </groups> 33 </test> 34 </suite> 35 <!-- @AfterSuite -->
下表列出了所有的<suite>可接受合法属性。
属性 | 描述 |
---|---|
name | 此套件的名称。这是一个强制性的属性。 |
verbose | 这个运行级别或冗长。一般verbose=从0到9的数,数越大表明testng的日志越详细,一般verbose=2 |
parallel | 由TestNG 运行不同的线程来运行此套件。 |
thread-count | 使用的线程数,如果启用并行模式(忽略其他方式)。 |
annotations | 在测试中使用注释的类型。 |
time-out | 默认的超时时间,将用于本次测试中发现的所有测试方法。 |
- parallel =“methods”:TestNG将在不同的线程中运行所有测试方法。依赖方法也将在单独的线程中运行,但它们将遵循您指定的顺序。
- parallel =“tests”:TestNG将在同一个线程中运行相同<test>标记中的所有方法,但每个<test>标记将位于一个单独的线程中。这允许您在同一个<test>中对所有非线程安全的类进行分组,并保证它们将在同一个线程中运行,同时利用TestNG使用尽可能多的线程来运行测试。
- parallel =“classes”:TestNG将在同一个线程中运行同一个类中的所有方法,但每个类将在一个单独的线程中运行。
- parallel =“instances”:TestNG将在同一个线程中运行同一实例中的所有方法,但两个不同实例上的两个方法将在不同的线程中运行。
带注释的依赖关系:
可以使用属性dependsOnMethods或dependsOnGroups(接受正则表达式作为参数),对发现的@Test注解。
硬依赖:您依赖的所有方法必须运行并成功运行。如果您的依赖项中至少发生一次故障,则不会在报告中调用并将其标记为SKIP。
软依赖:您将始终在您依赖的方法之后运行,即使其中一些方法失败了。当您只是想确保您的测试方法按特定顺序运行时,这很有用,但它们的成功并不真正取决于其他人的成功。通过在@Test注释中添加“alwaysRun = true”来获得软依赖关系。
类级别注释:
类级@Test注释的作用是使该类的所有公共方法成为测试方法,即使它们没有注释。如果要添加某些属性,仍可以在方法上重复@Test注释。
忽略测试(使用注解@Ignore):
- In a class
- In a particular package
- In a package and all of its child packages
支持YAML文件作为指定套件文件:
<!-- XML文件 --> <suite name="SingleSuite" verbose="2" thread-count="4"> <parameter name="n" value="42" /> <test name="Regression2"> <groups> <run> <exclude name="broken" /> </run> </groups> <classes> <class name="test.listeners.ResultEndMillisTest" /> </classes> </test> </suite> <!-- 对应YAML文件 --> name: SingleSuite threadCount: 4 parameters: { n: 42 } tests: - name: Regression2 parameters: { count: 10 } excludedGroups: [ broken ] classes: - test.listeners.ResultEndMillisTest
数据驱动(参数类型可以任意对象:List、Map、String等):
1 package QFDemo;
2
3 import org.testng.annotations.BeforeGroups;
4 import org.testng.annotations.DataProvider;
5 import org.testng.annotations.Test;
6
7 import java.util.ArrayList;
8 import java.util.List;
9
10 public class DataProviderParameterTest {
11
12 @BeforeGroups(groups = "group10")
13 public void groupsSetUp(){
14 System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!groups!!!!!!!!!!!!!!!!!!!!!!!");
15 }
16
17 @Test(parameters = {"user","password"})
18 public void testTwo(String user, String password){
19 System.out.println("user is : " + user + " password is : " + password);
20 }
21
22 @Test(dataProvider = "listString", groups = "group10")
23 public void testOne(List<String> stringList){
24 for (String s:stringList){
25 System.out.println(s);
26 }
27 }
28
29 @DataProvider(name = "listString")
30 public Object[][] provideP(){
31 List<String> listOne = new ArrayList<String>();
32 listOne.add("a");
33 listOne.add("b");
34 listOne.add("over");
35 return new Object[][] {{listOne}};
36 }
37 }
详情请至:https://testng.org/doc/documentation-main.html#introduction