自动化测试08

Junit

为什么学了Selenium还需学习Junit

Selenium自动化测试框架;Junit单元测试框架。

拿着一个技术写自动化测试用例(Selenium3)

拿着一个技术管理已经编写好的测试用例(Junit5)

Junit相关的技术

Junit是针对Java的一个单元测试框架

注解:

@Test:

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

@Disabled

当前方法被忽略

@BeforeAll,@AfterAll,@BeforeEach,@AfterEach

你把什么样的程序放到BeforeAll里面,把什么样的程序放到AfterAll里面?

初始化放在前面,关闭数据库放在后边。

如果做UI自动化,通常情况下,创建驱动,打开网页,放到BeforeAll,关闭浏览器放到AfterAll里边。

@Test
    public void Test01() {
        System.out.println("这是JunitTest里面的Test01");
    }

    @Test
    public void Test02() {
        System.out.println("这是JunitTest里面的Test02");
    }

    @Disabled
    public void Test03() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com");
        webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(6)"));
    }

    @BeforeAll
    public static void SetUp() {
        System.out.println("这是我们BeforeAll里面的语句");
    }
    @AfterAll
    public static void TearDown() {
        System.out.println("这是我们AfterAll的语句");
    }
    @BeforeEach
    public void BeforeEachTest() {
        System.out.println("这是BeforeEach里面的语句");
    }
    @AfterEach
    public void AfterEachTest() {
        System.out.println("这是AfterEach里面的语句");
    }

自动化测试08_第1张图片

如果有5个测试用例,BeforeEach跑几次,BeforeAll跑几次?

5   1

如果有5个测试用例,AfterEach跑几次,AfterAll跑几次?

5   1

BeforeAll在所有的测试用例运行之前跑响应的方法

BeforeEach在每一个测试用例执行之前跑对应的方法

AfterAll在所有的测试用例运行之后跑响应的方法

AfterEach在每一个测试用例执行之后跑对应的方法


参数化:

单参数

    @ParameterizedTest
    @ValueSource(ints = {1,2,3})
    void Test04(int num) {
        System.out.println(num);
    }
    @ParameterizedTest
    @ValueSource(strings = {"1","2","3"})
    void Test05(String number) {
        System.out.println(number);
    }

CSV获取参数

@ParameterizedTest
    @CsvFileSource(resources = "test01.csv")
    void Test06(String name) {
        System.out.println(name);
    }

方法获取参数

多参数

public static Stream Generator() {
        return Stream.of(Arguments.arguments(1,"张三"),
                Arguments.arguments(2,"李四"),
                Arguments.arguments(3,"王五")
        );
    }
@ParameterizedTest
    @MethodSource("Generator")
    void Test07(int num,String name) {
        System.out.println(num + ":" + name);
    }
@Test和@ParameterizedTest不能同时使用 

不想按默认的顺序的执行+:

1)@TestMethodOrder(MethodOrderer.OrderAnnotation.class)

   @order(1)   @order(2) ……

2)随机生成

@TestMethodOrder(MethodOrderer.Random.class)

测试套件:

通过class运行测试用例

通过包运行测试用例 

断言

断言相等

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

断言不相等

Assertions.assertNotEquals(2,num);

断言为空

断言不为空

自动化测试08_第2张图片

构建测试套件

1、

@Suite
//通过class测试用例运行
@SelectClasses({JunitTest.class,JunitTest03.class})
public class RunSuite {
}

2、通过建立测试包

@Suite
//通过class测试用例运行
@SelectPackages(value = {"Package01","Package02"})
public class RunSuite {
}

你可能感兴趣的:(测试用例,java)