写点什么

软件测试丨基于 Junit4,利用 xUnit 框架让你的测试用例可维护性大幅提升

作者:测试人
  • 2022-12-13
    北京
  • 本文字数:1594 字

    阅读完需:约 5 分钟

xUnit 是一系列测试框架的统称,最开始来源于一个叫做 Smalltalk 的 SUnit 框架。

现在各种面向对象的语言,如 Java、Python 的鼻祖就是 Smalltalk,后来这些语言都借助了 Sunit 框架的理念,有很多通用的规范和特征,也就统称为 xUnit。

xUnit 是什么

xUnit 之框架与体系

很多我们已知的单元测试框架,比如 python 的 UnitTest、PyTest 以及 Java 的 JUnit、TestNG 他们通用体系结构统称为“ xUnit”。

而 xUnit 的 architecture(体系结构)通常都是由以下的结构组成:Test Runner :测试的运行器 Test Case :测试用例 Test Fixtures : 测试夹具/治具,用来管理测试用例的执行 Test Suites :测试套件,用来编排测试用例 Test Execution:测试执行,以何种顺序执行 Test Result Formatter:测试结果,具备相同的格式,可被整合 Assertions:断言

从 Junit4 开启 xUnit 框架之旅

Why Junit4?

在目前的行业中,Junit4 仍然是 99%的研发工程师的首选框架,所以可以方便测试工程师与研发工程师交流(偷偷拉个关系~)。而且 TestNG 的使用多用于测试工程师。

Junit5 还未大规模普及(但是从使用上面来说最推荐的框架,成熟、好用、研发测试通用),而很多框架依然基于 Junit4 定制,所以我们还无法从 Junit4 转换到 Junit5 中。

测试用例之核心元素

一个测试用例到底应该有哪些核心的元素?测试用例的名字:特性方法名测试用例的描述与标签:注解测试用例的容器:类或者套件

  • 测试过程:单元测试 Web 自动化测试 SeleniumApp 自动化测试 Appium 接口自动化测试 RestAssured

  • 测试断言

基本 demo 的运行

1)创建 maven 工程 XUnit,pom.xml 中添加 Junit 依赖


2)src/test/java 下创建测试类 Junit4DemoTest 注:

测试类要以 Test 开头或者结尾 maven auto-importsrc/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


运行结果:


App 自动化测试用例管理

基类的 @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 的顺序执行。

发布于: 刚刚阅读数: 5
用户头像

测试人

关注

还未添加个人签名 2022-08-29 加入

还未添加个人简介

评论

发布
暂无评论
软件测试丨基于Junit4,利用xUnit框架让你的测试用例可维护性大幅提升_软件测试_测试人_InfoQ写作社区