JUnit 测试框架

JUnit

  • 注解
    • @test 注解
    • @BeforeEach 注解
    • @BeforeAll
    • @ AfterEach
    • @AfterAll
  • 断言
    • assertEquals
    • assertNotEquals
    • assertTrue
  • 用例执行顺序
  • 测试套件
    • 指定类,添加到套件中并执行
    • 一次添加一个包的类
  • 参数化
    • 单参数
    • 多参数
    • 借助文件
    • 动态参数

注解

@test 注解

通过对方法加上 @test 注解,就可以直接运行方法进行测试:

@Test
void Test() {
    ChromeDriver driver = new ChromeDriver();
    driver.get("https://www.baidu.com");
    driver.findElement(By.cssSelector("#kw")).sendKeys("火锅");
    driver.quit();
}

@BeforeEach 注解

就是在执行其它测试方法之前,会先执行这个注解的方法:

@BeforeEach
void aaa() {
    System.out.println("aaa");
}

@Test
void bbb() {
    System.out.println("bbb");
}

@Test
void ccc() {
    System.out.println("ccc");
}

运行结果如下:
JUnit 测试框架_第1张图片

@BeforeAll

不过要注意的是 @BeforeAll 注解的方法必须是 static 的:

@BeforeAll
@Test
static void aaa() {
    System.out.println("aaa");
}

@Test
void bbb() {
    System.out.println("bbb");
}

@Test
void ccc() {
    System.out.println("ccc");
}

运行结果如下:
JUnit 测试框架_第2张图片

@ AfterEach

@AfterEach 注解就是在方法之后执行这个方法:

@AfterEach
void aaa() {
    System.out.println("aaa");
}

@Test
void bbb() {
    System.out.println("bbb");
}

@Test
void ccc() {
    System.out.println("ccc");
}

运行结果如下:
JUnit 测试框架_第3张图片

@AfterAll

@AfterAll 注解的作用是在所有测试方法后执行:

@AfterAll
static void aaa() {
    System.out.println("aaa");
}

@Test
void bbb() {
    System.out.println("bbb");
}

@Test
void ccc() {
    System.out.println("ccc");
}

运行结果如下:
JUnit 测试框架_第4张图片

断言

assertEquals

通过 Assertions.assertEquals 可以判断元素的 value 值与期望值相不相等:

@Test
public void test1() {
    //测试百度首页内容显示是否正确
    ChromeDriver driver = new ChromeDriver();
    //进入百度网站
    driver.get("https://www.baidu.com");
    String text = driver.findElement(By.cssSelector("#su")).getAttribute("value");
    Assertions.assertEquals("百度一下",text);
    driver.quit();
}

因为预期结果与实际结果是一样的,所以测试是可以通过的。

assertNotEquals

和 assertEquals 正好相反,也就是与期望值不一样的时候,可以通过:

@Test
public void test1() {
    //测试百度首页内容显示是否正确
    ChromeDriver driver = new ChromeDriver();
    //进入百度网站
    driver.get("https://www.baidu.com");
    String text = driver.findElement(By.cssSelector("#su")).getAttribute("value");
    Assertions.assertNotEquals("百度一下",text);
    driver.quit();
}

因为与期望值一样,所以这里是不通过的。

assertTrue

参数是一个表达式,如果表达式为真,就通过:

@Test
public void test1() {
    //测试百度首页内容显示是否正确
    ChromeDriver driver = new ChromeDriver();
    //进入百度网站
    driver.get("https://www.baidu.com");
    String text = driver.findElement(By.cssSelector("#su")).getAttribute("value");
    Assertions.assertTrue(text.equals("百度一下"));
    driver.quit();
}

用例执行顺序

通过 JUnit 里面提供的方法来手动设置用例的执行顺序。通过 @TestMethodOrder(MethodOrderer.OrderAnnotation.class) 方法排序来完成。不排序的时候:

public class AutoTest {
    @Test
    void aaa() {
        System.out.println("aaa");
    }
    @Test
    void bbbbb() {
        System.out.println("bbb");
    }
    @Test
    void cccc() {
        System.out.println("ccc");
    }
    @Test
    void dddddd() {
        System.out.println("ddd");
    }
}

运行结果如下:
JUnit 测试框架_第5张图片

排序的时候 通过 @Order 注解来进行排序,标注执行顺序:

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class AutoTest {
    @Test
    @Order(1)
    void aaa() {
        System.out.println("aaa");
    }
    @Test
    @Order(2)
    void bbbbb() {
        System.out.println("bbb");
    }
    @Test
    @Order(3)
    void cccc() {
        System.out.println("ccc");
    }
    @Test
    @Order(4)
    void dddddd() {
        System.out.println("ddd");
    }
}

运行结果如下:
JUnit 测试框架_第6张图片

测试套件

主要就是针对很多个测试类来进行测试,比如说要一次测试多个类,并且去进行测试。

指定类,添加到套件中并执行

适用于添加少量的几个类
在这里插入图片描述
通过 @Suite 来把多个类加在一起,就可以一次性进行测试了:

@Suite
@SelectClasses({AutoTest.class,AutoTest2.class})
public class RunAllSuite {

}

运行结果如下:
JUnit 测试框架_第7张图片

一次添加一个包的类

通过 @SelectPackages() 注解来实现一次添加一个包里面的测试类。不过要注意的是,测试类的名字,必须是以 Test 结尾的,否则不会进行测试:

@Suite
@SelectPackages("com.example.onlinemusic.autotest")
public class RunAllSuite {

}

运行结果如下:
JUnit 测试框架_第8张图片

参数化

单参数

对方法使用 @ParameterizedTest 注解就可以了,要配合 @ValueSource 来找到数据源:

@ParameterizedTest
@ValueSource(strings = {"火锅","辣条","螺蛳粉","面条"})
void test(String name) {
    System.out.println("name: "+name);
}

数据来源就是 ValueSource 里面的参数。运行结果如下:
JUnit 测试框架_第9张图片

多参数

通过 @CsvSource(value = ) 注解来实现,默认分隔符是 逗号:

@ParameterizedTest
@CsvSource(value = {"火锅,20","辣条,30","螺蛳粉,40","铁锅炖大鹅,50"})
void test(String name, int age) {
    System.out.println("name: "+name + " age: " + age);
}

运行结果如下:
JUnit 测试框架_第10张图片
也可以通过 delimiterString = 来指定分隔符。

借助文件

通过 @CsvFileSource(resources = ) 来读取文件,然后进行操作,指定文件路径为当前项目下 resources 目录下的 my.scv 文件:

@ParameterizedTest
@CsvFileSource(resources = "/my.csv")
void test(String name, int age) {
    System.out.println("name: "+name + " age: " + age);
}

动态参数

通过 @MethodSource() 注解来提供参数:

@ParameterizedTest
@MethodSource("test2")
void test1(String x) {
    System.out.println(x);
}
//定义提供数据的方法,可以是 Stream 流
static Stream<String> test2() {
    return Stream.of("火锅","辣条","螺蛳粉");
}

运行结果如下:
JUnit 测试框架_第11张图片

你可能感兴趣的:(测试开发,JUnit测试框架,自动化测试,测试开发,测试)