IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> TestNG 最全使用指南 -> 正文阅读

[开发测试]TestNG 最全使用指南

TestNG介绍

一、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被认为是一个测试方法,既一个测试用例

SeleniumAbstractTest.class

public abstract class SeleniumAbstractTest {
?
  @BeforeSuite
  public void beforeSuite() {
 ?  System.out.println("BeforeSuite");
  }
?
  @BeforeTest
  public void beforeTest() {
 ?  System.out.println("BeforeTest");
  }
?
  @BeforeClass
  public void beforeClass() {
 ?  System.out.println("BeforeClass");
  }
?
  @BeforeMethod
  public void beforeMethod() {
 ?  System.out.println("BeforeMethod");
  }
?
  @AfterMethod
  public void afterMethod() {
 ?  System.out.println("AfterMethod");
  }
?
  @AfterClass
  public void afterClass() {
 ?  System.out.println("AfterClass");
  }
?
  @AfterTest
  public void afterTest() {
 ?  System.out.println("AfterTest");
  }
?
  @AfterSuite
  public void afterSuite() {
 ?  System.out.println("AfterSuite");
  }
?
}

MyTestClass1.class

public class MyTestClass1 extends SeleniumAbstractTest {
?
  @Test
  public void myTestMethod1() {
 ?  System.out.println("myTestMethod1");
  }
?
  @Test
  public void myTestMethod2() {
 ?  System.out.println("myTestMethod2");
  }
}

MyTestClass2.class

public class MyTestClass2 extends SeleniumAbstractTest {
?
  @Test
  public void myTestMethod3() {
 ?  System.out.println("myTestMethod3");
  }
?
  @Test
  public void myTestMethod4() {
 ?  System.out.println("myTestMethod4");
  }
}

如果您具有以下测试套件…

<suite name="Suite">
  <test name="Test1" >
 ?  <classes>
 ? ? ? <class name="MyTestClass2" />
 ?  </classes>
  </test>
?
  <test name="Test2">
 ?  <classes>
 ? ?  <class name="MyTestClass1"/>
 ? ?  <class name="MyTestClass2"/>
 ?  </classes>
  </test>
</suite>

…那么输出[缩进以便于阅读]将是

BeforeSuite
' ? BeforeTest
' ? ' ? BeforeClass
' ? ' ? ' ? BeforeMethod
' ? ' ? ' ? ' ? myTestMethod3
' ? ' ? ' ? AfterMethod
' ? ' ? ' ? BeforeMethod
' ? ' ? ' ? ' ? myTestMethod4
' ? ' ? ' ? AfterMethod
' ? ' ? AfterClass
' ? AfterTest
' ? BeforeTest
' ? ' ? BeforeClass
' ? ' ? ' ? BeforeMethod
' ? ' ? ' ? ' ? myTestMethod1
' ? ' ? ' ? AfterMethod
' ? ' ? ' ? BeforeMethod
' ? ' ? ' ? ' ? myTestMethod2
' ? ' ? ' ? AfterMethod
' ? ' ? AfterClass
' ? ' ? BeforeClass
' ? ' ? ' ? BeforeMethod
' ? ' ? ' ? ' ? myTestMethod3
' ? ' ? ' ? AfterMethod
' ? ' ? ' ? BeforeMethod
' ? ' ? ' ? ' ? myTestMethod4
' ? ' ? ' ? AfterMethod
' ? ' ? AfterClass
' ? AfterTest
AfterSuite

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

颗粒度: suite > group>test

  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 

创建测试案例类
?
 ?  创建一个Java测试类 ParameterizedTest1.java.
?
 ?  测试方法parameterTest()添加到测试类。此方法需要一个字符串作为输入参数。
?
 ?  添加注释 @Parameters("myName") 到此方法。该参数将被传递testng.xml,在下一步我们将看到一个值。
?
创建Java类文件名 ParameterizedTest1.java 在 C:\ > TestNG_WORKSPACE
?
  import org.testng.annotations.Parameters;
  import org.testng.annotations.Test;
