目录
前言:在掌握selenium 基础语法后,我们还必须掌握 Juint 单元测试框架之后才能实现真正的自动化测试!
了解 Junit
junit 是一个开源的 java 语言的单元测试框架,是 java 方向使用最广泛的 单元测试框架,因此我们应该学习并使用 java 并且掌握单元测试的编写!
selenium 和 junit 的联系?
如果我们要实现一个灯泡,selenium 就是一个灯泡,而 juint 就是电源
juint 框架需要的依赖:(Java版本最低为8)
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>1.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-reporting</artifactId>
<version>1.8.2</version>
<scope>test</scope>
</dependency>
上一章屏幕截图也需要一个依赖:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
<scope>test</scope>
</dependency>
一、注解
1、@Test
可以发现 在添加 test 注解后 我们的普通方法不需要 main 函数也可以运行
2、@BeforeEach,@BeforeAll
表示被注解的方法应该在其他方法之前
BeforeEach 表示所有方法执行前 都要执行一次 BeforeEach 注解的方法
BeforeAll 表示所有方法之前执行前 都要确保 BefoAll 注解的方法已经执行过了
这里我在学习的时候引入以上部分的依赖发现是无法正常完成测试的,在我更换依赖后才能正常测试(别骂了别骂了 呜呜呜~)
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
记得千万别加 scope !
那这里我自己发现对应的注解其实也是要更换的
BeforeEach —— Before
BeforeAll —— BefoClass
BeforeClass注解只能适用于静态方法
3、@After,@AfterClass
一样的,直接用就行~
二、断言
写自动化测试,要么结果是正确的,要么只能是错误的
而很多时候我们的测试如果不符合我们的预期,我们是没办法根据 “通过” 与否来辨别的,这时候断言就很有必要了
这里记得 Assertions 引入的包:
import org.junit.jupiter.api.Assertions;
非常智能~~
assert拥有非常多的方法。但方法都很浅显易懂,直接使用即可~
三、用例执行顺序
junit 的默认测试顺序是不固定的,官方文档也没有明确给出
可以看到并不是按照方法的先后顺序来执行的
我们可以 junit 提供的方法来手动设置用例的执行顺序
1、方法的排序——通过 @Order 注解来排序
首先给我们的类引入 Order 注解
然后就可以给我们的方法添加注解排序
2、为什么我们需要用到 junit 的排序功能?
junit 的默认执行顺序不固定,如果用例之间存在关联关系,我们就必须手动指定用例的执行顺序
这也同时提醒我们 ,在编写测试用例时尽量保持用例的独立性,减少冗余
四、参数化
@Parameterizetest 标注方法类型为参数化 (不需要再添加@Test 注解,否则会多执行一编)
需要添加的参数的来源
@ValueSource(类型={参数1,参数2}) 单参数
使用原生类型:int,String等
多参数情况
@CsvSource
@ScvSource(value = {“小米,20”,“振鹏,14”})
默认分隔符是 ” , “
但可以手动设置
那如果我们的数据里含有逗号呢?
必须使用单引号作为转义字符!
如果参数非常多,在代码中编写不好看,就可以借助文件注入的方式来添加
我们需要在当前项目路径下 resources 里创建该文件( .csv )
依然可以读入
指定本地路径下的任意 dsv 文件:
如果我们参数为空,则默认为null,但一定记得数字等基本类型是 没有null 值的,会抛异常!
动态参数?
MethodSource(”“)
参数为数据来源中的方法名
单参数
如果不指定数据来源,则默认找和用例同名的静态方法!
五、测试套件Suite
指定类 添加到套件中执行
选择指定的包添加到套件 (所有的文件都要以Test命名,同时用例必须要加上 @Test 注解,否则不会执行)