TestNG基本注解(一)
TestNG基本注解
| 注解 | 描述 |
|---|---|
| @BeforeSuite | 注解的方法将只运行一次,运行所有测试前此套件中。 |
| @AfterSuite | 注解的方法将只运行一次此套件中的所有测试都运行之后。 |
| @BeforeClass | 注解的方法将只运行一次先行先试在当前类中的方法调用。 |
| @AfterClass | 注解的方法将只运行一次后已经运行在当前类中的所有测试方法。 |
| @BeforeTest | 注解的方法将被运行之前的任何测试方法属于内部类的 <test>标签的运行。 |
| @AfterTest | 注解的方法将被运行后,所有的测试方法,属于内部类的<test>标签的运行。 |
| @BeforeGroups | 组的列表,这种配置方法将之前运行。此方法是保证在运行属于任何这些组第一个测试方法,该方法被调用。 |
| @AfterGroups | 组的名单,这种配置方法后,将运行。此方法是保证运行后不久,最后的测试方法,该方法属于任何这些组被调用。 |
| @BeforeMethod | 注解的方法将每个测试方法之前运行。 |
| @AfterMethod | 被注释的方法将被运行后,每个测试方法。 |
| @DataProvider |
标志着一个方法,提供数据的一个测试方法。注解的方法必须返回一个Object[] [],其中每个对象[]的测试方法的参数列表中可以分配。
该@Test 方法,希望从这个DataProvider的接收数据,需要使用一个dataProvider名称等于这个注解的名字。 |
| @Factory | 作为一个工厂,返回TestNG的测试类的对象将被用于标记的方法。该方法必须返回Object[]。 |
| @Listeners | 定义一个测试类的监听器。 |
| @Parameters | 介绍如何将参数传递给@Test方法。 |
| @Test | 标记一个类或方法作为测试的一部分。 |
1、作用域的不一样划分出了各种不同的标签:
一个套件(suite)包含多个测试(test)
一个测试(test)包含多个类(class)
一个测试(test)包含多个组(group)
一个类(class)包含多个方法(method)
2、定义组
在上述基本标签后均可以定义他们所属的组,定义如下:
@BeforeGroups(groups="test01")
public void group(){
System.out.println("I am a group!");
}
group方法属于test01这个组,只有当执行test01这个组时group方法才能执行。
每个防范可以属于多个组,定义如下:
@BeforeClass(groups={"test01","test02"})
public void classs(){
System.out.println("tAutoTest01-BeforeClass");
}
当执行test01和test02时该方法都会执行。
3、参数化
(1)、xml参数传递
代码定义:
@Test
@Parameters("myName")//可同时传递多个参数如:@Parameters({"myName","myName01"})
public void test01(String myName) {
System.out.println(myName);
}
xml定义:
<suite name="Suite" parallel="none">
<parameter name="myName" value="YinTing"></parameter>
<test name="Test">
<classes>
<class name="com.sword.test.tAutoTest01"></class>
</classes>
</test>
<test name="Test01">
<classes>
<class name="com.sword.test.tAutoTest"></class> <!-- 该值覆盖了前面定义的YinTing-->
</classes>
</test>
</suite> <!-- Suite -->
(2)、代码动态传递(数据提供者)
代码定义:
@DataProvider(name="TestData")//定义数据的提供者
public Object[][] data() {
return new Object[][]{{"YinTing",26},{"YangYi",24}};
}
@Test(dataProvider="TestData")//指定数据提供者
public void test01(String name,Integer age){
System.out.println("姓名:"+name+" "+"年龄:"+age);
}
4、工厂
策略:一般我们会在标有@Factory注解的方法中对测试类进行调用,这时TestNg会自动调用测试类中带有@Test注解的方法
工厂类代码定义:
package com.sword.test;
import org.testng.annotations.Factory;
public class tAutoFactory {
@Factory
public Object[] test01(){
Object test01[]=new Object[10];
for(int i=00;i<10;i++){
test01[i]=new tAutoTest01(i);
}
return test01;
}
}
Test类代码定义:
package com.sword.test;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class tAutoTest01 {
public int i=0;
public tAutoTest01(int i){
this.i=i;
}
@DataProvider(name="TestData")
public Object[][] data() {
return new Object[][]{{"YinTing",26},{"YangYi",24}};
}
@Test(dataProvider="TestData")
public void test01(String name,Integer age){
System.out.println("姓名:"+name+" "+"年龄:"+age);
System.out.println("-------------------"+this.i+"--------------------");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
XML定义:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="none">
<parameter name="myName" value="YinTing"></parameter>
<test name="Test">
<classes>
<class name="com.sword.test.tAutoFactory"></class>
</classes>
</test>
</suite> <!-- Suite -->
执行结果:
姓名:YinTing 年龄:26
-------------------7--------------------
姓名:YangYi 年龄:24
-------------------7--------------------
姓名:YinTing 年龄:26
-------------------5--------------------
姓名:YangYi 年龄:24
-------------------5--------------------
姓名:YinTing 年龄:26
-------------------2--------------------
姓名:YangYi 年龄:24
-------------------2--------------------
姓名:YinTing 年龄:26
-------------------4--------------------
姓名:YangYi 年龄:24
-------------------4--------------------
姓名:YinTing 年龄:26
-------------------3--------------------
姓名:YangYi 年龄:24
-------------------3--------------------
姓名:YinTing 年龄:26
-------------------6--------------------
姓名:YangYi 年龄:24
-------------------6--------------------
姓名:YinTing 年龄:26
-------------------8--------------------
姓名:YangYi 年龄:24
-------------------8--------------------
姓名:YinTing 年龄:26
-------------------1--------------------
姓名:YangYi 年龄:24
-------------------1--------------------
姓名:YinTing 年龄:26
-------------------0--------------------
姓名:YangYi 年龄:24
-------------------0--------------------
姓名:YinTing 年龄:26
-------------------9--------------------
姓名:YangYi 年龄:24
-------------------9--------------------
===============================================
Suite
Total tests run: 20, Failures: 0, Skips: 0
===============================================
5、监听器
该地址讲解的相当详细:http://www.ibm.com/developerworks/cn/opensource/os-cn-testinglistener/index.html
6、顺序执行测试&依赖测试&忽略测试
(1)、顺序执行测试
xml定义:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="none">
<parameter name="myName" value="YinTing"></parameter>
<test name="Test" preserve-order="true"><!-- 顺序执行测试中的测试方法 -->
<classes>
<class name="com.sword.test.tAutoFactory"></class>
</classes>
</test>
</suite> <!-- Suite -->
(2)、依赖测试
代码定义:
package com.sword.test;
import org.testng.annotations.Test;
public class tAutoTest {
@Test
public void test02(){
System.out.println("I am test02!");
throw new RuntimeException();
}
@Test(dependsOnMethods="test02")//test01依赖test02的成功执行,才能执行。当test02抛出异常不能正常执行后,test01已不能执行。
public void test01(){
System.out.println("YinTing");
}
}
执行报告:
I am test02!
FAILED: test02
java.lang.RuntimeException
at com.sword.test.tAutoTest.test02(tAutoTest.java:10)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:767)
at org.testng.TestRunner.run(TestRunner.java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:335)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:330)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
at org.testng.TestNG.run(TestNG.java:1057)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
SKIPPED: test01
===============================================
Default test
Tests run: 2, Failures: 1, Skips: 1
===============================================
(3)、忽略测试
代码定义:
package com.sword.test;
import org.testng.annotations.Test;
public class tAutoTest {
@Test(enabled=false)//该方法不会被执行。
public void test02(){
System.out.println("I am test02!");
}
@Test
public void test01(){
System.out.println("YinTing");
}
}
执行报告:
YinTing
PASSED: test01
===============================================
Default test
Tests run: 1, Failures: 0, Skips: 0
TestNG基本注解(一)的更多相关文章
- TestNG基本注解
TestNG的注解: 注解 描述 @BeforeSuite 注解的方法将只运行一次,运行所有测试前此套件中. @AfterSuite 注解的方法将只运行一次此套件中的所有测试都运行之后. @Befor ...
- 【转】TestNG常用注解
http://blog.csdn.net/d6619309/article/details/52435084 TestNG的注解大部分用在方法级别上.常用的注解列举如下: 1. Before类别和Af ...
- TestNG之注解的生命周期
有必要介绍一下TestNG注解的生命周期,先看一下官网支持的注解有 @BeforeSuite@AfterSuite@BeforeTest@AfterTest@BeforeGroups@AfterGro ...
- TestNG基本注解(注释)
传统的方式来表示JUnit3中的测试方法是测试自己的名字前缀.标记一个类中的某些方法,具有特殊的意义,这是一个非常有效的方法,但命名不很好的扩展(如果我们想添加更多标签为不同的框架?),而非缺乏灵活性 ...
- TestNG配置注解
以下是TestNG支持的注释列表: 注解 描述 @BeforeSuite 在该套件的所有测试都运行在注释的方法之前,仅运行一次. @AfterSuite 在该套件的所有测试都运行在注释方法之后,仅运行 ...
- TestNG系列之:TestNG基本注解(注释)
注解 描述 @BeforeSuite 注解的方法只运行一次,在当前suite所有测试执行之前执行 @AfterSuite 注解的方法只运行一次,在当前suite所有测试执行之后执行 @BeforeCl ...
- testng自定义注解
在testng中大部分的注解已经可以满足我们测试的需求,但是在测试的时候想要通过注解的方式加入自己测试一些内容,比如 测试项目 测试描述 验证点等信息,可通过自定义注解的方式实现. 具体操作步骤如下 ...
- TestNG基本注解(二)
1. Before类别和After类别注解 @BeforeSuite @AfterSuite @BeforeTest @AfterTest @BeforeClass @AfterClass @Befo ...
- TestNG常用注解
原文链接:https://www.yiibai.com/testng/basic-annotations.html 以下是TestNG支持的注释列表: 注解 描述 @BeforeSuite 在该 ...
随机推荐
- C++开发人脸性别识别教程(8)——搭建MFC框架之读取目录信息
在上一篇博客中我们已经绘制了MFC界面,在这篇博客中我们将加入响应代码,为MFC框架加入一个最主要的功能:打开一个目录. 一.加入相关头文件 这里头文件主要包括三类:opencv头文件.批量读取文件相 ...
- 使用vscode 编译 sass
由于我在工作中用的编辑器是 vscode ,所以记录一下vscode 编译sass 的配置 vs code 编译saass 1.在扩展里搜索“easy sass”,直接进行安装即可 2.安装后默认已经 ...
- 升级iOS 9之前的注意事项
iOS 9 beta刚刚公布.就下载了官网的升级包, 使用itunes的更新功能,升级 眼看安装过程一番顺利, 升级完開始进入设置操作步骤上, 结果傻眼了 进入了输入手机password的界面, 不 ...
- hdu1133 Buy the Ticket (卡兰特数应用+java大数)
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=1133 [题意] 电影票50块一张 有m个人手里正好有50块,n个人手里正好有100块,售票厅開始没有 ...
- Android Material Design-Maintaining Compatibility(保持兼容性)-(七)
转载请注明出处:http://blog.csdn.net/bbld_/article/details/40634829 翻译自: http://developer.android.com/traini ...
- 网页中打开exe
网页上打开本地的exe文件,可以吗? 西蒙说:可以的. 方法如下: 1.定义一个私有协议,指向本地的那个exe 2.在网页上将此私有协议作为URL,点击之即可打开那个exe 3.URL中还可以包含参数 ...
- TCP协议,UDP协议
帅爆太阳的男人 1,TCP协议 回环地址:127.0.0.1(所有电脑都这一个默认回环地址)每个计算机都有这么一个本机地址只能被本机识别,不会被其他机器识别(因为你用这个地址传内容他就传不出去) TC ...
- 必备java参考资源列表
现在开始正式介绍这些参考资源. Web 站点和开发人员 Web 门户 网络无疑改变了共享资源和出版的本质(对我也是一样:您正在网络上阅读这篇文章),因此,从每位 Java 开发人员都应该关注的关键 W ...
- struts2 中 result type="stream"
Stream result type是Struts2中比较有用的一个feature.特别是在动态生成图片和文档下载的情况下 1:图片验证码: Action类,action主要要提供一个获取InputS ...
- UESTC149 解救小Q
小Q被邪恶的大魔王困在了迷宫里,love8909决定去解救她.迷宫里面有一些陷阱,一旦走到陷阱里,就会被困身亡:(,迷宫里还有一些古老的传送阵,一旦走到传送阵上,会强制被传送到传送阵的另一头.现在请你 ...