3.4 动态参数@ParameterizedTest + @MethodSource()
4.1 指定类来运行实例@Suite + @SelectClasses
5.1 断言匹配/不匹配Assertions.assertEquals()
5.2 断言结果为真/假Assertions.assertTrue()
5.3 断言结果为空/非空Assertions.assertNull()
自动化就是 selenium 脚本来实现的,junit 是 java 的单元测试工具,只不过在实现自动化的时候需要借用一下 junit 库里面提供的一些注解
注:博主的版本为 Junit5,支持的 Java 版本最低要为 8
<dependency>
<groupId>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");
}
注意:
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 文件
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 {
}
但是我们的运行结果为:
那是因为:
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进行投诉反馈,一经查实,立即删除!