目录

一、注解

1. @Test

2. @BeforeEach 和 @BeforeAll

3. @AfterEach 和 @AfterAll

二、断言

1. Assertions类

1.1 assertEquals 和 assertNotEquals

1.2 assertTrue 和 assertFalse 

1.3 assertNull 和 assertNotNull

三、用例执行顺序

1. 方法的排序 —— @Order

四、测试套件Suit

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

2.  指定包,添加到套件中并执行

 五、参数化

1. 单参数

2. 多参数

2.1 参数为数据

2.2 参数为文件

3. 动态参数

3.1 单参数

3.2 多参数

        Junit 是一个开源的Java语言的单元测试框架。如果说要实现一个灯泡,那么selenium 就是灯泡,而Juniit就是电源。

引入相关依赖:

commons-io

commons-io

2.6

org.junit.jupiter

junit-jupiter

5.8.2

test

org.junit.platform

junit-platform-commons

1.8.2

test

org.junit.platform

junit-platform-reporting

1.8.2

test

一、注解

1. @Test

        表示一个方法/用例。使用Test注解后,就不需要在另外创建类来启动用例了。

@Test

public void Test1() {

//创建driver驱动对象

ChromeOptions options = new ChromeOptions();

options.addArguments("--remote-allow-origins=*");

ChromeDriver driver = new ChromeDriver(options);

driver.get("https://baidu.com");

driver.findElement(By.cssSelector("#kw")).sendKeys("selenium");

driver.quit();

}

当有多个方法时,可以显示出来哪个通过了哪个没有通过。

@Test

public void Test1() {

//创建driver驱动对象

ChromeOptions options = new ChromeOptions();

options.addArguments("--remote-allow-origins=*");

ChromeDriver driver = new ChromeDriver(options);

driver.get("https://baidu.com");

driver.findElement(By.cssSelector("#kw")).sendKeys("selenium");

driver.quit();

}

@Test

public void Test2() {

//创建driver驱动对象

ChromeOptions options = new ChromeOptions();

options.addArguments("--remote-allow-origins=*");

ChromeDriver driver = new ChromeDriver(options);

driver.findElement(By.cssSelector("#kw")).sendKeys("selenium");

}

 

2. @BeforeEach 和 @BeforeAll

        表示被注解的方法应该在其他方法之前。

@BeforeEach:表示被注解的反复在其他方法之前都要执行一遍;

@BeforeAll:表示被注解的方法在其他方法之前只用执行一遍。(该方法必须加上@Test,同时必须是一个静态方法static)

@Test

void Test01() {

System.out.println("01");

}

@Test

void Test02() {

System.out.println("02");

}

@BeforeEach

void Test03() {

System.out.println("03");

}

@Test

void Test01() {

System.out.println("01");

}

@Test

void Test02() {

System.out.println("02");

}

@BeforeAll

@Test

static void Test03() {

System.out.println("03");

}

3. @AfterEach 和 @AfterAll

        表示被注解的方法应该在其他方法之后。

@AfterEach:其他的方法执行后,都要执行一遍

@AfterAll:其他所有的方法执行之后只需要执行一遍。(必须是静态方法static)

二、断言

1. Assertions类

1.1 assertEquals 和 assertNotEquals

asserEquals( expect, actual ):校验期望值和实际值是否匹配。

assertNotEquals( expect, sctual ):校验期望值和实际值是否不匹配。

@Test

void test1() {

//创建driver驱动对象

ChromeOptions options = new ChromeOptions();

options.addArguments("--remote-allow-origins=*");

ChromeDriver driver = new ChromeDriver(options);

driver.get("https://baidu.com");

String text = driver.findElement(By.cssSelector("#su")).getAttribute("value");

Assertions.assertEquals("百度一下",text);

driver.quit();

}

1.2 assertTrue 和 assertFalse 

assertTure( 表达式 ):表达式为真则通过。

assertFalse( 表达式 ):表达式为假则通过。

@Test

void test2() {

Assertions.assertTrue(1 == 1);

}

1.3 assertNull 和 assertNotNull

asserNull(a):a为空则通过。

assertNotNull(a): a不为空则通过。

三、用例执行顺序

        Junit默认的执行顺序是不确定的,但是我们可以使用Junit里提供的方法去规定用例的执行顺序。

注意:

        因为用例之间是存在关联关系的,因此就需要手动的指定用例的顺序。但是在编写测试用例的时候,要保持用例的独立性,避免关联关系的出现。

1. 方法的排序 —— @Order

通过注解

@TestMethodOrder(MethodOrder.OrderAnnotation.class):表示通过方法排序

@Order(i):传入每个方法的顺序

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)

public class Test03 {

@Test

@Order(1)

void yi() {

System.out.println("111");

}

@Test

@Order(2)

void er() {

System.out.println("222");

}

@Test

@Order(3)

void san() {

System.out.println("333");

}

}

 

四、测试套件Suit

        一个包下有很多个类的用例,要将所有的用例都执行起来就要用到测试套件@Suite。

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

@Suite

//选择指定文件来添加到套件中执行

@SelectClasses({Test03.class, AsserTest.class})

public class RunAllSuite {

}

2.  指定包,添加到套件中并执行

前提:所有的文件都要以Test、tests命名,并且用例都要加上@Test。

@Suite

//选择指定的包添加到套件中执行

@SeleceClasses("test1")

public class RunAllSuite {

}

 五、参数化

@Parameterizedtest 标注方法类型为参数化,同时要搭配参数的来源。不需要再添加@Test注解。否则会再执行一遍。

1. 单参数

@ValueSource( 类型={参数1,参数2,参数3......} )

这里的类型是指原生类型:ints、floats、strings...

@ParameterizedTest

@ValueSource(strings = {"丫丫","糯糯","小狗"})

void test01(String name) {

System.out.println(name);

}

 

2. 多参数

2.1 参数为数据

@CsvSource( value = { "丫丫,2" , "糯糯,1" ......} )

默认参数里面使用逗号分隔,也可以使用 delimiterString = “” 来进行设置。

若参数中包含都要,就使用单引号作为转义字符。

@ParameterizedTest

@CsvSource(value = {"丫丫,2","糯糯,1"})

void test02(String name,int i) {

System.out.println("名字:" + name + " 年龄:" + i);

}

2.2 参数为文件

当要输入的参数过多,在代码中不美观,就可以使用第三方来进行添加。借助文件注入的方式来添加。

@CsvFileSource( resources = " csv文件 " )

指定的文件路径为当前项目下,resources文件中的 csv文件。

如果要使用本地任意文件夹下的文件:

@CsvFileSource( files = " 文件路径 " )

@ParameterizedTest

@CsvFileSource(resources = "/my.csv")

void test03(String name,int i) {

System.out.println("名字:" + name + " 年龄:" + i);

}

3. 动态参数

3.1 单参数

@MethodSources(" ") 参数为数据来源的方法。

注意:参数中的方法必须是静态方法。

@MethodSources

如果参数中为空,就自动找与其同名的静态方法。 

@ParameterizedTest

@MethodSource("MethoDemo")

void test04(String s) {

System.out.println(s);

}

//返回值是一个Stream流

static Stream MethoDemo() {

return Stream.of("yyy","sss");

}

3.2 多参数

        使用 Arguments类型。

@ParameterizedTest

@MethodSource

void test05(String name,int i) {

System.out.println("名字:" + name + " 年龄:" + i);

}

static Stream test05() {

return Stream.of(Arguments.arguments("yaya",22),

Arguments.arguments("nuonuo",2));

}

 

 

精彩内容

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: