TestNG用法总结
- 常用注解见表格
注解 | 描述 |
---|---|
@BeforeSuite | 注解的方法将只运行一次,运行所有测试前此套件中。 |
@AfterSuite | 注解的方法将只运行一次此套件中的所有测试都运行之后。 |
@BeforeClass | 注解的方法将只运行一次先行先试在当前类中的方法调用。 |
@AfterClass | 注解的方法将只运行一次后已经运行在当前类中的所有测试方法。 |
@BeforeTest | 注解的方法将被运行之前的任何测试方法属于内部类的 <test>标签的运行。 |
@AfterTest | 注解的方法将被运行后,所有的测试方法,属于内部类的<test>标签的运行。 |
@BeforeGroups | 组的列表,这种配置方法将之前运行。此方法是保证在运行属于任何这些组第一个测试方法,该方法被调用。 |
@AfterGroups | 组的名单,这种配置方法后,将运行。此方法是保证运行后不久,最后的测试方法,该方法属于任何这些组被调用。 |
@BeforeMethod | 注解的方法将每个测试方法之前运行。 |
@AfterMethod | 被注释的方法将被运行后,每个测试方法。 |
@DataProvider | 标志着一个方法,提供数据的一个测试方法。注解的方法必须返回一个Object[] [],其中每个对象[]的测试方法的参数列表中可以分配。该@Test 方法,希望从这个DataProvider的接收数据,需要使用一个dataProvider名称等于这个注解的名字。 |
@Factory | 作为一个工厂,返回TestNG的测试类的对象将被用于标记的方法。该方法必须返回Object[]。 |
@Listeners | 定义一个测试类的监听器。 |
@Parameters | 介绍如何将参数传递给@Test方法。 |
@Test | 标记一个类或方法作为测试的一部分。 |
- TestNG的简单使用
package com.test;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.*;
public class Testng01 {
@BeforeClass
public void test() {
System.out.println("11111111111");
}
@Test
public void test2() {
System.out.println("22222222222222");
}
@AfterClass
public void test3() {
System.out.println("333333333333");
}
}
xml:
<!-- testng注解的普通用法 -->
<test name="test2">
<classes>
<class name="com.test.Testng01" />
</classes>
</test>
-
运行结果如图:
运行结果
- 组测试
组测试即为在进行测试时可以通过testng.xml来指定执行相关的命名的组,使用@Test(groups = {"name"})
注解来指定名称
如下代码所示:
package com.test;
import org.testng.annotations.Test;
public class TestngLearn01 {
@Test(groups = {"systemtest"})
public void test1() {
System.out.println("this is test learn01");
}
@Test(groups = {"functiontest"})
public void test2() {
System.out.println("this is test learn02");
}
}
xml:
<test name = "test1" >
<groups>
<run>
<include name = "systemtest" />
</run>
</groups>
<packages>
<package name = "com.test.*" />
</packages>
</test>
- 忽略测试
使用@Test(enabled = false)
来说明该这个case不需要执行
代码:
package com.test;
import org.testng.annotations.Test;
//testng忽略测试
public class TesgNGIgnore {
@Test(enabled = false)
public void testIgnore1() {
System.out.println("这条测试信息被忽略");
}
@Test
public void testIgnore2() {
System.out.println("这条测试用来验证是否被忽略");
}
}
- 异常测试
在工作总可能会碰到需要这个方法抛出什么样的异常来的测试,此时使用异常测试
代码:
package com.test;
import org.testng.annotations.Test;
//异常测试
public class ExceptionTest {
@Test(expectedExceptions = IllegalArgumentException.class,expectedExceptionsMessageRegExp="NullPoint")
public void testException() {
throw new IllegalArgumentException("NullPoint");
}
}
- 依赖测试
如代码所示:
package com.test;
import org.testng.annotations.Test;
/**
* 如果setupEnv成功执行则会执行testMessage;
* 如果setupEnv未成功执行则不会执行testMessage。
* **/
public class DependsTest {
@Test
public void setupEnv(){
System.out.println("this is setup Env");
// throw new RuntimeException(); 若setupEnv执行失败则会跳过testMessage
}
@Test(dependsOnMethods = {"setupEnv"})
public void testMessage(){
System.out.println("this is test message");
}
}
- 参数化测试01
testng.xml 方式使代码和测试数据分离,方便维护
package com.test;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
/**
*
* testng.xml 方式使代码和测试数据分离,方便维护
* TestNG参数化测试01
* */
public class ParametricTesting01 {
@Test
@Parameters({"test1","test2"})
public void ParaTest(String test1,String test2) {
System.out.println("This is " + test1 + test2);
}
}
xml:
<!-- 参数测试xml方式 -->
<parameter name = "test1" value ="heqq"/>
<parameter name="test2" value=" test"/>
<test name = "test3">
<classes>
<class name = 'com.test.ParametricTesting01'/>
</classes>
</test>
- 参数化测试02
通过DataProvider传递参数,注意传递参数时参数是按照传参的顺序排列的参数组
package com.test;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
/**
*
* 通过DataProvider传递参数
* TestNG参数化测试02
* */
public class ParametricTesting02 {
@DataProvider(name = "username")
public Object[][] Users(){
return new Object[][] {
{"root "," password"},
{"test "," heqq"},
{"qq "," he"}
};
}
@Test(dataProvider = "username")
public void user(String name,String password) {
System.out.println("My name is " + name +"but my password is" + password);
}
}
全部的xml:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Fourth suite" verbose="1" >
<!-- 组测试 -->
<test name = "test1" >
<groups>
<run>
<include name = "systemtest" />
</run>
</groups>
<packages>
<package name = "com.test.*" />
</packages>
</test>
<!-- testng注解的普通用法 -->
<test name="test2">
<classes>
<class name="com.test.Testng01" />
</classes>
</test>
<!-- 参数测试xml方式 -->
<parameter name = "test1" value ="heqq"/>
<parameter name="test2" value=" test"/>
<test name = "test3">
<classes>
<class name = 'com.test.ParametricTesting01'/>
</classes>
</test>
</suite>
网友评论