本文介绍: 自动化就是 selenium 脚本实现的,junitjava单元测试工具,只不过在实现自动化的时候需要借用一下 junit里面提供的一些注解这里的这个 csv 文件,不要直接改后缀生成,要用系统自带的 Excel 工具,来打开编辑 csv 文件。对比这两个实例中的用例执行顺序,我又产生了是不是按照方法名的字母顺序执行的呢?当我们需要测试多个类中用例时,如果一个一个类的去运行,那是非常耗时耗力的,表示当前方法测试方法执行这个类的时候会自动执行这个注释下的所有方法

目录

1.注解

1.1 @Test

1.2 @BeforeEach

1.3 @BeforeAll

1.4 @AfterEach

1.5 @AfterAll

2. 用例的执行顺序

通过 @order() 注解来排序

3. 参数化

3.1 单参数

3.2 多参数

3.3 多参数(从第三方csv文件读取数据源)

3.4 动态参数@ParameterizedTest + @MethodSource()

4. 测试套件

4.1 指定类来运行实例@Suite + @SelectClasses

4.2 指定包名来运行包下所有测试用例

5. 断言 Assertions类

5.1 断言匹配/不匹配Assertions.assertEquals()

5.2 断言结果为真/假Assertions.assertTrue()

5.3 断言结果为空/非空Assertions.assertNull()


 

自动化就是 selenium 脚本来实现的,junitjava单元测试工具,只不过在实现自动化的时候需要借用一下 junit里面提供的一些注解

注:博主版本为 Junit5,支持的 Java 版本最低要为 8

添加依赖

<dependency>
    <groupId&gt;org.junit.platform</groupId>
    <artifactId>junit-platform-suite</artifactId>
    <version>1.8.2</version>
    <scope>test</scope>
</dependency>

1.注解

1.1 @Test

@Test 表示当前方法测试方法,执行这个类的时候会自动执行这个注释下的所有方法

public class JunitTest {

    @Test//表示当前方法是测试方法,执行这个类时会自动执行这个类下的所有带 @Test 注解用例
    void baseZhujie(){
        System.out.println("这是一个测试方法");
    }

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

1.2 @BeforeEach

@BeforeEach 当前方法需要在每个用例执行之前都执行一遍

    @BeforeEach// 表示当前方法需要在每个用例执行之前都执行一遍
//    @Test
    void baseZhujie(){
        System.out.println("这是一个测试方法");
    }
    @Test
    void aaa(){
        System.out.println("aaa");
    }
    @Test
    void bbb(){
        System.out.println("bbb");
    }

1.3 @BeforeAll

@BeforeAll 表示当前方法需要在所有用例执行之前执行一次

    @Test
    void baseZhujie(){
        System.out.println("这是一个测试方法");
    }

    @BeforeAll// 表示当前方法需要在所有用例执行之前执行一次
//    @Test
    static void aaa(){
        System.out.println("aaa");
    }
    @Test
    void bbb(){
        System.out.println("bbb");
    }

1.4 @AfterEach

@AfterEach 表示当前发给发需要在每个用例执行之后都执行一遍

    @Test
    void baseZhujie(){
        System.out.println("这是一个测试方法");
    }

    @AfterEach // 表示当前方法需要在每个用例执行之后都执行一遍
//    @Test
    void aaa(){
        System.out.println("aaa");
    }
    @Test
    void bbb(){
        System.out.println("bbb");
    }

1.5 @AfterAll

@AfterAll 表示当前用例需要在每个用例执行之后执行一遍

    @Test
    void baseZhujie(){
        System.out.println("这是一个测试方法");
    }

//    @BeforeAll// 表示当前方法需要在所有用例执行之前执行一次
//    @AfterEach // 表示当前方法需要在每个用例执行之后都执行一遍
    @AfterAll// 当前方法需要在所有用例执行之后执行一次
//    @Test
    static void aaa(){
        System.out.println("aaa");
    }
    @Test
    void bbb(){
        System.out.println("bbb");
    }

注意:

@BeforeAll 和 @AfterAll 修饰的方法需要用 static 进行修饰才能正常运行

 

2. 用例的执行顺序

在先前我一直以为用例的执行顺序是按照排列顺序来执行的:

对比这两个实例中的用例的执行顺序,我又产生了是不是按照方法名的字母顺序来执行的呢?

但是后面我才了解到官方网站是并没有说明用例默认的执行顺序的!!

通过 @order() 注解排序

  1. 要先使用注解说明当前类下所有的用例需要使用 order 注解来进行排序
  2. 然后通过 Order 来指定用例的具体执行顺序

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)// 通过 order排序
public class JunitTest {
    @Order(1)
    @Test
    void editloginTest(){
    System.out.println("loginTest");
    }
    @Order(3)
    @Test
    void AindexTest(){
        System.out.println("indexTest");
    }
    @Order(2)
    @Test
    void editTest(){
        System.out.println("editTest");
    }
}

