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基本注解(一)的更多相关文章

  1. TestNG基本注解

    TestNG的注解: 注解 描述 @BeforeSuite 注解的方法将只运行一次,运行所有测试前此套件中. @AfterSuite 注解的方法将只运行一次此套件中的所有测试都运行之后. @Befor ...

  2. 【转】TestNG常用注解

    http://blog.csdn.net/d6619309/article/details/52435084 TestNG的注解大部分用在方法级别上.常用的注解列举如下: 1. Before类别和Af ...

  3. TestNG之注解的生命周期

    有必要介绍一下TestNG注解的生命周期,先看一下官网支持的注解有 @BeforeSuite@AfterSuite@BeforeTest@AfterTest@BeforeGroups@AfterGro ...

  4. TestNG基本注解(注释)

    传统的方式来表示JUnit3中的测试方法是测试自己的名字前缀.标记一个类中的某些方法,具有特殊的意义,这是一个非常有效的方法,但命名不很好的扩展(如果我们想添加更多标签为不同的框架?),而非缺乏灵活性 ...

  5. TestNG配置注解

    以下是TestNG支持的注释列表: 注解 描述 @BeforeSuite 在该套件的所有测试都运行在注释的方法之前,仅运行一次. @AfterSuite 在该套件的所有测试都运行在注释方法之后,仅运行 ...

  6. TestNG系列之:TestNG基本注解(注释)

    注解 描述 @BeforeSuite 注解的方法只运行一次,在当前suite所有测试执行之前执行 @AfterSuite 注解的方法只运行一次,在当前suite所有测试执行之后执行 @BeforeCl ...

  7. testng自定义注解

    在testng中大部分的注解已经可以满足我们测试的需求,但是在测试的时候想要通过注解的方式加入自己测试一些内容,比如 测试项目 测试描述  验证点等信息,可通过自定义注解的方式实现. 具体操作步骤如下 ...

  8. TestNG基本注解(二)

    1. Before类别和After类别注解 @BeforeSuite @AfterSuite @BeforeTest @AfterTest @BeforeClass @AfterClass @Befo ...

  9. TestNG常用注解

    原文链接:https://www.yiibai.com/testng/basic-annotations.html    以下是TestNG支持的注释列表: 注解 描述 @BeforeSuite 在该 ...

随机推荐

  1. 杭电1232畅通project

    畅通project Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  2. Cocos2d-x 3.1.1 学习日志12--一Cocos2dx3.1.1移植到Android平台的方法(最实用最有效的!!)

    须要用到工具(依照顺序): 1.JDK 2.NDK 3.ANT 4.Adt-bundle-windows 将JDK文件夹下的bin文件夹路径加入到系统环境变量中. 解压NDK 解压Adt-bundle ...

  3. 各项异性滤波简单介绍Anisotropic Filtering(AF)

    本文主要整理简绍来自互联网的各项异性滤波的知识. 原文链接:http://www.linuxgraphics.cn/graphics/using_anisotropic_texture_filteri ...

  4. Centos java 安装

    第一步:查看Linux自带的JDK是否已安装 (卸载centOS已安装的1.4) 安装好的CentOS会自带OpenJdk,用命令 java -version ,会有下面的信息: java versi ...

  5. C# 谁改了我的代码 使用 Resharper 快速做适配器

    C# 谁改了我的代码   本文告诉大家一个特殊的做法,可以修改一个字符串常量 我们来写一个简单的程序,把一个常量字符串输出 private const string str = "linde ...

  6. LightOJ - 1317 Throwing Balls into the Baskets 期望

    题目大意:有N个人,M个篮框.K个回合,每一个回合每一个人能够投一颗球,每一个人的命中率都是同样的P.问K回合后,投中的球的期望数是多少 解题思路:由于每一个人的投篮都是一个独立的事件.互不影响.所以 ...

  7. IOS开发之----常用的基本GDB命令【转】

    原文地址:http://blog.sina.com.cn/s/blog_71715bf801016d2y.html gdb不是万能的,可是没有gdb却是万万不能的.这里给大家简单介绍下iOS开发中最基 ...

  8. IDEA debug调式快捷键

    F9 resume programe 恢复程序 Alt+F10 show execution point 显示执行断点 F8 Step Over 相当于eclipse的f6 跳到下一步 F7 Step ...

  9. Tomcat最多支持并发多少用户?

    当一个进程有 500 个线程在跑的话,那性能已经是很低很低了.Tomcat 默认配置的最大请求数是 150,也就是说同时支持 150 个并发,当然了,也可以将其改大.当某个应用拥有 250 个以上并发 ...

  10. Common non-standard response fields

    https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#cite_note-52 Common non-standard response f ...