@EdwinTang
2016-03-15T23:48:33.000000Z
字数 3489
阅读 874
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();
}
@Test
public 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 | 默认的超时时间。 |