Java自动化测试框架-11 - TestNG之annotation与并发测试篇 (详细教程)
1、简介
TestNG中用到的annotation的快速预览及其属性。
2、TestNG基本注解(注释)
| 注解 | 描述 |
| @BeforeSuite | 注解的方法只运行一次,在当前suite所有测试执行之前执行 |
| @AfterSuite | 注解的方法只运行一次,在当前suite所有测试执行之后执行 |
| @BeforeClass | 注解的方法只运行一次,在当前类中所有方法调用之前执行 |
| @AfterClass | 注解的方法只运行一次,在当前类中所有方法调用之后执行 |
| @BeforeTest | 只运行一次,所有的测试方法运行之前运行 |
| @AfterTest | 只运行一次,所有的测试方法运行之后运行 |
| @BeforeGroups | 组的列表,这种配置方法将之前运行。此方法是保证在运行属于任何这些组第一个测试方法,该方法被调用。 |
| @AfterGroups | 组的名单,这种配置方法后运行。此方法是保证运行后不久,最后的测试方法,该方法属于任何这些组被调用。 |
| @BeforeMethod | 在每一个测试方法(@test)运行之前运行,例:执行完测试用例后要重置数据才能执行第二条用例时,可用之种方式。 |
| @AfterMethod | 在每一个测试方法(@test)运行之后运行 |
| @DataProvider |
标志着一个方法,提供数据的一个测试方法。注解的方法必须返回一个Object[] [],其中每个对象[]的测试方法的参数列表中可以分配。
该@Test 方法,希望从这个DataProvider的接收数据,需要使用一个dataProvider名称等于这个注解的名字。 |
| @Factory | 作为一个工厂,返回TestNG的测试类的对象将被用于标记的方法。该方法必须返回Object[]。 |
| @Listeners | 定义一个测试类的监听器 |
| @Parameters | 介绍如何将参数传递给@Test方法。 |
| @Test | 标记一个类或方法作为测试的一部分。 |
如上列表中的@Factory、@Linsteners这两个是不常用的;
前十个注解看起来不太容易区分,顺序不太容易看明白,以如下范例做简单说明,代码:
package com.course.testng.multiThread; /**
* @author 北京-宏哥
*
* Java自动化测试框架-11 - TestNG之annotation与并发测试篇
*
* 2019年11月12日
*/
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterGroups;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test; public class NewTest { @Test(groups="group1")
public void test1() {
System.out.println("test1 from group1");
Assert.assertTrue(true);
} @Test(groups="group1")
public void test11() {
System.out.println("test11 from group1");
Assert.assertTrue(true);
} @Test(groups="group2")
public void test2()
{
System.out.println("test2 from group2");
Assert.assertTrue(true);
} @BeforeTest
public void beforeTest()
{
System.out.println("beforeTest");
} @AfterTest
public void afterTest()
{
System.out.println("afterTest");
} @BeforeClass
public void beforeClass()
{
System.out.println("beforeClass");
} @AfterClass
public void afterClass()
{
System.out.println("afterClass");
} @BeforeSuite
public void beforeSuite()
{
System.out.println("beforeSuite");
} @AfterSuite
public void afterSuite()
{
System.out.println("afterSuite");
} //只对group1有效,即test1和test11
@BeforeGroups(groups="group1")
public void beforeGroups()
{
System.out.println("beforeGroups");
} //只对group1有效,即test1和test11
@AfterGroups(groups="group1")
public void afterGroups()
{
System.out.println("afterGroups");
} @BeforeMethod
public void beforeMethod()
{
System.out.println("beforeMethod");
} @AfterMethod
public void afterMethod()
{
System.out.println("afterMethod");
}
}
控制台输出如下:

3、使用注释/注解的好处
以下是使用注释/注解的一些好处:
TestNG通过查找注释/注解来识别它感兴趣的方法。 因此,方法名称不限于任何模式或格式。
可以将其他参数传递给注释。
注释是强类型的,所以编译器会马上标记任何错误。
测试类不再需要扩展任何东西(如TestCase,对于JUnit3)。
4、 Concurrenttesting(注解方式):
下面的例子是输出进程ID,threadPoolSize用来指明线程池的大小,也就是并发的线程数目是多少
5次调用,有3个线程可调用
1、新建com.course.testng.multiThread包,包里新建MuitiThreadOnAnnotion类,如下

