学会TestNG单元测试,看完这篇文章就够了

发布于 2021-05-09 23:51 ,所属分类:软件测试工程师学习资料


一、TestNG的优点

  1.1漂亮的HTML格式测试报告

  1.2支持并发测试

  1.3参数化测试更简单

  1.4支持输出日志

  1.5支持更多功能的注解


二、编写TestNG测试用例的步骤

  2.1使用Eclipse生成TestNG的测试程序框架

  2.2在生成的程序框架中编写测试代码逻辑

  2.3根据测试代码逻辑,插入TestNG注解标签

  2.4配置Testng.xml文件,设定测试类、测试方法、测试分组的执行信息

  2.5执行TestNG的测试程序


三、如何安装TestNG?

启动Eclipse,选择Help-》Install New Software-》点击add-》name中输入TestNG,location中输入“http://beust.com/eclipse/”,点击ok-》在弹出的install对话框中勾选TestNG复选框-》Next-》Accept-》Finish



四、testNG用例执行后如何查看执行结果?

  4.1在Console标签栏中展示测试用例的执行结果,如图:  

  4.2在工程下也会生成一个test-output文件夹,如图:  

五、TestNG常用注解:执行顺序如下

  @BeforeSuite > @BeforeTest > @BeforeMethod > @Test > @AfterMethod > @AfterTest > @AfterSuite

@BeforeSuite

表示会在当前测试集合中的任意一个测试用例开始运行前执行

@AfterSuite

表示会在当前测试集合中的所有测试程序运行结束之后执行

@BeforeTest

表示会在Test中的任意一个测试用例开始运行前执行

@AfterTest

表示会在Test中的所有测试用例运行结束后执行

@BeforeGroups

分组测试用例的任一测试用例开始运行前执行

@AfterGroups

分组测试用例的所有测试用例运行结束后执行

@BeforeClass

在当前测试类的任意一个测试用例开始运行前执行

@AfterClass

在当前测试类的所有测试用例运行结束后执行

@BeforeMethod

在每个测试方法开始运行前执行

@AfterMethod

在每个测试方法运行结束后执行

@Test

被认为是一个测试方法,既一个测试用例


六、如何创建TestNG测试集合?

  6.1测试集合:在自动化测试的执行过程中,通常会产生批量运行多个测试用例的需求,此需求称为运行测试集合(Test Suite)

  6.2 TestNG的测试用例可以是相互独立的,也可以按照特定的顺序来执行(配置TestNG.xml)

  6.3如何配置testNG.xml文件?

<suite name = "TestNG Suite"> //自定义的测试集合名称  <test name = "test1"> //自定义的测试名称    <classes> //定义被运行的测试类      <class name = "cn.gloryroad.FirstTestNGDemo" /> //测试类的路径      <class name = "cn.gloryroad.NewTest" />
    </classes>
  </test>
</suite>

七、测试用例的分组(group)

  7.1只执行一组分组配置如下:

<suite name = "TestNG Suite">
  <test name = "Grouping">
    <groups>
      <run>
        <include name = "动物" />
      </run>
    </groups>
    <classes>
      <class name = "cn.gloryroad.Grouping"/>
    </classes>
  </test>
</suite>

  7.2执行多组分组时配置如下(两种形式都可以):

<suite name = "TestNG Suite">
  <test name = "Grouping">
    <groups>
      <run>
        <include name = "动物" /> //name分组名称
<include name = "人" />
      </run>
    </groups>
    <classes>
      <class name = "cn.gloryroad.Grouping"/>
    </classes>
  </test>
</suite>

<suite name = "TestNG Suite">
<test name = "Grouping">
<groups>
       <define name = "All">
          <include name = "动物" />
          <include name = "人" />
       </define>
       <run>
          <include name = "All" />
       </run>
     </groups>

    <classes>
      <class name = "cn.gloryroad.Grouping"/>
    </classes>
  </test>
</suite>


八、依赖测试(dependsOnMethod)

  @Test(dependsOnMethod = {"方法名称"})

  被依赖的方法优先于此方法执行


九、特定顺序执行测试用例(priority)

  @Test(priority = 0/1/2/3/4/…)

  按照数字大小顺序优先执行,优先执行1,然后是2…


十、如何跳过某个测试方法(enabled = false)

  @Test(priority = 0/1… , enabled = false)

  执行结束后,在测试报告中显示跳过的测试用例数,例如skip=1


