selenium2中的TestNg注解和数据驱动的简介及使用
TestNg常用注解介绍,先来张图:

先看一下,以上各个注释的运行次序:

@Test
表示的意义:
1.表示示该方法是一个测试方法,在运行时,会自动的运行有@Test注脚的方法。
示例:
@BeforeMethod/@ AfterMethod
表示的意义:
1.beforemethod这个注脚是指加了该注脚的方法在每个测试方法运行之前会自动的被调用运行
2.aftermethod该注脚的方法在每一个测试方法运行之后会自动的被调用运行示例:
@BeforeClass/@AfterClass
表示的意义:
1.@BeforeClass与@AfterClass,这两个注脚的方法,也就是在每个类运行之前与之后会自动的被调用
用处:
1.在自动化脚本运行时,一个类里面的所有测试方法设计的是在同一个浏览器里面运行,那么就是说在这个类对象产生之前,就要把浏览器给启动起来,这时候@BeforeClass可以启动浏览器,@AfterClass就可以关闭浏览器了
@BeforeSuite/@AfterSuite /@BeforeTest/@AfterTest
用处:
这四个注解是分别用在Suite与Test上的,Suite与Test是定义在XML中的,后面我们再详细介绍及代码示例。
TestNg的数据驱动
什么是数据驱动:
1.数据驱动是指在一个脚本固定的情况下,用数据来控制该脚本是否运行,以及运行的次数,还有每次运行时对应的参数.
数据驱动的应用场景:
1.比如我们在测试登录时,要测试用不同的帐户登录,难道我们需要针对每一个帐户去写一个脚本吗?这样显然是不明智的,于是,testng为我们提供了这样一个注脚,让我们只需要提供出数据,就可以控制脚本运行的次数及相应的参数.
TestNg数据驱动的实现
实现方式:
1.用注解@DataProvider.示例:
注意点:
1.@DataProvider注脚的方法的返回值是Object对象的二维数组
2.@DataProvider可以指定名称如@DataProvider(name="testData"),这样在测试方法中@Test(dataProvider="testData"),如果没有跟(name="testData"),则测试方法中的dataProvider的值就应该为@DataProvider注脚的方法名
TestNg用XML运行
以class为基本点
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" verbose="1" parallel="false" thread-count="1">
<test name="Test1">
<classes>
<class name="com.demo.Test2" />
</classes>
</test>
</suite>
以method为基本点
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" verbose="1" parallel="false" thread-count="1">
<test name="Test1" preserve-order="true">
<classes>
<class name="com.demo.Test2">
<methods>
<include name="test2" />
<include name="test1" />
</methods>
</class>
</classes>
</test>
</suite>
以package为基本点
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" verbose="1" parallel="false" thread-count="1">
<test name="Test1">
<packages>
<package name="com.demo" />
</packages>
</test>
</suite>
此外TestNg也可以用命令行运行,具体可参考:
http://www.cnblogs.com/zhangfei/archive/2012/11/26/2788946.html
亲自试过的,没有任何问题。结果会打印到cmd的窗口中,且在目录下会生成test-output文件夹,如下所示:

