1.TestNG概念

TestNG:Testing Next Generation 下一代测试技术,是一套根据JUnit和Nunit思想构建的利用注释来强化测试功能的测试框架,可用来做单元测试,也可用来做集成测试,测试人员一般用TestNG来写自动化测试。  开发人员一般用JUnit写单元测试。

2.TestNg注解:

3. TestNg提供的最基本的注解之一就是Test注解,作用在方法或者类上,此注解支持的属性有:

1)alwaysRun:提供一个false or true值,如果设置为true,则被标记的方法会永远被执行,即使被标记方法所依赖的方法执行失败了。

2)dataProvider:此属性的值为标记方法提供数据驱动的数据源

3)dataProviderClass:此属性指出提供数据驱动方法的所在类

4)dependsOnGroups:此属性指出标记方法所依赖的组

5)dependsOnMethods:此属性支持标记方法所依赖的方法

6)description:标记方法的描述信息

7)enabled:标记方法是否要执行,默认为true执行

8)expectedExceptions:指定标记方法返回的异常信息列表

9)groups:指定标记方法归属于哪个组

10)timeOut:指定标记方法超时时长 (in millisecs)

11)invocationCount:被标记的方法会执行多次

12)threadPoolSize:启用多个线程执行被标记的方法,一般会与invocationCount一起使用;

4.关于TestNg的执行顺序问题,看下面是咧:

package com.testNG;

import org.testng.annotations.*;

public class NewTest {

@Test(dataProvider = "dp")

public void f(Integer n, String s) {

System.out.println(n+"---"+s);

}

@BeforeMethod

public void beforeMethod() {

System.out.println("@beforeMethod");

}

@AfterMethod

public void afterMethod() {

System.out.println("@AfterMethod");

}

@DataProvider

public Object[][] dp() {

return new Object[][] {

new Object[] { 1, "a" },

new Object[] { 2, "b" },

};

}

@BeforeClass

public void beforeClass() {

System.out.println("@beforeClass");

}

@AfterClass

public void afterClass() {

System.out.println("@afterClass");

}

@BeforeTest

public void beforeTest() {

System.out.println("@beforeTest");

}

@AfterTest

public void afterTest() {

System.out.println("@afterTest");

}

@BeforeSuite

public void beforeSuite() {

System.out.println("@beforeSuite");

}

@AfterSuite

public void afterSuite() {

System.out.println("@afterSuite");

}

}

执行结果如下:

@beforeSuite

@beforeTest

@beforeClass

@beforeMethod

1---a

@AfterMethod

@beforeMethod

2---b

@AfterMethod

@afterClass

@afterTest

PASSED: f(1, "a")

PASSED: f(2, "b")   此时顺序一目了然;

5.关于TestNg的相关测试,同样以实例举例:

1)编写Person简单测试类:

package com.testNG;

class Person {

private int age;

private String  job;

public Person(int age, String job) {

super();

this.age = age;

this.job = job;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getJob() {

return job;

}

public void setJob(String job) {

this.job = job;

}

}

2)编写Car简单测试类:

package com.testNG;

public class Car {

private String  color;

private double money;

public Car(String color, double money) {

super();

this.color = color;

this.money = money;

}

public String getColor() {

return color;

}

public void setColor(String color) {

this.color = color;

}

public double getMoney() {

return money;

}

public void setMoney(double money) {

this.money = money;

}

}

3)编写测试类:

package com.testNG;

import org.testng.Assert;

import org.testng.annotations.*;

import java.util.*;

