国庆7天假期,大部分朋友都出去旅游了,微信圈里全是晒旅游的照片, 东南亚游,欧洲游呀,真是羡慕呀。 悲惨的我只去了上海野生动物园, 在家休息,利用这段假期,把以前学过的东西都总结下。 html
我前段时间加班太多了,天天忙碌工做,都没精力去管本身的学习新技能的计划, 博客也没写几篇,不少想作的事情都由于工做太忙而耽搁了。 因此工做太忙了也很差,没有精力关注工做之外的事情。 微信
最近写自动化测试天天都用到TestNG, 把经常使用的TestNG的用法总结下。框架
阅读目录eclipse
TestNG介绍ide
在Eclipse中在线安装TestNG单元测试
在Eclipse中离线安装Testng学习
TestNG最简单的测试测试
TestNG的基本注解网站
TestNG中如何执行测试ui
使用testtng.xml 文件执行 case
TestNG按顺序执行Case
TestNG异常测试
TestNG组测试
TestNG参数化测试
TestNG忽略测试
TestNG 依赖测试
TestNG测试结果报告
TestNG是Java中的一个测试框架, 相似于JUnit 和NUnit, 功能都差很少, 只是功能更增强大,使用也更方便
Java中已经有一个JUnit的测试框架了。 TestNG比JUnit功能强大的多。 测试人员通常用TestNG来写自动化测试。 开发人员通常用JUnit写单元测试。
官方网站: http://testng.org/doc/index.html
打开Eclipse Help ->Install New Software , 而后Add "http://beust.com/eclipse"
首先下载testng离线包: http://pan.baidu.com/s/1hrEaX6k
1. 将解压后的文件..\eclipse-testng离线包\features\org.testng.eclipse_6.9.9.201510270734 文件夹 放到 eclipse--》features目录下
2. 将解压后的文件..\eclipse-testng离线包\plugins\org.testng.eclipse_6.9.8.201510130443 文件夹 放到 eclipse--》plugins目录下
3. 重启eclipse
4. 验证是否安装成功,file-->new-->other-->TestNg
下面是TestNG的最简单的一个例子
package TankLearn2.Learn;import org.junit.AfterClass;import org.junit.BeforeClass;import org.testng.annotations.Test;public class TestNGLearn1 { @BeforeClass public void beforeClass() { System.out.println("this is before class"); } @Test public void TestNgLearn() { System.out.println("this is TestNG test case"); } @AfterClass public void afterClass() { System.out.println("this is after class"); } }
注解 | 描述 |
---|---|
@BeforeSuite | 注解的方法将只运行一次,运行全部测试前此套件中。 |
@AfterSuite | 注解的方法将只运行一次此套件中的全部测试都运行以后。 |
@BeforeClass | 注解的方法将只运行一次先行先试在当前类中的方法调用。 |
@AfterClass | 注解的方法将只运行一次后已经运行在当前类中的全部测试方法。 |
@BeforeTest | 注解的方法将被运行以前的任何测试方法属于内部类的 <test>标签的运行。 |
@AfterTest | 注解的方法将被运行后,全部的测试方法,属于内部类的<test>标签的运行。 |
@BeforeGroups | 组的列表,这种配置方法将以前运行。此方法是保证在运行属于任何这些组第一个测试方法,该方法被调用。 |
@AfterGroups | 组的名单,这种配置方法后,将运行。此方法是保证运行后不久,最后的测试方法,该方法属于任何这些组被调用。 |
@BeforeMethod | 注解的方法将每一个测试方法以前运行。 |
@AfterMethod | 被注释的方法将被运行后,每一个测试方法。 |
@DataProvider | 标志着一个方法,提供数据的一个测试方法。注解的方法必须返回一个Object[] [],其中每一个对象[]的测试方法的参数列表中能够分配。 该@Test 方法,但愿从这个DataProvider的接收数据,须要使用一个dataProvider名称等于这个注解的名字。 |
@Factory | 做为一个工厂,返回TestNG的测试类的对象将被用于标记的方法。该方法必须返回Object[]。 |
@Listeners | 定义一个测试类的监听器。 |
@Parameters | 介绍如何将参数传递给@Test方法。 |
@Test | 标记一个类或方法做为测试的一部分。 |
第一种直接执行:右键要执行的方法, 点Run As ->TestNG Test
第二种: 经过testng.xml文件来执行. 把要执行的case, 放入testng.xml文件中。 右键点击testng.xml, 点Run As
testng.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <suite name="Suite1"> <test name="test12"> <classes> <class name="TankLearn2.Learn.TestNGLearn1" /> </classes> </test> </suite>
在testng.xml中,能够控制测试用例按顺序执行。 当preserve-order="true"是,能够保证节点下面的方法是按顺序执行的
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1"> <test name="test12" preserve-order="true"> <classes> <class name="TankLearn2.Learn.TestNGLearn1"> <methods> <include name="TestNgLearn3" /> <include name="TestNgLearn1" /> <include name="TestNgLearn2" /> </methods> </class> </classes> </test></suite>
测试中,有时候咱们指望某些代码抛出异常。
TestNG经过@Test(expectedExceptions) 来判断期待的异常, 而且判断Error Message
package TankLearn2.Learn;import org.testng.annotations.Test;public class ExceptionTest { @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp="NullPoint") public void testException(){ throw new IllegalArgumentException("NullPoint"); } }
TestNG中能够把测试用例分组,这样能够按组来执行测试用例好比:
package TankLearn2.Learn;import org.testng.annotations.Test;public class GroupTest { @Test(groups = {"systemtest"}) public void testLogin(){ System.out.println("this is test login"); } @Test(groups = {"functiontest"}) public void testOpenPage(){ System.out.println("this is test Open Page"); } }
而后在testng.xml中 按组执行测试用例
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1"> <test name="test1"> <groups> <run> <include name="functiontest" /> </run> </groups> </test></suite>
软件测试中,常常须要测试大量的数据集。 测试代码的逻辑彻底同样,只是测试的参数不同。 这样咱们就须要一种 “传递测试参数的机制”。 避免写重复的测试代码
TestNG提供了2种传递参数的方式。
第一种: testng.xml 方式使代码和测试数据分离,方便维护
第二种:@DataProvider可以提供比较复杂的参数。 (也叫data-driven testing)
方法一: 经过testng.xml 传递参数给测试代码
package TankLearn2.Learn;import org.testng.annotations.Parameters;import org.testng.annotations.Test;public class ParameterizedTest1 { @Test @Parameters("test1") public void ParaTest(String test1){ System.out.println("This is " + test1); } }
testng.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1"> <parameter name="test1" value="Tank" /> <parameter name="test1" value="Xiao" /> <test name="test12"> <classes> <class name="TankLearn2.Learn.ParameterizedTest1" /> </classes> </test></suite>
方式二: 经过DataProvider传递参数
package TankLearn2.Learn;import org.testng.annotations.DataProvider;import org.testng.annotations.Test;public class DataProviderLearn { @DataProvider(name="user") public Object[][] Users(){ return new Object[][]{ {"root","passowrd"}, {"cnblogs.com", "tankxiao"}, {"tank","xiao"} }; } @Test(dataProvider="user") public void verifyUser(String userName, String password){ System.out.println("Username: "+ userName + " Password: "+ password); } }
有时候测试用例还没准备好, 能够给测试用例加上@Test(enable = false), 来禁用此测试用例
package TankLearn2.Learn;import org.testng.annotations.Test;public class TesgNGIgnore { @Test(enabled = false) public void testIgnore(){ System.out.println("This test case will ignore"); } }
有时候,咱们须要按顺序来调用测试用例, 那么测试用例之间就存在依赖关系。 TestNG支持测试用例之间的依赖
package TankLearn2.Learn;import org.testng.annotations.Test;public class DependsTest { @Test public void setupEnv(){ System.out.println("this is setup Env"); } @Test(dependsOnMethods = {"setupEnv"}) public void testMessage(){ System.out.println("this is test message"); } }
测试报告是测试很是重要的部分.
TestNG默认状况下,会生产两种类型的测试报告HTML的和XML的。 测试报告位于 "test-output" 目录下.
固然咱们也能够设置测试报告的内容级别.
verbose="2" 标识的就是记录的日志级别,共有0-10的级别,其中0表示无,10表示最详细
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1"> <test name="test12" verbose="2"> <classes> <class name="TankLearn2.Learn.TestNGLearn1" /> </classes> </test></suite>
来源:https://www.cnblogs.com/TankXiao/p/3888070.html?from=timeline