十一、数据注解

  11.1 参数化测试(@Parameters-》通过xml文件从外部给测试方法传参):<Parameter name="Type" value="chrome"/>-》参考http://www.yiibai.com/html/testng/2013/0916303.html 

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

创建测试案例类


创建一个Java测试类 ParameterizedTest1.java.


测试方法parameterTest()添加到测试类。此方法需要一个字符串作为输入参数。


添加注释@Parameters("myName") 到此方法。该参数将被传递testng.xml,在下一步我们将看到一个值。


创建Java类文件名 ParameterizedTest1.java 在 C:\ > TestNG_WORKSPACE


  importorg.testng.annotations.Parameters;

  importorg.testng.annotations.Test;


  publicclassParameterizedTest1 {

  @Test

  @Parameters("myName")

  publicvoidparameterTest(String myName) {

  System.out.println("Parameterized value is : "+ myName);

  }

  }


创建 TESTNG.XML


创建 testng.xml C:\ > TestNG_WORKSPACE 执行测试案例


  <?xml version="1.0"encoding="UTF-8"?><!DOCTYPE suite SYSTEM"http://testng.org/testng-1.0.dtd">

  <suite name="Suite1">

  <test name="test1">

  <parameter name="myName"value="manisha"/>

  <classes>

   <classname="ParameterizedTest1"/>

   </classes>

   </test>

  </suite>


我们还可以定义参数在<suite>级别。假设我们已经定义在两个<suite>和<test>级别myName,在这种情况下,常规的作用域规则适用。这意味着,任何类里面<test>标签将查看值参数定义在<test>,而testng.xml文件中的类的其余部分将看到定义在<suite>中值


编译使用javac的测试用例类。


C:\TestNG_WORKSPACE>javac ParameterizedTest1.java


现在,运行testng.xml,其中将运行parameterTest方法。TestNG的将试图找到一个命名myName的第一<test>标签的参数,然后,如果它不能找到它,它会搜索包围在的<suit>标签。


C:\TestNG_WORKSPACE>java -cp"C:\TestNG_WORKSPACE"org.testng.TestNG testng.xml


验证输出。


Parameterized value is : manisha


===============================================

Suite1

Total tests run:1, Failures:0, Skips:0

===============================================


TestNG 对testng.xml 的参数的类型指定的值会自动尝试转换。下面是支持的类型:


String


int/Integer


boolean/Boolean


byte/Byte


char/Character


double/Double


float/Float


long/Long


short/Short

  11.2数据驱动(@DataProvider)-》参考http://www.yiibai.com/html/testng/2013/0916303.html 

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

当你需要通过复杂的参数或参数需要创建从Java(复杂的对象,对象读取属性文件或数据库等..),在这种情况下,可以将参数传递使用数据提供者。数据提供者@DataProvider的批注的方法。这个注解只有一个字符串属性:它的名字。如果不提供名称,数据提供者的名称会自动默认方法的名称。数据提供者返回一个对象数组。


让我们看看下面的例子使用数据提供者。第一个例子是@DataProvider的使用Vector,String或Integer 作为参数,第二个例子是关于@DataProvider的使用对象作为参数。

实例1


在这里@DataProvider通过整数和布尔参数。

创建Java类


创建一个java类PrimeNumberChecker.java。这个类检查,如果是素数。创建这个类在 C:\ > TestNG_WORKSPACE


  publicclassPrimeNumberChecker {

  publicBoolean validate(finalInteger primeNumber) {

  for(inti =2; i < (primeNumber /2); i++) {

  if(primeNumber % i ==0) {

  returnfalse;

  }

  }

  returntrue;

  }

  }


创建测试案例类


创建一个Java测试类 ParamTestWithDataProvider1.java.


定义方法primeNumbers(),其定义为DataProvider 使用注释。此方法返回的对象数组的数组。


测试方法testPrimeNumberChecker()添加到测试类中。此方法需要一个整数和布尔值作为输入参数。这个方法验证,如果传递的参数是一个素数。


添加注释@Test(dataProvider ="test1") 到此方法。dataProvider的属性被映射到"test1".