2、参考代码
package com.course.testng.multiThread; import org.testng.annotations.Test; /**
* @author 北京-宏哥
*
* Java自动化测试框架-11 - TestNG之annotation与并发测试篇
*
* 2019年11月11日
*/
//多线程测试,没有关联的用例可以使用多线程减少执行时间
public class MuitiThreadOnAnnotion {
@Test(invocationCount = 5,threadPoolSize = 3)
public void test() {
System.out.println(1);
System.out.printf("Thrad Id : %s%n",Thread.currentThread().getId());
}
}
3、控制台页面输出

4、若改成5次调用,有5个线程可调用

5、testng.xml配置文件
TestNG可以以多线程的模式运行所有的test,这样可以获得最大的运行速度,最大限度的节约执行时间。当然,并发运行也是有代价的,就是需要我们的代码是线程安全的。
并发运行测试的话,需要我们指定运行的配置文件,一个示例如下:
<suite name="My suite" parallel="methods" thread-count="4">
说明:在当前测试规划的执行过程中,为每个测试方法的执行使用单独的线程,最多并发4个线程。
<suite name="My suite" parallel="tests" thread-count="4">
说明:在当前测试规划的执行过程中,为每个测试用例的执行使用单独的线程(该测试用例中的测试方法共享一个线程),最多并发4个线程。
<suite name="My suite" parallel="classes" thread-count="4">
说明:在当前测试规划的执行过程中,为每个测试类的执行使用单独的线程(该测试类中的测试方法共享一个线程),最多并发4个线程。
<suite name="My suite" parallel="instances" thread-count="4">
说明:在当前测试规划的执行过程中,为每个测试类实例的执行始终使用唯一的线程(该测试实例中的测试方法共享一个线程),最多并发4个线程。
注意:这里的parallel默认值为"none"。曾经的"true", "false"已经过时了,不建议使用。
1.Parallel=”methods”的意思是指TestNG会将method作为并发的元子单位,即每个method运行在自己的thread中。如果parallel=”tests”,则指会将test 作为并发的元子单位
2.Thread-count=”2”是指,运行的时候,并发度为2,同时会有两个线程在运行。
1、新建一个测试类,例如:Test1

2、参考代码
package com.course.testng.multiThread; import org.testng.annotations.Test; /**
* @author 北京-宏哥
*
* Java自动化测试框架-11 - TestNG之annotation与并发测试篇
*
* 2019年11月12日
*/
public class Test1 {
@Test(groups = { "t8"})
public void aThreadPool() {
System.out.println("#ThreadA: " +Thread.currentThread().getId());
}
@Test(groups = { "t8"})
public void bThreadPool() {
System.out.println("#ThreadB: " +Thread.currentThread().getId());
}
@Test(groups = { "t8"})
public void cThreadPool() {
System.out.println("#ThreadC: " +Thread.currentThread().getId());
}
}
3、testng.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test name="Test" parallel="methods" thread-count="2">
<classes>
<class name="com.course.testng.multiThread.Test1"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
4、控制台输出结果:

5、修改testng.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test name="Test" parallel="tests" thread-count="2">
<classes>
<class name="com.course.testng.multiThread.Test1"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
6、控制台页面输出(因为aThreadPool(),bThreadPool(),cThreadPool()都在一个test下面)