TestNg用例管理
遵循的原则是用例独立少依赖
具体代码如下:
testNg.java文件代码如下:
package com.selenium.test; import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
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 testNg {
public static WebDriver Driver; @BeforeClass
public void beforeClass() {
System.out.println("beforeClass: open the browser.");
} @AfterClass
public void afterClass() {
System.out.println("afterClass: close the browser.");
Driver.quit();
} @BeforeMethod
public void setUp() {
System.out.println("setUp");
startFireFox("http://baidu.com");
} @AfterMethod
public void tearDown() {
System.out.println("tearDown");
Driver.close();
} @Test(dataProvider = "user")
public void testBaidu(String text) {
System.out.println(text);
Driver.findElement(By.id("kw")).sendKeys(text);
} // 由于user没有指定name,所以直接使用方法名user
@Test(dataProvider = "user")
public void testUser(String text) {
System.out.println(text);
} // 由于score指定name=scoreForUser,所以使用scoreForUser
@Test(dataProvider = "scoreForUser")
public void testScore(String text) {
System.out.println(text);
} // 虽然score指定name=scoreForUser, 但也可以直接使用方法名score
@Test(dataProvider = "score")
public void testScoreAgain(String text) {
System.out.println(text);
} @DataProvider
public Object[][] user() {
return new Object[][] { { "zhangsan" }, { "lisi" } };
} // 这种方式是给DataProvider重命名为sourceForUser
@DataProvider(name = "scoreForUser")
public Object[][] score() {
return new Object[][] { { "90" }, { "100" } };
} public static void startFireFox(String url) {
Driver = new FirefoxDriver();
Driver.manage().window().maximize();
Driver.navigate().to(url);
} // public static void closeFireFox() {
// Driver.close();
// Driver.quit();
// }
}
testPackage.xml具体代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" verbose="1" parallel="false" thread-count="1">
<test name="Test1">
<packages>
<package name="com.selenium.test" />
</packages>
</test>
</suite>
testClass.xml具体代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" verbose="1" parallel="false" thread-count="1">
<test name="Test1">
<classes>
<class name="com.selenium.test.testNg" />
</classes>
</test>
</suite>
testMethod.xml具体代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" verbose="1" parallel="false" thread-count="1">
<test name="Test1">
<classes>
<class name="com.selenium.test.testNg" />
<methods>
<include name="testBaidu" />
</methods>
</classes>
</test>
</suite>
最后打个广告,不要介意哦~
最近我在Dataguru学了《软件自动化测试Selenium2》网络课程,挺不错的,你可以来看看!要是想报名,可以用我的优惠码 G863,立减你50%的固定学费!
链接:http://www.dataguru.cn/invite.php?invitecode=G863
selenium2中的TestNg注解和数据驱动的简介及使用的更多相关文章
- 自动化测试框架selenium+java+TestNG——TestNG注解、执行、测试结果和测试报告
TestNG是java的一个测试框架,相比较于junit,功能更强大和完善,我是直接学习和使用的TestNG就来谈下TestNG的一些特点吧. TestNG的特点 注解 TestNG使用Java和面向 ...
- 深入理解spring中的各种注解
Spring中的注解大概可以分为两大类: 1)spring的bean容器相关的注解,或者说bean工厂相关的注解: 2)springmvc相关的注解. spring的bean容器相关的注解,先后有:@ ...
- Java中万恶的注解
本文由码农网 – 孙腾浩原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 当Java 1.5引入注解,企业开发者对简化EJB和其他企业产品开发抱有很大期望.可以看一看同一时期的一篇文章 ...
- Junit中常用的注解说明
Java注解((Annotation)的使用方法是@注解名 ,能通过简单的词语来实现一些功能.在junit中常用的注解有@Test.@Ignore.@BeforeClass.@AfterClass.@ ...
- ASP.NET MVC5中的数据注解
ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证(在服务器端和客户端验证数据的有效性) 数 ...
- Eclipse中安装TestNG插件
在Eclipse中安装TestNG也像安装其他插件一样非常方便,如下: 选择菜单:Help->Install New Software,然后在弹出窗口中的“Work with”中输入地址: ht ...
- Groovy中那些神奇注解之InheritConstructors
上一篇:Groovy中那些神奇注解之ToString 写完ToString,本来想今天就写到这了,突然觉得InheritConstructors注解实在也是个神器,写起来也没多少字,还是写了吧. In ...
- Groovy中那些神奇注解之ToString
继续上一篇:Groovy中那些神奇注解之Memoized 这篇就讲讲@groovy.transform.ToString这个注解,这注解太熟悉了,熟悉到让人一看就知道是干吗的,不就是把Bean转在St ...
- 深入理解spring中的各种注解(转)
Spring中的注解大概可以分为两大类: 1)spring的bean容器相关的注解,或者说bean工厂相关的注解: 2)springmvc相关的注解. spring的bean容器相关的注解,先后有:@ ...
随机推荐
- MapReduce作业的执行流程
MapReduce任务执行总流程 一个MapReduce作业的执行流程是:代码编写 -> 作业配置 -> 作业提交 -> Map任务的分配和执行 -> 处理中间结果 -> ...
- spark 图文详解:资源调度和任务调度
讲说spark的资源调度和任务调度,基本的spark术语,这里不再多说,懂的人都懂了... 按照数字顺序阅读,逐渐深入理解:以下所有截图均为个人上传,不知道为什么总是显示别人的QQ,好尴尬,无所谓啦, ...
- 【转】LINQ to SQL语句(1)之Where
Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句. Where操作包括3种形式,分别为简单形 ...
- 用户 'IIS APPPOOL\**' 登录失败的解决方案(项目部署到本地IIS上打开网页出现报错)
为开发方便-将项目部署到本地IIS上打开网页出现报错 1.打开IIS管理 2.点击应用池 3.找到你部署的网站名,右键“高级设置”——>“进程模型”——>“标识”修改为localsyste ...
- css经典布局之双飞翼
经典的两个布局方式有圣杯布局和双飞翼布局,圣杯布局主要用在国外,双飞翼布局是淘宝的UED团队开发的,优化了圣杯布局. 主要解决页面分不同列显示的问题, 一般只做页面的时候,我们分三部分,左边, ...
- android图片缩放平移
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android=" ...
- socket tcp使用recv接收数据时,返回errno错误代码88
原因:就是recv函数的第一个参数不是可用的,也就是第一个参数不是建立连接时返回的文件描述符. 解决方法:xxx
- Python封装补充
property属性 property实际是setter getter deleter是集合体,并不是一个单独的方法 import math # 使用的库 class Circle: def __in ...
- js中读取解析json数据
在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键. JSON字符串: 'var str1 = ' ...
- x86,x64,i386,i686
x64其实就是64位, x86其实就是32位. 1. i386 适用于intel和AMD所有32位的cpu.以及via采用X86架构的32的cpu. intel平台包括8086,80286,80386 ...


