Testng 简介:

Testng是一套开源测试框架,是从Junit继承而来,testng意为test next generation,主要有以下特性:

  • annotations  注释,如 @test @BeforeMethod
  • 支持多线程执行case
  • 支持数据驱动 dataProvider
  • 支持参参数
  • 能够作为eclipse的插件
  • 能够(配合reportng)生产客观的测试报告
  • 可通过testng.xml管理执行case和suite

那么好的测试框架,怎么使用?

这里我们使用eclipse插件方式 安装详见:http://testng.org/doc/eclipse.html


testng使用

首先了解一下testng 的annotations

常见的有以下:

@BeforeClass: 该annotation在class激活之前执行

@BeforeMethod: 该annotation会在每个执行的方法之前执行

@Test ,该annotation 是你要执行测试的方法

@AfterMethod,该annotation在每个测试方法执行之后运行

@AfterClass 该annotation会在所有测试方法之后运行

具体生命周期如下图:

这里是所有的annotation

@BeforeSuite
@AfterSuite
@BeforeTest
@AfterTest
@BeforeGroups
@AfterGroups
@BeforeClass
@AfterClass
@BeforeMethod
@AfterMethod
Configuration information for a TestNG class:

@BeforeSuite: The annotated method will be run before all tests in this suite have run. 
@AfterSuite: The annotated method will be run after all tests in this suite have run. 
@BeforeTest: The annotated method will be run before any test method belonging to the classes inside the <test> tag is run. 
@AfterTest: The annotated method will be run after all the test methods belonging to the classes inside the <test> tag have run. 
@BeforeGroups: The list of groups that this configuration method will run before. This method is guaranteed to run shortly before the first test method that belongs to any of these groups is invoked. 
@AfterGroups: The list of groups that this configuration method will run after. This method is guaranteed to run shortly after the last test method that belongs to any of these groups is invoked. 
@BeforeClass: The annotated method will be run before the first test method in the current class is invoked. 
@AfterClass: The annotated method will be run after all the test methods in the current class have been run. 
@BeforeMethod: The annotated method will be run before each test method. 
@AfterMethod: The annotated method will be run after each test method.

实例:我们验证一下testng annotation 执行顺序,这个case里有两个 测试  ,执行顺序为beforeClass->beforeMethod->test1->afterMethod->beforeMethod->

test2->afterMethod->afterClass.

package com.dbyl.tests;

import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
/**
* This is to verify testng annotation execute
* @author Young
*
*/
public class TestngExample {
private int a; @BeforeMethod(alwaysRun=true)
public void beforeMethod() {
a = 2;
System.out.println("This is beforeMethod method. The Value of a is: "
+ a);
} @BeforeClass
public void beforeClass() {
a = 1;
System.out.println("This is beforeClass method .The Value of a is: "
+ a);
} @Test(groups = "TestngExample")
public void testExample1() {
a = 3;
System.out.println("This is Test method1 .The Value of a is: " + a);
} @Test(groups = "TestngExample")
public void testExample2() {
a = 4;
System.out.println("This is Test method2 .The Value of a is: " + a);
} @AfterClass
public void afterClass() {
a = 5;
System.out.println("This is AfterClass Method .The Value of a is: " + a); } @AfterMethod
public void afterMethod()
{
a = 6;
System.out.println("This is AfterMethod Method .The Value of a is: " + a);
} }

所以执行结果为:

1
2
3
4
5
6
7
8
9
10
This is beforeClass method .The Value of a is: 1
This is beforeMethod method. The Value of a is: 2
This is Test method1 .The Value of a is: 3
This is AfterMethod Method .The Value of a is: 6
This is beforeMethod method. The Value of a is: 2
This is Test method2 .The Value of a is: 4
This is AfterMethod Method .The Value of a is: 6
This is AfterClass Method .The Value of a is: 5
PASSED: testExample1
PASSED: testExample2

  当然,还有BeforeSuite 等,不再做深入研究.

annotation后面可以加一些参数,比如alwaysRun=true/false,dependsOnMethods=""

alwaysRun控制是否每次都执行,dependsOnMethods是一种依赖,依赖某个方法执行

之前有提到testng数据驱动,使用dataProvider,dataProvider可以导入text ,excel等数据,

执行case时会从DataProvider依次拿出数据执行,同一个测试方法,会被执行相应的次数

package com.dbyl.tests;

import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test; public class Case1 { @DataProvider
public Object[][] testData1() {
return new Object[][] { { 1, 2, 3 }, { 1, 2, 4 }, { 1, 3, 4 },
{ -1, 3, 2 } };
} @DataProvider
public Object[][] testData2() {
return new Object[][] { { 5, 2, 3 }, { 1, 2, 4 }, { 1, -3, 4 },
{ 6, 3, 2 } };
} public static int add(int a, int b) {
return a + b;
} public static int minus(int a, int b) {
return a - b;
} @BeforeClass
public void beforeClass()
{
System.out.println("This is Before Class");
}
@Test(groups = { "add" }, dataProvider = "testData1")
public void addTest(int a, int b, int c) {
System.out.println("This is test add method. "+a+" + "+ b+" = "+c);
Assert.assertEquals(add(a, b), c);
} @Test(groups = { "minus" }, dataProvider = "testData2")
public void minusTest(int a, int b, int c) {
System.out.println("This is test minus method. "+a+" - "+ b+" = "+c);
Assert.assertEquals(minus(a, b), c);
} @BeforeMethod
public void beforeMethod()
{
System.out.println("This is Before Method");
} @AfterMethod
public void afterMethod()
{
System.out.println("This is After Method");
} @AfterClass
public void afterClass()
{
System.out.println("This is After Class");
}
}

