先看 Wikipedia 上的解释: xUnit 是一系列测试框架的统称,最开始来源于一个叫做 Smalltalk 的 SUnit 框架,现在各种面向对象的语言,如 Java、Python 的鼻祖就是 Smalltalk,后来这些语言都借助了 Sunit 框架的理念,有很多通用的规范和特征,也就统称为 xUnit。 Java : JUnit、TestNG Python : UnitTest、PyTest Test Runner :测试的运行器 Test Case :测试用例 Test Fixtures : 测试夹具 / 治具,用来管理测试用例的执行 Test Suites :测试套件,用来编排测试用例 Test Execution:测试执行,以何种顺序执行 Test Result Formatter:测试结果,具备相同的格式,可被整合 Assertions:断言 Junit4 仍然是 99% 的研发工程师的首选框架,方便测试工程师与研发工程师交流(拉关系~~); TestNG 的使用多用于测试工程师; Junit5 还未大规模普及(最推荐的框架,成熟、好用、研发测试通用); 很多框架基于 Junit4 定制; 测试用例的名字:特性方法名 测试用例描述与标签:注解 测试用例的容器:类或者套件 测试过程 单元测试 Web 自动化测试 Selenium App 自动化测试 Appium 接口自动化测试 RestAssured 测试断言 1)创建 maven 工程 XUnit,pom.xml 中添加 Junit 依赖; 2)src/test/java 下创建测试类 Junit4DemoTest 注意 测试类要以 Test 开头或者结尾 maven auto-import src/main/java 存放应用实现代码 src/test/java 存放单元测试 单元测试的原则之一:用例可以独立运行 基本测试 demo 运行: 运行结果: Junit4: Default 取决于反射方法获得的列表,顺序固定(不保险) @FixMethodOrder (MethodSorters.JVM) 顺序可能变化 @FixMethodOrder (MethodSorters.NAME_ASCENDING) 按照名字 ASCII 顺序(稳定常用,建议使用) TestNG、Junit5: 可以通过注解设置顺序 Order 顺序演示 运行结果: Junit4: @BeforeClass 、 @AfterClass @Before 、 @After TestNG: @BeforeClass @BeforeMethod BeforeGroup、 @BeforeSuite Junit5: @BeforeClass @BeforeEach 实操演示 1 在用例执行前后增加 @Before 和 @After : 运行结果: 实操演示 2 再增加 @BeforeClass 和 @AfterClass 运行结果: 基类的 @BeforeClass : 配置读取、配置 Capability、初始化 driver、安装 App,PageObject 初始化 集成的子类执行流程 @Before :启动并进入特定界面 @Test :测试用例执行 @After :回退到入口 @BeforeClass :进图特定的 tab 子功能页面 @AfterClass :关闭 app 基类的 @AfterClass driver.quit 流程顺序: 父类 @BeforeClass 子类 @BeforeClass 父类 @Before 子类 @Before 子类 @Test 父类 @Test 子类 @After 父类 @After 子类 @AfterClass 父类 @AfterClass 实操演示 1 现在创建一个子类 Junit4DemoChildrenTest,继承 Junit4DemoTest,然后实现和父类一样的方法并运行子类: 运行结果: 从运行结果中我们可以看到,子类会将与父类中一样的方法进行覆盖,只执行子类中的方法 实操演示 2 现在将子类中的方法名进行修改,使其与父类方法名不同,再运行子类: 运行结果: RunWith SuiteClasses class 实操演示 新建一个子类 Junit4DemoChildren2Test,继承 Junit4DemoTest 再建一个测试类 SuitesTest, 写上注解 @RunWith (Suite.class), 表明这是一个测试套件,是多个测试类的一个集合,一个容器; 然后利用注解 @Suite.SuiteClasses 来设置测试类集合,设置测试类执行的顺序 运行结果: 由测试结果可以看到使用套件后,测试过程为 Junit4DemoChildren2Test、Junit4DemoTest、Junit4DemoChildrenTest 的顺序执行 有时候我们需要对一些特定的用例进行分组测试,这个时候就可以用@Category来实现 另外在套件执行类上运用注解: @Category分组需要给定一个标签,以类或者接口都可以,这里创建连个接口SlowGroup和FastGroup 在用例上分别分组为SlowGroup、FastGroup和SlowGroup+FastGroup 指明SlowGroup组测试执行,FastGroup组的测试不执行: 测试结果: 仅指明SlowGroup组测试执行 测试结果: 仅指明不执行的组为FastGroup 测试结果: 有时候我们需要传入测试数据,且数据可能是多组,这个时候就需要使用参数化来传入多组数据进行测试 Junit4 的参数化稍微有点麻烦: 1)先在类名上加入注解@RunWith(Parameterized.class)表明要以参数化运行 2)用注解@Parameterized.Parameters来设定数据源 3)最后用注解 @Parameterized.Parameter 来指定数据源数据对应的参数 4)总览 测试结果: 从测试结果可以看到 3 组参数分别传入方法中,方法各执行了一次,完成参数化测试 测试用例之间的顺序 test fixtures 的顺序 继承顺序 套件之间的顺序 参考文档链接 JUnit4 单元测试框架 [JUnit – About] JUnit5 单元测试框架 [JUnit 5] Redirecting...