?
  public class ParameterizedTest1 {
 ?    @Test
 ?    @Parameters("myName")
 ?    public void parameterTest(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>
 ? ?    ? <class name="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
?
?

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

当你需要通过复杂的参数或参数需要创建从Java(复杂的对象,对象读取属性文件或数据库等..),在这种情况下,可以将参数传递使用数据提供者。数据提供者@DataProvider的批注的方法。这个注解只有一个字符串属性:它的名字。如果不提供名称,数据提供者的名称会自动默认方法的名称。数据提供者返回一个对象数组。
?
让我们看看下面的例子使用数据提供者。第一个例子是@DataProvider的使用Vector,String或Integer 作为参数,第二个例子是关于@DataProvider 的使用对象作为参数。
实例 1
?
在这里 @DataProvider 通过整数和布尔参数。
创建Java类
?
创建一个java类PrimeNumberChecker.java。这个类检查,如果是素数。创建这个类在 C:\ > TestNG_WORKSPACE
?
  public class PrimeNumberChecker {
 ?    public Boolean validate(final Integer primeNumber) {
 ? ?      for (int i = 2; i < (primeNumber / 2); i++) {
 ? ? ?     ?  if (primeNumber % i == 0) {
 ? ? ? ?     ? ?  return false;
 ? ? ? ? ? ?   }
 ? ? ?    }
 ? ? ?    return true;
 ?    }
  }
?
创建测试案例类
?
 ?  创建一个Java测试类 ParamTestWithDataProvider1.java.
?
 ?  定义方法primeNumbers(),其定义为DataProvider 使用注释。此方法返回的对象数组的数组。
?
 ?  测试方法testPrimeNumberChecker()添加到测试类中。此方法需要一个整数和布尔值作为输入参数。这个方法验证,如果传递的参数是一个素数。
?
 ?  添加注释 @Test(dataProvider = "test1") 到此方法。dataProvider的属性被映射到"test1".
?
创建Java类文件名ParamTestWithDataProvider1.java 在 C:\ > TestNG_WORKSPACE
?
  import org.testng.Assert;
  import org.testng.annotations.BeforeMethod;
  import org.testng.annotations.DataProvider;
  import org.testng.annotations.Test;
?
  public class ParamTestWithDataProvider1 {
      private PrimeNumberChecker primeNumberChecker;
 ?    @BeforeMethod
 ?    public void initialize() {
 ? ? ?    primeNumberChecker = new PrimeNumberChecker();
 ?    }
?
 ?    @DataProvider(name = "test1")
 ?    public static Object[][] primeNumbers() {
 ? ? ?    return new Object[][] { { 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")
 ?    public void testPrimeNumberChecker(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>
 ?     ?  <class name="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
?
验证输出。
?
2 true
6 false
19 true
22 false
23 true
?
===============================================
Suite1
Total tests run: 5, Failures: 0, Skips: 0
===============================================
?
实例 2
?
在这里,@DataProvider 传递对象作为参数。
创建Java类
?
创建一个Java类 Bean.java, 对象带有 get/set 方法, 在 C:\ > TestNG_WORKSPACE.
?
public class Bean {
 ?  private String val;
 ?  private int i;
 ?  public Bean(String val, int i){
 ? ? ?  this.val=val;
 ? ? ?  this.i=i;
 ?  }
 ?  public String getVal() {
 ?  return val;
 ?  }
 ?  public void setVal(String val) {
 ?  this.val = val;
 ?  }
 ?  public int getI() {
 ?  return i;
 ?  }
 ?  public void setI(int i) {
 ?  this.i = i;
 ?  }
}
?
创建测试案例类
?
 ?  创建一个Java测试类 ParamTestWithDataProvider2.java.
?
 ?  定义方法primeNumbers(),其定义为DataProvider使用注释。此方法返回的对象数组的数组。
?
 ?  添加测试类中测试方法TestMethod()。此方法需要对象的bean作为参数。
?
 ?  添加注释 @Test(dataProvider = "test1") 到此方法.  dataProvider 属性被映射到 "test1".
?
创建Java类文件名 ParamTestWithDataProvider2.java 在 C:\ > TestNG_WORKSPACE
?
  import org.testng.annotations.DataProvider;
  import org.testng.annotations.Test;
?
  public class ParamTestWithDataProvider2 {
 ?    @DataProvider(name = "test1")
    ? public static Object[][] primeNumbers() {
 ? ?    ? return new Object[][] { { new Bean("hi I am the bean", 111) } };
 ?    }
?
 ?    @Test(dataProvider = "test1")
 ?    public void testMethod(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>
 ? ?    ? <class name="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 bean 111
?
===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================

十二、测试报告中自定义日志

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

  @Test(groups = {"人"})

  @Test(groups = {"人"})

  public void student(){

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

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

  }

图片

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:40:46  更:2021-09-02 11:42:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 23:25:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码