表示当前方法是一个测试方法(不需要main来执行)
@Test
void Test01() throws InterruptedException {
System.out.println("测试用例1");
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com");
Thread.sleep(500);
webDriver.quit();
}
@Test
void Test02(){
System.out.println("测试用例2");
}
在所有测试用例开始之前运行的方法, 要用static修饰
@BeforeAll
static void SetUp(){
System.out.println("开始执行@BeforeAll代码");
}
在所有测试用例开始之后运行的方法, 要用static修饰
@AfterAll
static void TearDown(){
System.out.println("开始执行@AfterAll代码");
}
在每个测试用例开始之前运行的方法
@BeforeEach
void beforeEach(){
System.out.println("开始执行@BeforeEach代码");
}
在每个测试用例开始之后运行的方法
@AfterEach
void AfterEach(){
System.out.println("开始执行@AfterEach代码");
}
忽略当前的测试用例
@Disabled
@Test
void Test01() throws InterruptedException {
System.out.println("测试用例1");
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com");
Thread.sleep(500);
webDriver.quit();
}
@BeforeAll代码
@BeforeEach代码
测试用例1
@AfterEach代码
@BeforeEach代码
测试用例2
@AfterEach代码
@BeforeEach代码
...
@AfterEach代码
@AfterAll代码
没有特定的顺序, 是Junit自己决定, 不过可以自己指定顺序
加上类注解@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
然后给每个方法加上@Order(序号)
来决定顺序
@Order
注解的, 在所有有注解执行完毕再按默认顺序执行import org.junit.jupiter.api.*;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
//按指定顺序执行
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest {
//忽略当前的测试用例
@Disabled
//@Test 表示当前方法是一个测试用例
@Test
void Test01() throws InterruptedException {
System.out.println("测试用例1");
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com");
Thread.sleep(500);
webDriver.quit();
}
@Order(-1)
@Test
void Test02(){
System.out.println("测试用例2");
}
@Order(40)
@Test
void Test03(){
System.out.println("测试用例3");
}
@Order(30)
@Test
void Test04(){
System.out.println("测试用例4");
}
@BeforeEach
void beforeEach(){
System.out.println("开始执行@BeforeEach代码");
}
@AfterEach
void AfterEach(){
System.out.println("开始执行@AfterEach代码");
}
@BeforeAll
static void SetUp(){
System.out.println("开始执行@BeforeAll代码");
}
@AfterAll
static void TearDown(){
System.out.println("开始执行@AfterAll代码");
}
}
加上类注解@TestMethodOrder(MethodOrderer.Random.class)
会按随机顺序执行
此时@Order(序号)
就失效了
使用@ParameterizedTest
来修饰方法, 表示这个方法有参数. 此时不能再用@Test
了
使用@ValueSource
来传入单参数, 可以设置参数类型, 例如下面的string
strings = {"1","2","3"}
代表本方法执行三次, 传入参数分别为1,2,3
@ParameterizedTest
@ValueSource(strings = {"1","2","3"})
void Test03(String str){
System.out.println(str);
}
使用@ParameterizedTest
修饰方法
使用@CsvSource
传入多个参数, 可以参照下面的代码(本方法将会执行三次)
@ParameterizedTest
@CsvSource({"1, 2", "3, 4", "5, 6"})
void Test06(String str, int num){
System.out.println("str="+str+", num="+num);
}
当我们需要特别多组的测试数据时, 全部写在注解里不友好,可以传入参数文件(.csv)来进行测试
使用@ParameterizedTest
修饰方法
使用@CsvFileSource(resources = "csv文件路径")
传入参数
右键可以让idea自动创建文件, 可以选择放在resource/Junit/xxx.csv
(其中""
表示空字符串)
@ParameterizedTest
@CsvFileSource(resources = "test01.csv")
void Test07(int id, String name){
System.out.println("id="+id);
System.out.println("name="+name);
}
使用@ParameterizedTest
修饰方法
使用MethodSource("方法名")
表示参数来源于哪个方法
多组数据可以用多个Arguments.arguments(参数1,参数2,...)
来传递
public static Stream myMethod() {
return Stream.of(Arguments.arguments(1,"张三"),
Arguments.arguments(2, "李四"),
Arguments.arguments(3, "王五")
);
}
@ParameterizedTest
@MethodSource("myMethod")
void Test08(int num, String name){
System.out.println("id="+num);
System.out.println("name="+name);
}
断言分为: 断言相等, 断言不相等, 断言为空, 断言不为空
对于每个断言, 符合条件就没有任何提示, 不符合会报错并且之后的代码不运行
@ParameterizedTest
@ValueSource(strings = {"10"})
void Test09(String num){
//断言相等:符合条件就没有任何提示, 不符合会报错并且之后的代码不运行
Assertions.assertEquals(num,"10");
//断言不相等
Assertions.assertNotEquals(num,"11");
//断言为空
//Assertions.assertNull(num);
//断言不为空
Assertions.assertNotNull(num);
}
在@SelectClasses()
里面写上类名.class即可自动运行这些类
例如, 一个类时@SelectClasses(类名1Test.class)
多个类时, @SelectClasses({类名1Test.class, 类名2Test.class})
import Junit.Junit02Test;
import Junit.JunitTest;
import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;
@Suite
@SelectClasses({JunitTest.class, Junit02Test.class})
public class RunSuite {
}
在@SelectPackages()
里写上包的完整路径名
就可以自动运行包下的所有Test类
例如, 一个包时, @SelectPackages("包完整名称")
多个包时, @SelectPackages({"包1","包2"})
测试类的名称必须以Test
结尾, 不然不会识别为测试类, 从而不执行
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;
@Suite
@SelectPackages("Junit")
public class RunSuite {
}