软件测试之Junit相关技术

目录

1.Junit是什么?

2.常用注解 

@Test

@Disabled

 @BeforeAll@AfterAll

 @BeforeEach@AfterEach

3.参数化

单参数

CSV获取参数

方法获取参数

用例执行顺序问题

4.断言

5.测试套件

指定类执行

指定包执行


selenium是自动化测试框架,Junit是单元测试框架

使用技术写自动化测试用例(selenium3)

使用技术管理已经编写好的测试用例(Junit5)

1.Junit是什么?

Junit 是一个用于 Java 编程语言的开源单元测试框架,被广泛应用于软件开发中进行单元测试。

使用Junit需要导入的依赖

<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.9.1</version>
    <scope>test</scope>
</dependency>

2.常用注解 

@Test

表示当前方法是一个测试用例

public class Test11 {
    @Test
    public void test1(){
        System.out.println("junit中的test1");
    }
}

 

点击class左侧的run,会执行所有的测试,每个方法的左边的run只执行当前方法

@Disabled

忽略带有该注解的测试方法

public class Test11 {
    @Test
    public void test1(){
        System.out.println("junit中的test1");
    }
    @Test
    public void test2(){
        System.out.println("junit中的test2");
    }
    @Disabled
    public void test3(){
        System.out.println("junit中的test3");
    }
}

执行class的run,结果没有出现test3,被忽略了

 @BeforeAll@AfterAll

  • @BeforeAll 标记的方法在所有测试方法执行之前运行,通常用于在所有测试开始之前进行一次性的准备工作。例如,可以在 @BeforeAll 方法中初始化共享资源、创建数据库连接等操作。
  • @AfterAll 标记的方法在所有测试方法执行结束后运行,通常用于进行一次性的清理和资源释放工作。例如,可以在 @AfterAll 方法中关闭数据库连接、清理临时文件等操作。
  • 这些方法必须是静态方法,并且不能接受任何参数,因为它们在测试类实例化之前就会被执行。
public class Test11 {
    @Test
    public void test1(){
        System.out.println("junit中的test1");
    }
    @Test
    public void test2(){
        System.out.println("junit中的test2");
    }
    @Disabled
    public void test3(){
        System.out.println("junit中的test3");
    }


    @BeforeAll
    static void SetUpTest(){
        System.out.println("junit中的BeforeAll");
    }
    @AfterAll
    static void TearDown(){
        System.out.println("junit中的AfterAll");
    }

 

 @BeforeEach@AfterEach

  • @BeforeEach 标记的方法在每个测试方法执行之前运行,通常用于在每个测试开始之前进行一些准备工作。例如,可以在 @BeforeEach 方法中初始化测试数据、创建对象实例等操作
  • @AfterEach 标记的方法在每个测试方法执行结束后运行,通常用于进行清理工作并还原测试环境。例如,可以在 @AfterEach 方法中清理测试数据、释放资源等操作。
  • 这些方法必须是非静态方法,并且不能接受任何参数,因为它们在每个测试方法执行前后都会被执行。
public class Test11 {
    @Test
    public void test1(){
        System.out.println("junit中的test1");
    }
    @Test
    public void test2(){
        System.out.println("junit中的test2");
    }
    @Disabled
    public void test3(){
        System.out.println("junit中的test3");
    }


//    @BeforeAll
//    static void SetUpTest(){
//        System.out.println("junit中的BeforeAll");
//    }
//    @AfterAll
//    static void TearDown(){
//        System.out.println("junit中的AfterAll");
//    }

    @BeforeEach
    void BeforeEachTest(){
        System.out.println("BeforeEachTest");
    }
    @AfterEach
    void AfterEachEachTest(){
        System.out.println("AfterEachTest");
    }
}

3.参数化

当加入两个参数后运行会报错

No ParameterResolver registered for parameter [int arg0] in method [public void Test11.test1(int,int)].

引入参数化依赖

<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-params</artifactId>
    <version>5.9.1</version>
    <scope>test</scope>
</dependency>

单参数

int型 

