| |
|
开发:
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
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 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |