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 -->
View Code

 

下表列出了所有的<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将在同一个线程中运行同一实例中的所有方法,但两个不同实例上的两个方法将在不同的线程中运行。

 

带注释的依赖关系:

  可以使用属性dependsOnMethodsdependsOnGroups(接受正则表达式作为参数),对发现的@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
View Code

 

数据驱动(参数类型可以任意对象: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

 

posted on 2018-12-23 23:27  我要的明天  阅读(227)  评论(0编辑  收藏  举报

导航