1、常用的注解
使用testng需要在pom文件中引入的依赖
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.11</version>
<scope>compile</scope>
</dependency>
- @Test 表示这是一个测试方法
- beforeSuit:测试套件在beforeClass之前执行
beforeClass:这是在类执行之前执行
beforeMethod:这是在方法执行之前运行的
Test:这是第一个测试方法
afterMethod:这是在方法执行之后运行的
beforeMethod:这是在方法执行之前运行的
Test这是第二个测试方法
afterMethod:这是在方法执行之后运行的
afterClass:这是在类执行之后执行
afterSuit:测试套件在afterClass之后执行
2、套件测试testsuit
1、最重要创建一个xml文件名字随意,最后运行的时候运行的是这个文件,文件就是简单的xml文件;
<?xml version="1.0" encoding="utf-8" ?>
<!--执行的是suit中的内容,并且是按照test的顺序-->
<suite name="test">
<test name="login">
<!-- 执行的类按照顺序执行,并且其中包含同一个SuitConfig-->
<classes>
<class name ="com.course.testng.suit.SuitConfig"/>
<class name ="com.course.testng.suit.LoginTest"/>
</classes>
</test>
<test name="pay">
<classes>
<class name ="com.course.testng.suit.SuitConfig"/>
<class name ="com.course.testng.suit.PayTest"/>
</classes>
</test>
</suite>
SuitConfig代码
public class SuitConfig {
@BeforeSuite
public void beforeSuit(){
System.out.println("before Suit运行了");
}
@AfterSuite
public void afterSuit(){
System.out.println("after Suit运行了");
}
@BeforeTest
public void beforeTest(){
System.out.println("beforeTest执行");
}
@AfterTest
public void afterTest(){
System.out.println("afterTest执行");
}
}
两外两个就是一个@test的方法
执行结果
3、忽略测试ignore
4、testng组测试
1、把方法级别分组测试,只针对某些相同分组方法生效。例子如图
public class GroupsOnMethoud {
public class GroupsOnMethoud {
@Test(**groups = "server"**)
public void test1(){
System.out.println("这是服务端组的测试方111");
}
@Test(groups = "server")
public void test2(){
System.out.println("这是服务端组的测试方2222");
}
@Test(groups = "client")
public void test3(){
System.out.println("这是客户端组的测试方333");
}
**@BeforeGroups("server")**
public void beforeGrouponserver(){
System.out.println("在服务端组运行之前运行");
}
@AfterGroups("server")
public void afterGrouponserver(){
System.out.println("在服务端组运行之后运行");
}
}
在服务端组运行之前运行
这是服务端组的测试方111
这是服务端组的测试方2222
在服务端组运行之后运行
这是客户端组的测试方333
2、类分组测试,把类文件分组测试
创建几个类在类中标注是哪些分组@Test(groups = “stu”)
然后创建xml文件控制执行哪些分组也就是这些分组下的类
**@Test(groups = "stu")**
public class GroupOnclass1 {
public void stu1(){
System.out.println("GroupOnclass1中的stu1");
}
public void stu2(){
System.out.println("GroupOnclass1中的stu2");
}
}
**@Test(groups = "teacher")**
public class GroupOnclass3 {
public void teacher1(){
System.out.println("GroupOnclass3中的teacher1");
}
public void teacher2(){
System.out.println("GroupOnclass3中的teacher2");
}
}
**<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >**
<suite name="suitname">
<test name="onlyRunStu">
**<groups>
<run>
<include name="stu"/>
</run>
</groups>**
<classes>
<class name="com.course.testng.groups.GroupOnclass1" />
<class name="com.course.testng.groups.GroupOnclass2" />
<class name="com.course.testng.groups.GroupOnclass3" />
</classes>
</test>
</suite>
5、testng异常测试
什么时候用到异常测试?就是当我们的期望结果是一个异常的时候
6、依赖测试
如果依赖的方法异常了则该方法就没办法执行了
7、传参测试
1、首先创建一个方法使用参数,然后创建xml文件为参数传值
2、使用dataaprovider属性传值如图
dataaprovider支持根据方法来进行传参
8、多线程测试
1、使用注解的方式实现,如果参数不与其他方法关联建议使用,如果关联不建议使用
public class MulitThreadAnnotion {
//invocationCount是线程数,其中默认的线程池是1;threadPoolSize是指定的线程池数
@Test(invocationCount = 10,threadPoolSize = 3)
public void test1(){
System.out.println("线程执行");
System.out.printf("线程id:%s%n",Thread.currentThread().getId());
}
}
2、使用xml实现多线程
首先创建需要测试的方法,然后创建控制线程的xml文件
9、超时测试timeout
响应超过了设置的时间就会抛出异常