    @ParameterizedTest
    @ValueSource(ints = {1,2,3})
    void test4(int num){
        System.out.println(num);
    }

  

 

单参数:string型 

    @ParameterizedTest
    @ValueSource(strings =  {"1","2","3"})
    void test5(int num){
        System.out.println(num);
    }

 

CSV获取参数

CSV是什么?

CSV(Comma-Separated Values)是一种常见的文件格式,用于存储和传输表格数据。

格式:逗号作为字段之间的分隔符,每行表示一个记录,每个字段表示记录中的一个属性。必须以.csv后缀结尾

CSV 文件是以纯文本形式存储,可以使用任何文本编辑器打开和编辑。每行记录中的字段可以使用引号包围,以处理包含逗号或换行符的特殊情况。通常,第一行会用于存储列名,而后续行则包含实际的数据。

使用 CSV 文件可以更好地组织和管理大量的测试参数。您可以根据需要创建多个 CSV 文件,按照不同的场景、测试用例或测试数据集对参数进行分类并存储在独立的文件中。这样可以提高参数的可维护性和复用性。

    @ParameterizedTest
    @CsvFileSource(resources = "test1.csv")
    void test6(String num,String age,String work){
        System.out.println(num+" "+age+" "+ work);
    }

  

 

 只能获取同一类型的参数

方法获取参数

    @ParameterizedTest
    @MethodSource("Generator")
    void test7(int num,String name){
        System.out.println(name+":"+num);
    }
    public static Stream<Arguments> Generator() {
        return Stream.of(Arguments.arguments(1,"张三"),Arguments.arguments(2,"张三2"),Arguments.arguments(3,"张三3"));
    }

获取不同类型的参数,注意不能搭配@Test使用,会只执行Test,报错 

用例执行顺序问题

public class Test2 {
    @Test
    void method3(){
        System.out.println("method3");
    }
    @Test
    void method1(){
        System.out.println("method1");
    }
    @Test
    void method2(){
        System.out.println("method2");
    }
}

 

与代码顺序无关,可通过注解设置选后执行顺序:@Order,或者设置随机执行


@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class Test2 {
    @Order(1)
    @Test
    void method3(){
        System.out.println("method3");
    }
    @Order(2)
    @Test
    void method1(){
        System.out.println("method1");
    }
    @Order(3)
    @Test
    void method2(){
        System.out.println("method2");
    }
}

 

4.断言

断言相等

    @ParameterizedTest
    @ValueSource(ints = {2})
    void test4(int num){
        System.out.println(num);
        Assertions.assertEquals(1,num);
    }

 断言不相等

    @ParameterizedTest
    @ValueSource(ints = {2})
    void test4(int num){
        System.out.println(num);
        Assertions.assertNotEquals(2,num);
    }

 

断言为空

    @ParameterizedTest
    @ValueSource(ints = {2})
    void test4(int num){
        System.out.println(num);
//        Assertions.assertNotEquals(2,num);
        String  str = "world";
        Assertions.assertNull(str);
    }

断言不为空

    @ParameterizedTest
    @ValueSource(ints = {2})
    void test4(int num){
        System.out.println(num);
//        Assertions.assertNotEquals(2,num);
        String  str = null;
        Assertions.assertNotNull(str);
    }

5.测试套件

指定类执行

先引入依赖

<!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite -->
<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-suite</artifactId>
    <version>1.9.1</version>
    <scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.9.1</version>
    <scope>test</scope>
</dependency>
@Suite
@SelectClasses({Test2.class,Test11.class})
public class RunSuite {
}

选择类进行测试用例执行,先执行test2,再执test11

指定包执行

@Suite
@SelectPackages("package1")
public class RunSuite {
}

有多个包,可以使用value数组的形式来执行 

 

 格式:

@SelectPackages(value={"package1","package2",......)

猜你喜欢

转载自blog.csdn.net/chenchenchencl/article/details/131819302
今日推荐