创建Java类文件名ParamTestWithDataProvider1.java 在 C:\ > TestNG_WORKSPACE


  importorg.testng.Assert;

  importorg.testng.annotations.BeforeMethod;

  importorg.testng.annotations.DataProvider;

  importorg.testng.annotations.Test;


  publicclassParamTestWithDataProvider1 {

  privatePrimeNumberChecker primeNumberChecker;

  @BeforeMethod

  publicvoidinitialize() {

   primeNumberChecker =newPrimeNumberChecker();

   }


  @DataProvider(name ="test1")

  publicstaticObject[][] primeNumbers() {

  returnnewObject[][] { {2,true}, {6,false}, {19,true},

     {22,false}, {23,true} };

  }


  // This test will run 4 times since we have 5 parameters defined

  @Test(dataProvider ="test1")

  publicvoidtestPrimeNumberChecker(Integer inputNumber,

  Boolean expectedResult) {

  System.out.println(inputNumber +" "+ expectedResult);

  Assert.assertEquals(expectedResult,

  primeNumberChecker.validate(inputNumber));

  }

  }


创建 TESTNG.XML


创建 testng.xml C:\ > TestNG_WORKSPACE 执行测试案例。


  <?xml version="1.0"encoding="UTF-8"?><!DOCTYPE suite SYSTEM"http://testng.org/testng-1.0.dtd">

  <suite name="Suite1">

   <test name="test1">

  <classes>

   <classname="ParamTestWithDataProvider1"/>

   </classes>

   </test>

  </suite>


编译使用javac的测试用例类。


C:\TestNG_WORKSPACE>.javac ParamTestWithDataProvider1.java PrimeNumberChecker.java


运行testng.xml.


C:\TestNG_WORKSPACE>java -cp"C:\TestNG_WORKSPACE"org.testng.TestNG testng.xml


验证输出。


2true

6false

19true

22false

23true


===============================================

Suite1

Total tests run:5, Failures:0, Skips:0

===============================================


实例2


在这里,@DataProvider传递对象作为参数。

创建Java类


创建一个Java类 Bean.java, 对象带有 get/set 方法, 在 C:\ > TestNG_WORKSPACE.


publicclassBean {

privateString val;

privateinti;

publicBean(String val,inti){

this.val=val;

this.i=i;

}

publicString getVal() {

returnval;

}

publicvoidsetVal(String val) {

this.val = val;

}

publicintgetI() {

returni;

}

publicvoidsetI(inti) {

this.i = i;

}

}


创建测试案例类


创建一个Java测试类 ParamTestWithDataProvider2.java.


定义方法primeNumbers(),其定义为DataProvider使用注释。此方法返回的对象数组的数组。


添加测试类中测试方法TestMethod()。此方法需要对象的bean作为参数。


添加注释@Test(dataProvider ="test1") 到此方法. dataProvider 属性被映射到"test1".


创建Java类文件名 ParamTestWithDataProvider2.java 在 C:\ > TestNG_WORKSPACE


  importorg.testng.annotations.DataProvider;

  importorg.testng.annotations.Test;


  publicclassParamTestWithDataProvider2 {

  @DataProvider(name ="test1")

  publicstaticObject[][] primeNumbers() {

  returnnewObject[][] { {newBean("hi I am the bean",111) } };

   }


  @Test(dataProvider ="test1")

  publicvoidtestMethod(Bean myBean) {

   System.out.println(myBean.getVal() +" "+ myBean.getI());

   }

  }


创建 TESTNG.XML


创建一个文件 testng.xml C:\ > TestNG_WORKSPACE 来执行测试用例.


  <?xml version="1.0"encoding="UTF-8"?><!DOCTYPE suite SYSTEM"http://testng.org/testng-1.0.dtd">

  <suite name="Suite1">

  <test name="test1">

  <classes>

   <classname="ParamTestWithDataProvider2"/>

   </classes>

   </test>

  </suite>


编译使用javac的测试用例类。


C:\TestNG_WORKSPACE>javac ParamTestWithDataProvider2.java Bean.java


运行 testng.xml.


C:\TestNG_WORKSPACE>java -cp"C:\TestNG_WORKSPACE"org.testng.TestNG testng.xml


验证输出。


hi I am the bean111


===============================================

Suite1

Total tests run:1, Failures:0, Skips:0

===============================================


十二、测试报告中自定义日志(Reporter.log(“输入自定义内容”)),例如:

  @Test(groups = {"人"})

  public void student(){

    System.out.println("学生方法被调用");

    Reporter.log("学生方法自定义日志");

  }

学习安排上!

码个面试题题考考你

你对加班怎么看?

评论区写出你的答案!


不想错过就把我们设为星标吧!

第一步:点击顶部蓝字“自动化软件测试”,进入gongzhong号主页

第二步:点击右上角“···”

第三步:点击“设为星标”

转载自:http://navo.top/EVfymi

“在看”点一点

捕捉温柔

相关资源