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容器相关的注解,先后有:@ ...
随机推荐
- php时间戳存在8小时误差
当将PHP时间戳转化为正常的时间格式一般的操作方法如下: $mytime=time(); echo $mytime.'<br />'; echo date('Y-m-d H:i:s',$m ...
- MongoDB 最初级步骤
对库TEST下的LOG聚集集合中的inserttim字段加索引 步骤(注意:前四步步骤不能错,错了不行): 一,打开F:\mongodb\bin\mongo.exe,也可以用cmd命令指到这个exe执 ...
- Python定时任务sched(一)
这里介绍一下python中定时任务:sched python中自带的是sched,也可以通过pip下载schedule进行任务定时处理,这里先简单介绍下sched的使用 import datetime ...
- 洛谷 P2983 [USACO10FEB]购买巧克力Chocolate Buying
购买巧克力Chocolate Buying 乍一看以为是背包,然后交了一个感觉没错的背包上去. #include <iostream> #include <cstdio> #i ...
- [转载]SAP预装服务器全编译
一.说明 SAP系统初始安装后,每当事物码第一次运行时,GUI的左下角会显示编译的状态(如图 1所示),费时很多尤其是对于一些业务内容很丰富的事物码如ME21N.VA01. 图 1 编译状态 产生编译 ...
- Android仿360悬浮小球自定义view实现
转载请标明出处:http://www.jianshu.com/u/a5ad093cffe8 效果图如下: 图片.png 图片.png 实现当前这种类似的效果 (360小球 悬浮桌面差不错类似).第 ...
- iOS-Swift相比Objective-C有哪些优缺点
Swift,是苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序.它是一款易学易用的编程语言,而且 ...
- python3操作excel01(对excel的基础操作)
#!/usr/bin/env python# -*- coding:UTF-8 -*- import requestsfrom bs4 import BeautifulSoupfrom bs4 imp ...
- Python3自动化学习地址
w3社区https://www.w3cschool.cn/python/ 易百教程https://www.yiibai.com/ http://www.cnblogs.com/yangxia-test ...
- Python+selenium之Page Object设计模式
Page Object是selenium自动化测试项目开发实践的最佳设计模式之一,他主要提现在对界面交互细节的封装,这样可以使测试案例隔你给加关注于业务而非界面细节,从而提高测试案例的可读性. Pag ...