执行结果如下:

This is Before Class
This is Before Method
This is test add method. 1 + 2 = 3
This is After Method
This is Before Method
This is test add method. 1 + 2 = 4
This is After Method
This is Before Method
This is test add method. 1 + 3 = 4
This is After Method
This is Before Method
This is test add method. -1 + 3 = 2
This is After Method
This is Before Method
This is test minus method. 5 - 2 = 3
This is After Method
This is Before Method
This is test minus method. 1 - 2 = 4
This is After Method
This is Before Method
This is test minus method. 1 - -3 = 4
This is After Method
This is Before Method
This is test minus method. 6 - 3 = 2
This is After Method
This is After Class
PASSED: addTest(1, 2, 3)
PASSED: addTest(1, 3, 4)
PASSED: addTest(-1, 3, 2)
PASSED: minusTest(5, 2, 3)
PASSED: minusTest(1, -3, 4)
FAILED: addTest(1, 2, 4)

由于天色已晚,明天继续总结.

接下来:testng.xml的配置和使用,已经参数传递

testng配合reportng 生成测试报告

testng 配合ant

Testng1的更多相关文章

  1. TestNg1. 基本介绍注解介绍和如何让在maven中引用

    1.更适合测试人员,有很多的套件. maven中引用: <!-- https://mvnrepository.com/artifact/org.testng/testng --><d ...

  2. TestNG 入门教程

    原文出处:http://www.cnblogs.com/TankXiao/p/3888070.html 阅读目录 TestNG介绍 在Eclipse中在线安装TestNG 在Eclipse中离线安装T ...

  3. JUnit 4 与 TestNG 对比

    原文出处: 付学良的网志 原文出处2: http://www.importnew.com/16270.html -------------------------------------------- ...

  4. TestNG 与 Junit的比较

    转自 http://www.blogjava.net/fanscial/archive/2005/12/14/23780.html 1.         JDK 5 Annotations (JDK ...

  5. selenium+testng+ant+jenkins 手记

    会不会搭建测试平台是一般测试工程师和高级测试工程师分水岭 ----tobecrazy 我们项目有现成的测试平台,使用的是selenium grid+testng+ant+jenkins+VM 但是我平 ...

  6. testng 教程之使用参数的一些tricks配合使用reportng

    前两次的总结:testng annotation生命周期 http://www.cnblogs.com/tobecrazy/p/4579414.html testng.xml的使用和基本配置http: ...

  7. testng教程之testng.xml的配置和使用,以及参数传递

    昨天学习了一下testng基础教程,http://www.cnblogs.com/tobecrazy/p/4579414.html 昨天主要学习的是testng 的annotation基本用法和生命周 ...

  8. Maven 配置 Selenium + testNG + reportNG 运行环境

    .markdown-preview:not([data-use-github-style]) { padding: 2em; font-size: 1.2em; color: rgb(56, 58, ...

  9. 基于WebDriver&TestNG 实现自己的Annotation @TakeScreenshotOnFailure

    相信用过Selenium WebDriver 的朋友都应该知道如何使用WebDriver API实现Take Screenshot的功能. 在这篇文章里,我主要来介绍对failed tests实现 t ...

随机推荐

  1. buf.writeFloatBE()函数详解

    buf.writeFloatBE(value, offset[, noAssert]) buf.writeFloatLE(value, offset[, noAssert]) value {Numbe ...

  2. Swing之登录界面

    import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Login extends JFrame ...

  3. LINUX驱动、系统底层

    就业模拟测试题-LINUX驱动.系统底层工程师职位 本试卷从考试酷examcoo网站导出,文件格式为mht,请用WORD/WPS打开,并另存为doc/docx格式后再使用 试卷编号:143921试卷录 ...

  4. ModelMap org.springframework.ui.ModelMap

    ModelMap实现了map接口,可以在其中存放属性,作用域同request,同时可与@SessionAttributes联合使用,把数据放入到session中去, 下面这个示例,我们可以在Model ...

  5. noip模拟赛 游

    [问题背景]zhx 和他的妹子出去玩.[问题描述]zhx 和他的妹子去一个国家旅游,共有 N 个旅游景点, N-1 条双向连接的道路将它们联通起来, 每一条道路有固定长度. 一开始 zhx 位于 1 ...

  6. noip模拟赛 蒜头君救人

    分析:之前的一道模拟赛题是dp+dfs,这道题是dp+bfs. 我们设f[stu][i][j]为当前状态为stu,走到(i,j)的答案,考虑怎么设计stu,每个人的状态有3种:要么在原地,要么被背着, ...

  7. md5加密的工具类(from 韩顺平)

    输入一个字符串,然后可以进行md5加密 import java.security.*; import java.security.spec.*; public class MyTools { publ ...

  8. Git flow的分支模型与及经常使用命令简单介绍

    Git flow是git的一个扩展集,它基于Vincent Driessen 的分支模型,文章"A successful Git branching model"对这一分支模型进行 ...

  9. androidannotations的background和UiThread配合使用參考

    简单介绍 androidannotations在开发中的代码规范思考:(MVC思考)时间太紧,先贴代码: Activity的代码: package edu.njupt.zhb.main; import ...

  10. [JavaEE] Data Validation

    When we create Entity and Respority, we also need to do validations to protect our data. In Java, va ...