@EdwinTang
2016-03-15T15:48:33.000000Z
字数 3489
阅读 962
TESTNG 入门
TestNG设计涵盖所有类型的测试:单元,功能,端到端,集成等
在Eclipse市场搜索TESTNG安装

在Eclipse中创建TESTNG

| 注解 | 描述 |
|---|---|
| @BeforeSuite | 注解的方法将只运行一次,此套件所有测试运行之前。 |
| @AfterSuite | 注解的方法将只运行一次,所套件所有测试运行之后。 |
| @BeforeClass | 注解的方法将只运行一次,在当前类方法调用之前。 |
| @AfterClass | 注解的方法将只运行一次,在当前类方法调用之后。 |
| @BeforeTest | 注解的方法将在所有的测试方法被运行之前执行。 |
| @AfterTest | 注解的方法将在所有的测试方法被运行之后执行。 |
| @BeforeMethod | 注解的方法将在每个测试方法之前运行。 |
| @AfterMethod | 注解的方法将在每个测试方法之后运行。 |
| @DataProvider | 提供数据的一个测试方法。必须返回一个Object[][] |
| @Parameters | 介绍如何将参数传递给@Test。 |
| @Test | 标记一个测试。 |
执行时序:
以一个拥有两个测试用例的测试套为例,执行顺序如下:
1.忽略测试
@Test(enabled=false)
@Test(enabled = false)public void testEnabledTest() {System.out.println("testEnabledTest()");status = "false";Assert.assertEquals(status, testNG.enabledTest());}
此测试将不被执行
2.组测试
可能根据用例功能进行分析,以方便进行各种形式的测试组织
如可以为某一用例进行冒烟测试,回归测试,正常功能测试分组,以保证在不同的测试中进行调用;当然也可能根据功能模块为测试用例进行标识,以方便功能块的组织验证。
@Test(groups = { "mocking testing","regression testing",})public void testGroupsTestNG() {System.out.println("GroupsTestNG()");result = "testgroup" + ".com";Assert.assertEquals(result, groupsTestNG.groups());}
xml执行脚本
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="SuiteGroup"><test name="test1"><groups><run><include name="mocking testing" /></run></groups></test></suite>
对于需要排除个别标识可以使用exclude name="标识名"进行剔出如冒烟测试时排除登陆测试:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="SuiteGroup"><test name="test1"><groups><run><include name="mocking testing" /><exclude name="login model" /></run></groups></test></suite>
3.异常测试
异常测试与JUNIT类似,具体注释方法如下:
@Test(expectedExceptions = ArithmeticException.class)public void testPrintMessage() {System.out.println("expectedExceptions()");expectedExceptions.status();}
4.依赖测试
依赖测试是有别于JUNIT的测试,也是TESTNG的一大特征之一,依赖测试给测试工作带来了非常大的方便。如删除操作,通常依赖新增操作如:
@Test(dependsOnMethods = { "addTest" })public void testDelete() {System.out.println("Delete()");delete.status();}@Testpublic void addTest() {System.out.println("add()");add.status();}
4.参数化测试
参数化测试例子如下:
public class ParamTest {@Test@Parameters("userName")public void parameterTest(String userName) {System.out.println("Parameterized value : " + userName);}}
执行程序如下:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="SuiteParam"><test name="test1"><parameter name="userName" value="Edwin"/><classes><class name="ParamTest" /></classes></test></suite>
或者通过程序自己完成
@DataProvider(name = "username")public static Object[][] primeNumbers() {return new Object[][] {{ Edwin, true }, { Tony, false }};}@Test(dataProvider = "username")public void testUserName(String userName,Boolean expectedResult) {System.out.println(userName + " " + expectedResult);Assert.assertEquals(expectedResult,userName.validate(userName));}
通过XML创建执行
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite-Testing"><test name="Test1"><classes><class name="TestNG"/></classes></test></suite>
| 属性 | 描述 |
|---|---|
| name | 套件的名称。这是一个强制性的属性。 |
| verbose | 这个运行级别 |
| parallel | 由TestNG 运行不同的线程来运行此套件。 |
| thread-count | 使用的线程数,如果启用并行模式(忽略其他方式)。 |
| annotations | 在测试中使用注释的类型。 |
| time-out | 默认的超时时间。 |