6、小结
好了,今天关于TestNG之annotation与并发测试篇 ,就分享到这里。
Java自动化测试框架-11 - TestNG之annotation与并发测试篇 (详细教程)的更多相关文章
- Java自动化测试框架-12 - TestNG之xml文件详解篇 (详细教程)
1.简介 现在这篇,我们来学习TestNG.xml文件,前面我们已经知道,TestNG就是运行这个文件来执行测试用例的.通过本篇,你可以进一步了解到:这个文件是配置测试用例,测试套件.简单来说,利用这 ...
- Java自动化测试框架-02 - TestNG之理论实践 - 纸上得来终觉浅,绝知此事要躬行(详细教程)
理论 TestNG,即Testing, NextGeneration,下一代测试技术,是一套根据JUnit 和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,即可以用来做单元测试,也可以用 ...
- Java自动化测试框架-08 - TestNG之并行性和超时篇 (详细教程)
一.并行性和超时 您可以指示TestNG以各种方式在单独的线程中运行测试. 可以通过在suite标签中使用 parallel 属性来让测试方法运行在不同的线程中.这个属性可以带有如下这样的值: 二.并 ...
- Java自动化测试框架-09 - TestNG之依赖注入篇 (详细教程)
1.-依赖注入 TestNG支持两种不同类型的依赖项注入:本机(由TestNG本身执行)和外部(由诸如Guice的依赖项注入框架执行). 1.1-本机依赖项注入 TestNG允许您在方法中声明其他参数 ...
- Java自动化测试框架-02 - TestNG之理论到实践
TestNG,即Testing, NextGeneration,下一代测试技术,是一套根据JUnit 和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,即可以用来做单元测试,也可以用来做集 ...
- Java自动化测试框架-01 - TestNG之入门篇 - 大佬的鸡肋,菜鸟的盛宴(详细教程)
TestNG是什么? TestNG按照官方的定义: TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便. TestNG是一个开源自动化测试框 ...
- Java自动化测试框架-03 - TestNG之Test Group篇 - 我们一起组团打怪升级(详细教程)
简介 其实这篇文章的group宏哥在上一篇中就提到过,但是就是举例一笔带过的,因此今天专门有一篇文章来讲解Group的相关知识.希望大家茅塞顿开 ,有着更进一步认识和了解测试组. 一.Test Gro ...
- Java自动化测试框架-04 - TestNG之Test Method篇 - 道法自然,法力无边(详细教程)
简介 按照上一篇的计划,这一篇给小伙伴们分享一下测试方法. 一.设置参数 测试方法是可以带有参数的.每个测试方法都可以带有任意数量的参数,并且可以通过使用TestNG的@Parameters向方法传递 ...
- Java自动化测试框架-07 - TestNG之Factory篇 - 欢快畅游梦幻工厂(详细教程)
简介 最近忙着装修博客园,没时间更新文章,今天终于抽出时间把上次写的一半的文章给写完了,新的博客园风格,希望大家喜欢.今天继续介绍testng的相关知识--工厂. 工厂允许你动态的创建测试.例如,假设 ...
随机推荐
- CentOS8 yum/dnf 配置国内源
CentOS8 yum/dnf 配置国内源(临时) CentOS 8更改了软件包的安装程序,取消了 yum 的配置方法,改而使用了dnf 作为安装程序.虽然改变了软件包的安装方式,但是 dnf 还是能 ...
- POJ 3616Milking Time
Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that sh ...
- BZOJ 4392 卡牌游戏
Description 奶牛贝茜是卡牌游戏的狂热爱好者, 但是令人吃惊的, 她缺乏对手. 不幸的是, 任何牧 群里的其他牛都不是好对手. 他们实在是太差了 , 实际上, 他们玩卡牌游戏时会遵循一种完全 ...
- Spring Boot 2.2 正式发布,大幅性能提升 + Java 13 支持
之前 Spring Boot 2.2没能按时发布,是由于 Spring Framework 5.2 的发布受阻而推迟.这次随着 Spring Framework 5.2.0 成功发布之后,Spring ...
- 介绍ArcGIS中各种数据的打开方法——tin(栅格文件)
4.加载栅格文件 栅格数据是GIS中重要的数据源之一,如卫星图像.扫描的地图.照片等. 栅格数据常见的格式有Bmp.Tiff.Jpg.Grid等. 添加栅格数据主要使用Rasterlayer 组件类, ...
- python学习-变量和简单类型(二)
学习笔记中的源码:传送门 1.注释: 单行注释(#):多行注释("""或者''') 2.python标准数据类型:数字(numbers).字符串(string).列表(l ...
- 4、OGNL与值栈
一.OGNL 1.什么是OGNL 对象导航图语言(Object Graph Navigation Language),简称OGNL,是应用于Java中的一个开源的表达式语言(Expression La ...
- 分布式监控CAT服务端的本地部署
一.CAT简介 CAT(Central Application Tracking),是美团点评基于 Java 开发的一套开源的分布式实时监控系统.美团点评基础架构部希望在基础存储.高性能通信.大规模在 ...
- 09 python学习笔记-操作excel(九)
python操作excel使用xlrd.xlwt和xlutils模块,xlrd模块是读取excel的,xlwt模块是写excel的,xlutils是用来修改excel的.这几个模块可以使用pip安装, ...
- 06 python学习笔记-常用模块(六)
一. 模块.包 1.什么是模块? Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句,是用来组织代码的.模块能定义函数 ...