public class NewTest {

@Test(dataProvider = "dp",priority=1)                     //仅用于做参数化测试,设置优先级,数值越小优先级越大

public void personinit(Integer age, String job) {          //通过dp传值给Person参数化

Person person = new Person(age,job);

System.out.println(person.getAge()+"-------"+person.getJob());

}

@Test(priority=2,enabled=false)                            //enabled=false表明该测试方法可忽略

public void personcheck(){

Person xiaoming = new Person(23,"tester");

Person xiaowang = new Person(25,"singer");

try{                                                 //断言判断人的年龄是否正确

Assert.assertEquals(xiaoming.getAge(), 23);

Assert.assertEquals(xiaowang.getAge(), 25);

System.out.println("小明和小王的年龄验证通过");

}catch(Exception e){

e.printStackTrace();

}

}

@Test(priority=3)

public void carcheck(){

Car baoma = new Car("red",250000);

Car bieke = new Car("black",100000);

try{                                                   //断言判断车的颜色是否正确

Assert.assertEquals(baoma.getColor(), "red");

Assert.assertEquals(bieke.getColor(), "black");

System.out.println("宝马和别克的颜色验证通过");

}catch(Exception e){

e.printStackTrace();

}

}

@Test(priority=4)

public void buycar(){

System.out.println("小明买车了");

}

@Test(dependsOnMethods=("buycar"))                           //依赖测试,gohome要先有buycar才会实现

@Parameters("test1")                         //设置参数

public void gohome(String test1){

System.out.println("小明开自己买的"+test1+"回家了");  }

@BeforeMethod

public void beforeMethod() {

System.out.println("@beforeMethod");

}

@AfterMethod

public void afterMethod() {

System.out.println("@AfterMethod");

}

@DataProvider                                             //提供Person实例化对象的数据

public Object[][] dp() {

System.out.println("@DataProvider");

return new Object[][] {

new Object[] { 20, "tester" },

new Object[] { 25, "worker" },

};

}

@BeforeClass

public void beforeClass() {

}

@AfterClass

public void afterClass() {

}

@BeforeTest

public void beforeTest() {

System.out.println("@beforeTest");

}

@AfterTest

public void afterTest() {

System.out.println("@afterTest");

}

}

4)配置文件如下:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Suite" parallel="false">

<parameter name="test1" value="宝马" />

<test name="Test">

<classes>

<class name="com.testNG.NewTest"/>

</classes>

</test> <!-- Test -->

</suite> <!-- Suite -->

执行结果如下:

@beforeTest

@DataProvider

@beforeMethod

20-------tester

@AfterMethod

@beforeMethod

25-------worker

@AfterMethod

@beforeMethod

宝马和别克的颜色验证通过

@AfterMethod

@beforeMethod

小明买车了

@AfterMethod

@beforeMethod

小明开自己买的宝马回家了

@AfterMethod

@afterTest

PASSED: personinit(20, "tester")

PASSED: personinit(25, "worker")

PASSED: carcheck

PASSED: buycar

PASSED: gohome("宝马")

6.参考资料:

http://www.cnblogs.com/TankXiao/p/3888070.html#introduce

https://www.cnblogs.com/meitian/p/5221202.html

