TestNG框架注解,测试集合,用例分组,依赖测试,特定顺序执行,跳过某个case执行,自定义日志,断言
1.注解:新建testNG框架的Annotation类,代码如下
public classAnnotation {
@Test
public voidtestCase1() {
System.out.println("测试用例1被执行");
}
@Test
public voidtestCase2() {
System.out.println("测试用例2被执行");
}
@BeforeMethod
public voidbeforeMethod() {
System.out.println("在每个测试方法开始运行前执行");
}
@AfterMethod
public voidafterMethod() {
System.out.println("在每个测试方法运行结束后执行");
}
@BeforeClass
public voidbeforeClass() {
System.out.println("在当前测试类的第一个测试方法之前调用执行");
}
@AfterClass
public voidafterClass() {
System.out.println("在当前测试类的最后一个方法执行结束后执行");
}
@BeforeTest
public voidbeforeTest() {
System.out.println("在测试类中的Test开始运行前执行");
}
@AfterTest
public voidafterTest() {
System.out.println("在测试类中的Test运行结束后执行");
}
@BeforeSuite
public voidbeforeSuite() {
System.out.println("当前测试集合中所有测试程序开始之前执行");
}
@AfterSuite
public voidafterSuite() {
System.out.println("当前测试集合所有测试程序执行结束后执行");
}
}
执行结果:
当前测试集合中所有测试程序开始之前执行
在测试类中的Test开始运行前执行
在当前测试类的第一个测试方法之前调用执行
在每个测试方法开始运行前执行
测试用例1被执行
在每个测试方法运行结束后执行
在每个测试方法开始运行前执行
测试用例2被执行
在每个测试方法运行结束后执行
在当前测试类的最后一个方法执行结束后执行
在测试类中的Test运行结束后执行
当前测试集合所有测试程序执行结束后执行
2. 测试集合需要新建testng.xml文件并进行配置如下:
<?xmlversion="1.0" encoding="UTF-8"?>
<suite name="Suite"parallel="false">
<test name="Grouping">
<classes>
<classname="demo.Annotation"/>
<classname="demo.prihthello"/>
</classes>
</test> <!-- Test -->
</suite><!-- Suite -->
执行结果:执行了两个class里面的case
3. 用例分组groups关键字,并要配置testng.xml文件,代码如下:
public class grouping{
@Test (groups={"人"})
public void student(){
System.out.println("student学生方法被调用");
}
@Test (groups={"人"})
public void teacher(){
System.out.println("teacher老师方法被调用");
}
@Test (groups={"动物"})
public void cat() {
System.out.println("cat小猫方法被调用");
}
@Test (groups={"动物"})
public void dog() {
System.out.println("dog小狗方法被调用");
}
@Test (groups={"人","动物"})
public void feeder(){
System.out.println("feeder饲养员方法被调用");
}
}
testng.xml配置如下:
<?xmlversion="1.0" encoding="UTF-8"?>
<suite name="Suite"parallel="false">
<test name="Grouping">
<groups>
<define name="all">
<include name="人"/>
<include name="动物"/>
</define>
<run>
<includename="all"/>
</run>
</groups>
<classes>
<classname="demo.grouping"/>
</classes>
</test> <!-- Test -->
</suite><!-- Suite -->
4. 依赖测试dependsonmethods参数,代码如下
//依赖测试
public class depends {
@Test (dependsOnMethods={"OpenBrowser"})
public void SignIn(){
System.out.println("SignIn方法被调用");
}
@Test
public voidOpenBrowser() {
System.out.println("OpenBrowser方法被调用");
}
@Test (dependsOnMethods={"SignIn"})
public void LogOut(){
System.out.println("LogOut方法被调用");
}
}
执行结果:
OpenBrowser方法被调用
SignIn方法被调用
LogOut方法被调用
5. 特定顺序执行 priority参数,代码如下:
public class priority{
@Test(priority=3)
public void test4() {
System.out.println("test4被调用");
Reporter.log("test4被调用");
}
@Test(priority=1)
public void test2() {
System.out.println("test2被调用");
Reporter.log("test2被调用");
}
@Test(priority=2,enabled=false)
public void test3() {
System.out.println("test3被调用");
Reporter.log("test3被调用");
}
@Test (priority=0)
public void test1() {
System.out.println("test1被调用");
}
}
执行结果:
test1被调用
test2被调用
test3被调用
test4被调用
6.跳过某个case使用enable=false,代码如下
@Test (enabled=false)
public void test3() {
System.out.println("test3被调用");
}
执行结果:该test3用例不会被执行
7. 自定义日志Reporter.log(""),代码如下;
@Test (priority=0)
public void test1() {
Reporter.log("test1被调用");
}
执行结果:在index.html中Reporter.output模块显示“test1被调用”
8.断言Assert,代码如下:
Assert.assertTrue(true/false);
执行结果:当断言执行成功,会继续执行后续语句
当断言执行失败,不继续执行后续语句