selenium2中的TestNg注解和数据驱动的简介及使用
2015-10-31 11:11
489 查看
TestNg常用注解介绍,先来张图:
先看一下,以上各个注释的运行次序:
@Test
@BeforeMethod/@ 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文件代码如下:
testPackage.xml具体代码如下:
testClass.xml具体代码如下:
testMethod.xml具体代码如下:
最后打个广告,不要介意哦~
最近我在Dataguru学了《软件自动化测试Selenium2》网络课程,挺不错的,你可以来看看!要是想报名,可以用我的优惠码 G863,立减你50%的固定学费!
链接:http://www.dataguru.cn/invite.php?invitecode=G863
先看一下,以上各个注释的运行次序:
@Test
@BeforeMethod/@ 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
相关文章推荐
- 【软考】软件开发模型
- mysql 数据库实际应用中的大数据处理
- TCP协议与IP协议之间的关系?为什么TCP协议能实现可靠传输?
- 使用install4j打包java项目教程及一些小问题的解决
- 提权【几种提权方式】
- English summary in October
- HDU2952——Counting Sheep(搜索)
- 进程与线程之间的区别
- Dynamic Compiler
- JS实现的论坛Ajax打分效果完整实例
- autorun file for ohasd is missing(2)
- PS学习心得(二)
- java 实现WebService 以及不同的调用方式
- Cannot find PHPUnit in include path (.;C:\php5\pear)
- 2015届校园招聘会感悟
- java 的 Thread_wait、notify、notifyAll的使用方法
- 数组中找最大值与最小值
- 提权【5】
- jQuery读取xml文件
- github的注册及登陆后信息的设置