本篇为JAVA自动化的第四篇章,主要为TestNG基础使用
主要讲述后续自动化中能够使用得部分,如果想了解更多可以查看官方文档
学习条件:JAVA基础部分,注解基本使用
TestNG(Testing Next Generation)是一个单元测试框架,它提供了丰富的注解来帮助我们更加方便的编写和管理被测项目的测试类和测试方法。
Maven相关配置:https://mvnrepository.com 在此网站找到相关版本,或者直接复制下方
<dependency>
<groupId>org.testnggroupId>
<artifactId>testngartifactId>
<version>7.0.0version>
<scope>testscope>
dependency>
在测试过程中,不希望执行此方法,可以添加忽略标签来跳过此方法
@Test(enable = false)
package testng;
import org.testng.annotations.Test;
public class label {
/**
* test1将不会执行
*/
@Test(enabled = false)
public void test1(){
System.out.println("执行测试->1");
}
@Test
public void test2(){
System.out.println("执行测试->2");
}
@Test
public void test3(){
System.out.println("执行测试->3");
}
}
测试的某个方法依赖于另一个方法
@Test(dependsOnMethods={"otherMethod"})
package testng;
import org.testng.annotations.Test;
public class label {
/**
执行顺序:
1.先执行被依赖的方法---otherMethod
2.执行没有被以来的方法
3.最后执行需要依赖的测试方法---thisMethod
*/
@Test(dependsOnMethods = {"test3"})
public void test1(){
System.out.println("执行测试->1");
}
@Test
public void test2(){
System.out.println("执行测试->2");
}
@Test
public void test3(){
System.out.println("执行测试->3");
}
}
超时表示如果自动化测试中超过了执行的毫秒数,那么TestNG会中止它,并且标记为失败
@Test(timeout=1000) //标记为1000毫秒
package testng;
import org.testng.annotations.Test;
public class label {
/**
* test1超时执行失败
*/
@Test(timeOut = 1000)
public void test1() throws InterruptedException {
Thread.sleep(1100);
System.out.println("执行测试->1");
}
}
设置优先级,指定用例的执行顺序
@Test(priority = 0)
package testng;
import org.testng.annotations.Test;
public class label {
/**
* test2优先执行,数字越小优先级越高,默认级别为0
*/
@Test(priority = 1)
public void test1(){
System.out.println("执行测试->1");
}
@Test(priority = 0)
public void test2(){
System.out.println("执行测试->2");
}
}
指定执行的次数
@Test(invocationCout = 3)
package testng;
import org.testng.annotations.Test;
public class label {
/**
* test1执行三次
*/
@Test(invocationCount = 3)
public void test1() {
System.out.println("执行测试->1");
}
}
在测试开始前执行和开始后执行
package testng;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
/**
* Before 和 After 注解 ,用例执行前,用例执行后
* @BeforeSuite:带注释的方法将在该套件中的所有测试运行之前运行。
* @AfterSuite:带注释的方法将在此套件中的所有测试运行后运行。
* @BeforeTest:带注释的方法将在属于标记内的类的任何测试方法运行之前运行。
* @AfterTest:在标记内属于类的所有测试方法运行后,将运行带注释的方法。
* @BeforeGroups:此配置方法将在之前运行的组列表。这个方法保证在属于这些组中的任何一个的第一个测试方法被调用之前运行。
* @AfterGroups:此配置方法将在后面运行的组列表。该方法保证在属于这些组中的任何一个的最后一个测试方法被调用后不久运行。
* @BeforeClass:带注释的方法将在调用当前类中的第一个测试方法之前运行。
* @AfterClass:带注释的方法将在当前类中的所有测试方法运行之后运行。
* @BeforeMethod:带注释的方法将在每个测试方法之前运行。
* @AfterMethod:带注释的方法将在每个测试方法之后运行。
*/
public class beforeAfterDemo {
/**
* 前置操作---记录时间,读取资源......
*/
@BeforeTest
public void log(){
System.out.println("记录");
}
@Test
public void test(){
System.out.println("测试->1");
}
/**
* 后置操作---记录时间,关闭资源......
*/
}
//标记参数
@DataProvider(name = "设置的名字")
//使用此参数
@Test(dataProvider = "指定的名字")
package testng;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class DataProviderDemo {
/**
* 当需要多个参数时,可以使用@DataProvider,设置
* 这里使用登录举例
*/
@Test(dataProvider = "datas")
private void testLogin(User user) {
System.out.println();
}
@DataProvider
public Object[] datas() {
User user1 = new User("KAI1", "123");
User user2 = new User("KAI2", "456");
User user3 = new User("KAI3", "135");
return new Object[]{user1,user2,user3};
}
}
package testng;
public class User {
private String username;
private String password;
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
@Override
public String toString() {
return "user{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
本篇简单介绍了testNG的注解用法,主要为后续JAVA自动化中做准备,想要详细了解可以前往官网查看