TestNG测试框架基础知识总结

文章目录

  • 介绍
  • 1、为什么需要测试框架?
  • 2、pom.xml 引入依赖
  • 3、层级关系
  • 4、常用注解
    • (1)@Test
    • (2)@BeforeMethod、@AfterMethod
    • (3)@BeforeGroup、@AfterGroup
    • (4)@BeforeTest、@AfterTest
    • (5)@BeforeSuite、@AfterSuite
  • 5、断言测试
    • (1)硬断言
    • (2)软断言
  • 6、参数化测试
    • (1)testNg传递实参、@Parameter传递形参
    • (2)@DataProvider 方法参数
  • 7、按顺序执行用例

介绍

TestNg 是 test next generation 意为下一代的测试框架,在JUnit基础之上,变得更加灵活

1、为什么需要测试框架?


(1)批量进行测试用例管理维护以及调度执行,能够写出用例后按照设想的逻辑执行
(2)生成测试报告,显示测试数据

2、pom.xml 引入依赖

<dependencies>
     <dependency>
         <groupId>org.testnggroupId>
         <artifactId>testngartifactId>
         <version>7.5version>
     dependency>
 dependencies>

3、层级关系


按照层级关系进行划分的,主要是可以在一个 testNg.xml的文件里面编写执行顺序,标签的层级关系是

suite -> test -> group\class -> method


<suite name=">
        "">
           <group>. = 声明测试分组的类别
              <run>
                    <include name="">. 表示包含的组别,执行testNg.xml测试会执行的组别
                    <exclude name="">  表示不包含的组别
              run>
           group>
                        
           <class name="">. ==声明测试的类的全限定名
                                                 method在class里面
    test>
suite>

4、常用注解

(1)@Test

在执行的测试方法、类前面写,表示可执行,在注解里面有一个属性

------分组测试
group({“”,“”}),表示可以分组,在testNg声明,还有标签并且执行后,会按照指定的组进行执行 -----分组测试

-----忽略测试
enable=“true”, 属性表示 这个用例是否要执行,表示忽略的效果,jUnit中的 @Ignore
有些时候用例只设计了一般可能还未设计好,我们在执行整个测试类的时候删掉又不合适,所以可以用忽略用例这种方法,把用例忽略掉即可。

-------异常测试
expectedExceptions= ArithmeticException.class ------预期异常测试,遇到异常不会终止,能够捕捉到,异常之后的语句不再执行

------超时测试
timeout=1000, 毫秒,常用于性能测试,如果超出时间范围那么用例失败。


(2)@BeforeMethod、@AfterMethod

表示每个方法用例在执行之前都会执行一下 setUp前置、tearDown后置方法,类似于 jUnit的 @BeforeEach、@AfterEach

@BeforeClass
@AfterClass
在一个测试类执行之前 会执行一下 前置、后置方法,类似于 jUnit 的 @BeforeAll、@AfterAll

(3)@BeforeGroup、@AfterGroup

在执行组的第一个方法执行之前运行,前置方法和后置方法

(4)@BeforeTest、@AfterTest

在标签之前会执行前置、后置方法

(5)@BeforeSuite、@AfterSuite

在标签之前会执行前置、后置方法


5、断言测试


(1)硬断言


Assert类下的静态方法,属于硬断言,硬断言就是,运行到断言失败,后面不会执行
assertEquals(“实际值”,“预期值”,“提示信息”)
assertNotEquals ,判断不相等
assertNotNull,判断不为null
assertNull,判断为null
assertFalse,判断为 false
assertTrue,判断为 true

(2)软断言


需要创建一个 SoftAssert 实例对象,再调用实例方法 assertEquals、assertTrue 这些断言方法,有以下特点:

1、即使一个断言失败,后续也会继续执行后面的语句和断言

2、一个用例里面有多个断言、失败了其中一个、也不影响其他

3、在用例中的最后一个断言方法之后一定需要加一个 assertAll方法

QA:为什么需要必须加 assertAll 方法呢?


这个原本我也不知道为什么,后来试了一下,这是框架对这个断言执行的一个规则。


如果不加的话,softAssert 软断言都不会执行,加了才会执行softAssert的断言方法。

6、参数化测试


如何给测试用例方法穿参呢?

(1)testNg传递实参、@Parameter传递形参


在用例上面使用 @parameters 声明形参,方法里面写参数

@Test
@Parameters({"param1","param2"})  // 注解声明形参
public void testcase1(String param1,String param2){
    
}

<suite name="Suite" >

  <test name="Test">
                               // <parameter> 标签传递实参
    <parameter name="param1" value="1011111" />
    <parameter name="param2" value="10" />
    
        <classes>
              <class name="com.demo.test.testng.TestCase1"/>
        classes>

  test> 

suite> 

(2)@DataProvider 方法参数


@DataProvider注解,使用 Object[][] 接收返回值作为参数,方法上面使用 @Test 的 dataProvider进行接收即可


public class Test{

    @DataProvider(name="provideNumbers")
        public Object[][] provideData(){
        return new Object[][]{
            {10,20},{30,40},{2,3}
                };
    }

     
    @Test(dataProvider="provideNumbers")
    public void test(int num1,int num2){
            Assert.assertEquals(num1,num2);
        }

}

类似于jUnit的 @Paramerts 修饰方法,Collection类型接受传递列表参数Arrays.asList,构造方法接收参数

7、按顺序执行用例


在jUnit中按照顺序执行用例有一个注解 @Order(1),按照标注的顺序从小到大执行


在testNg中,没有这样的注解,怎样控制顺序?


(1)在test标签里有一个 preserve-Order 属性, 可以控制 class 执行的顺序,class 标签我们按照顺序写就行了,但是class 里面的方法是没有顺序的


DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Preserve order test runs">
  <test name="Regression 1" preserve-order="true">
    <classes>
      <class name="com.pack.preserve.ClassTwo"/>
      <class name="com.pack.preserve.ClassThree"/>
      <class name="com.pack.preserve.ClassOne"/>
    classes>
  test>
suite>

(2)如果想让方法有序,那么需要class里面 methods写上 ,这样方法会按照顺序执行


<suite name="Preserve order test runs">
  <test name="Regression 1" preserve-order="true">
    <classes>
      <class name="com.pack.preserve.ClassOne">
          <methods>
              <include name="BTest" />
              <include name="AMethod" />
          methods>
      class>
    classes>
  test>
suite>

你可能感兴趣的:(测试)