3. 参数

目的:尽可能的用一个用例来模拟多个用户行为

3.1 单参数

@ParameterzedTest + @ValueSource(数据类型方法 = {参数1,参数2,参数3,…})

    //声明该方法为参数化方法
    @ParameterizedTest
    //参数来源--单参数
    @ValueSource(strings = {"lucky","mary","tom"})
    void methodPramsTest(String username){
        System.out.println("name:" + username );
    }

3.2 多参数

@parameterizedTest + @CsvSource({“”, “”, ‘”, …}) 每个双引号就是一组测试用例

    //声明该方法为参数化方法
    @ParameterizedTest
    //参数来源--单参数
    @CsvSource({"张三,123","李四,123","王五,123"})//多参数(从注解手动编写数据源)
    void methodPramsTest(String username,int age){
        System.out.println("name:" + username + " age:" + age);
    }

3.3 多参数(从第三方csv文件读取数据源)

@ParameterizedTest + @CsvFileSource(files = “文件路径+名字”)

这里的这个 csv 文件,不要直接改后缀生成,要用系统自带的 Excel 工具,来打开编辑 csv 文件

这里出现乱码的情况就是因为没有使用电脑系统自带的Excel编辑

3.4 动态参数@ParameterizedTest + @MethodSource()

@ParameterizedTest + @MethodSource(“方法名”)

    @ParameterizedTest
    @MethodSource("paramSupport")
    void methodPramsTest(String username,int age){
        System.out.println("name:" + username + " age:" + age);
    }
    static Stream<Arguments> paramSupport() throws InterruptedException {
        //构造动态参数
        String[] arr = new String[5];
        for (int i = 0; i < arr.length; i++) {
            Thread.sleep(500);
            arr[i] = System.currentTimeMillis() + "";
        }
        return Stream.of(
                Arguments.arguments(arr[0],10),
                Arguments.arguments(arr[1],14),
                Arguments.arguments(arr[2],13),
                Arguments.arguments(arr[3],12),
                Arguments.arguments(arr[4],11)
        );
    }

注意:当@MethodSource不指定数据源时,会自动寻找与用例方法名相同的静态方法

4. 测试套件

我们需要测试多个类中的用例时,如果一个类一个类的去运行,那是非常耗时耗力的,

如果我们能够同时运行多个类就很好,所以可以使用测试套件来同时运行多个测试类

4.1 指定类来运行实例@Suite + @SelectClasses

//标识为测试套件类,而不是测试类
@Suite
@SelectClasses({aaa.class,bbb.class,ccc.class})//指定类
public class runSuite {

}

注意:想要用例被运行,用例必须要被 @Test 修饰

4.2 指定包名来运行包下所有测试用例

//标识为测试套件类,而不是测试类
@Suite
@SelectPackages("com.junit1121")//指定包名运行包下所有用例
public class runSuite {

}

但是我们的运行结果为:

在这里类 aaa,bbb,ccc  中的用例都没有正常运行

那是因为:        

如果使用包名来指定运行的范围,那么该包下来所有的测试类的命名需要以Test/Tests结尾(T必须要大写)

 

 

5. 断言 Assertions类

5.1 断言匹配/不匹配Assertions.assertEquals()

断言匹配:Assertions.assertEquals(期待得到对象,实际得到)

断言不匹配:Assertions.assertNotEquals(期待得到对象,实际得到)

    @Test
    void TestBefo(){
        ChromeDriver driver = new ChromeDriver();
        driver.get("https://www.baidu.com");
        String test = driver.findElement(By.cssSelector("#su")).getAttribute("value");//百度一下
        // 假如这里获取到的值不是“百度一下”而是“搜狐一下”这就是一个bug
        System.out.println(test);
        // 断言
        // 断言匹配/不匹配
        Assertions.assertEquals("搜狐一下",test);
        driver.quit();
    }

5.2 断言结果为真/假Assertions.assertTrue()

断言结果为真:Assertions.assertTrue()

断言结果为假:Assertions.assertFalse()

    @Test
    void ddd(){
        // 断言结果为真/假
//        Assertions.assertTrue(1==1);
        Assertions.assertFalse(1==0);
    }

5.3 断言结果为空/非空Assertions.assertNull()

断言结果为空:Assertions.assertNull()

断言结果为非空:Assertions.assertNotNull()

@Test
void ggg() {
    String aaa = null;
    Assertions.assertNull(aaa);//通过
}
@Test
void hhh() {
    Assertions.assertNotNull("你好");//通过
}

原文地址:https://blog.csdn.net/m0_62976995/article/details/134553780

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_14805.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注