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容器相关的注解,先后有:@ ...
随机推荐
- ios中 input 焦点光标不垂直居中
笔记:在ios,如果同时给input设置这种平时我们使字体垂直居中的css写法. 光标会出现,如下图的问题 . 改正方案: 采取不使用line-height的垂直居中方法即可.
- Java热启动
1.在项目中的pom.xml中添加 <dependency> <groupId>org.springframework.boot</groupId> <art ...
- 滚动条插件mCustomScrollbar
1. 参考网站 http://www.wufangbo.com/mcustomscrollbar/ 2. 使用方法
- github入门之更改提交操作--6
1.回溯历史版本 1.1.回溯到创建feature-A分支前 1.1.1.要让仓库的HEAD.暂存区.当前工作树回溯到指定状态,需要用到提供目标时间点的哈希值 1.1.2.回溯至未创建feature- ...
- 转:error LNK2005: ...already defined in MSVCRTD.lib
编译错误: Error1error LNK2005: _CrtSetCheckCount already defined in MSVCRTD.lib(MSVCR110D.dll)\libcmtd.l ...
- POJ 3254 Corn Fields (状压DP,轮廓线DP)
题意: 有一个n*m的矩阵(0<n,m<=12),有部分的格子可种草,有部分不可种,问有多少种不同的种草方案(完全不种也可以算1种,对答案取模后输出)? 思路: 明显的状压DP啦,只是怎样 ...
- codevs 1028 花店橱窗布置
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 假设以最美观的方式布置花店的橱窗,有F束花,V个花瓶,我们用美学值(一个整 ...
- 卓越管理的实践技巧(1)如何进行有效的指导 Guidelines for Effective Coaching
Guidelines for Effective Coaching 前文卓越管理的秘密(Behind Closed Doors)最后一部分提到了总结的13条卓越管理的实践技巧并列出了所有实践技巧名称的 ...
- 10款免费的MySQL数据库图形化管理工具
绝大多数的关系数据库都明显不同于MS Access,它们都有两个截然不同的部分:后端作为数据仓库,前端作为用于数据组件通信的用户界面.这种设计非常巧妙,它并行处理两层编程模型,将数据 层从用户界面中分 ...
- 复杂UI的组织-创建者模式-uitableview思想
复杂节目的组织-创建者模式-uitableview思想 整体说明,部件规格说明