testNG测试基础一的更多相关文章

  1. Android测试基础题(三)

    今天接着给大家带来的是Android测试基础题(三).    需求:定义一个排序的方法,根据用户传入的double类型数组进行排序,并返回排序后的数组 俗话说的好:温故而知新,可以为师矣 packag ...

  2. TestNG测试框架在基于Selenium进行的web自动化测试中的应用

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ TestNG+Selenium+Ant TestNG这个测试框架可以很好的和基于Selenium的 ...

  3. 零成本实现接口自动化测试 – Java+TestNG 测试Restful service

    接口自动化测试 – Java+TestNG 测试 Restful Web Service 关键词:基于Rest的Web服务,接口自动化测试,数据驱动测试,测试Restful Web Service, ...

  4. JAVA 利用MyEclipse结合TestNG测试框架进行单元测试

    利用MyEclipse结合TestNG测试框架进行单元测试   by:授客 QQ:1033553122 测试环境 jdk1.8.0_121 myeclipse-10.0-offline-install ...

  5. css3背景颜色渐变属性 兼容性测试基础环境为:windows系统;IE6.0+, Firefox4.0+, Chrome4.0+, Safari4.0+, Opera15.0+

    css3背景颜色渐变属性 兼容性测试基础环境为:windows系统:IE6.0+, Firefox4.0+, Chrome4.0+, Safari4.0+, Opera15.0+ 语法: <li ...

  6. 接口自动化测试框架搭建 – Java+TestNG 测试Restful service

    接口自动化测试 – Java+TestNG 测试 Restful Web Service 关键词:基于Rest的Web服务,接口自动化测试,数据驱动测试,测试Restful Web Service, ...

  7. 测试基础面试题 + SQL 面试题(选择题有部分答案,难度:低)

    测试基础面试题 + SQL 面试题(选择题有部分答案,难度:低) 答案: .A .C .C .A .A .D

  8. 安全性测试:OWASP ZAP 2.8 使用指南(一):安全测试基础及ZAP下载、安装

    概览 本文意在对于OWASP's Zed Attack Proxy(ZAP)软件做一个基本使用指南介绍. ZAP是一个用于实施安全性测试的工具,即使没有很强的安全测试背景也可以很好的使用. 为了达到这 ...

  9. 8-MySQL DBA笔记-测试基础

    第三部分 测试篇 测试需要掌握的知识面很广泛,本篇的关注点是数据库的性能测试和压力测试,对于其他领域的测试,由于涉猎不多,笔者就不做叙述了.DBA的工作职责之一就是评估软硬件,这往往是一项很耗时的工作 ...

随机推荐

  1. mac 创建快捷方式

    一.替身文件 mac上有个功能叫“制作替身”.使用 ⌘+⇧+鼠标左键拖拽   可以生成一个文件的替身文件.此替身文件相当于windows的快捷方式. 二.link文件 link文件也可以做快捷方式.还 ...

  2. Pig FOREACH 嵌套循环

    Example: Nested Block Suppose we have relations A and B. Note that relation B contains an inner bag. ...

  3. JavaScript中函数作为值

    function myfunc() { // .. } 这是个函数,这样理解, myfunc只是外层作用域的一个变量,指向刚刚声明的function. 也就是说,function本身就是一个值, 就像 ...

  4. ExecuteNonQuery(),ExecuteScalar(),ExecuteReader的用法-转

    using System.Data.SqlClient;...SqlConnection conn = new SqlConnection(@"server=ws7\leosql;datab ...

  5. MVC下使用ajax后台查询值赋值到前端控件

    初学MVC,今天做个简单的功能,就是输入BeginDate和EndDate,从后台计算后赋值给另外一个文本框Amount 界面很简单,方法也很简单,今天就使用jquery的post方法,先准备后台代码 ...

  6. 通过jdbc连接MySql数据库的增删改查操作

    一.获取数据库连接 要对MySql数据库内的数据进行增删改查等操作,首先要获取数据库连接 JDBC:Java中连接数据库方式 具体操作如下: 获取数据库连接的步骤: 1.先定义好四个参数 String ...

  7. 快速枚举的迭代器类NSEnumerator

    另外,OC中有一个专门的快速枚举的迭代器类NSEnumerator,这个类的使用方法如下: //得到一个对应的enumerator对象  NSEnumerator * enumerator = [se ...

  8. Python中list的复制及深拷贝与浅拷贝探究

    在Python中,经常要对一个list进行复制.对于复制,自然的就有深拷贝与浅拷贝问题.深拷贝与浅拷贝的区别在于,当从原本的list复制出新的list之后,修改其中的任意一个是否会对另一个造成影响,即 ...

  9. k8s 更新应用程序

    参考:https://kubernetes.io/docs/tutorials/kubernetes-basics/ 更新应用程序 用户希望应用程序始终可用,开发人员每天需要部署几次新版本的应用程序. ...

  10. python 3.x 安装问题及连接oracle数据库

    最近有用到python去处理一些问题,发现现在3已出来,遂用直接下3.7使用 发现问题还是有一点的 1. pip 会出现ssl问题 Could not install packages due to ...