基于junit4搭建自定义的接口自动化测试框架

随着业务的逐步稳定,对于接口的改动也会逐渐变少。更多的是对业务逻辑的优化,功能实现的完善。对于测试来说,重复繁琐的功能测试不仅效率低下,而且耗费一定的人力资源。笔者支持的信息流业务下的一个图文管理平台就是一个功能较为完善,系统较为稳定的后台平台。每次平台新增一些小的功能,或者对某些模块做优化时,都会一定程度上影响其他模块。每次回归测试,甚至比新增的功能测试点还耗时,而且还不敢保证没有漏测的地方。因此,如何提升测试效率,保证回归测试的全面性和准确性,接口自动化测试是一种有效的手段。目前,有不少成熟的接口自动化测试框架可供使用,如junit4,httprunner等,不过,这些框架并不能满足所有的业务场景。因此,为了能够更灵活的将这些框架应用在具体的业务场景下,同时也进一步加深对框架的理解,这就有必要扩展这些框架,定义业务测试所需要的测试行为。基于此,笔者选择junit4框架,就如何扩展并搭建起一个自定义测试行为的接口自动化框架,和大家聊聊。

为什么是junit4框架?junit4作为一个开源的单元测试框架,正迅速成为java单元测试的标准框架。C++,python,php等语言都有了对应的xunit框架,这就便于语言之间的切换,降低了学习成本。此外,junit4便于二次开发,在其基础之上能够很容易的扩展框架。junit4的代码量也不是很大,以其高密度的设计模式和灵活性使得大家对junit框架评价很高。最后,junit开源社区也能够为初学者提供不错的学习文档以及问题解答。当然,由于笔者常使用java语言,这也缩小了选择范围。

在搭建测试框架之前,我们需要搞明白,接口自动化测试框架应该由哪些部分构建。一般情况下,接口自动化测试框架由数据驱动、接口执行驱动、调度器、结果验证以及结果报告五部分组成。接口常指应用程序编程接口,具体表现形式如:http接口请求、dubbo接口请求等。所以,接口执行驱动就是涉及http或者https协议的请求构建。那么数据驱动又是什么了,其实就是测试用例集合的管理,在测试运行时,用来加载成可执行的测试用例。接着,所谓的调度器则是将数据驱动和接口执行驱动组合起来的桥梁,简单来说,就是将http等接口的请求功能和测试数据结合起来,并执行。最后,结果验证以及结果报告不难理解,主要用于验证预期结果并将测试结果展现出来的模块。在初步了解了接口自动化测试框架搭建的五个模块后,接下来以junit4为基础框架,基于上述五个模块维度去展开讨论如何搭建接口自动化测试框架。

既然选择了junit4框架作为基础扩展框架,那么就有必要对junit4的工作原理有一定的了解。junit4工作原理本身涉及到很多知识,光从源码分析就能写出长篇大论。本文重点则在于如何扩展junit4框架,以搭建自定义的接口自动化测试框架。因此,接下来对其工作原理做出简要的介绍,以便大家快速进入状态。简单来说,junit4通过FrameworkMethod类去定义需要运行的测试用例,然后调用BlockJUnit4ClassRunner类中的computeTestMethods()方法加载出定义好的测试用例。接着,调用BlockJUnit4ClassRunner类中的methodInvoker()方法,触发测试用例的真正执行单元Statement,通过调用该执行单元类的evaluate()方法,执行具体的case。最后,调用Assert类中相关方法对测试用例中的预期结果做对比验证,获取测试用例运行结果。到此,junit4的基本原理介绍完毕。细心的朋友们会发现,上面介绍的几个基础类一定大有用处。事实上,对于上述基础类的继承与方法覆写,就可以轻松实现对junit4框架的扩展。

数据驱动作为管理测试用例并提供测试数据的源头,需要直观、便于扩展,便于维护。常见的测试用例管理有excel、xml、数据库等形式,这里,笔者选择excel作为管理测试用例数据的数据驱动源,是因为在excel上便于维护和扩展测试用例,而且,能够将测试用例更好地融入到笔者搭建的web平台中,以实现友好的前后端交互。Excel作为数据驱动的选择,如何管理测试用例了,这里提供两种方案。方案一:以每个excel文件为单元,作为一个接口的测试用例集合;在每个文件中,每行记录作为一个具体的测试用例,表示一个具体的业务测试场景;具体来说,每行记录包含接口的url、请求类型、请求参数、预期结果等。方案二:一个excel文件作为所有接口的测试用例集合,excel文件中的第一个sheet表格中每行记录表示一个接口的测试用例集,然后每个接口的测试用例集中具体的业务测试场景对应于excel中剩余每个sheet表格。当然,选择可以更多,这个大家可以自行根据需要扩展。数据驱动一个重要功能就是将excel中的具体业务测试场景加载成可执行的测试方法,这时就需要扩展junit4框架的FrameworkMethod类,自定义出我们需要执行的测试用例方法,也就是将excel中的每行记录定义成一个TestCase,每个接口对应的所有测试用例对应为一个TestSuite集。从下方源码中可以看出,TestCase即相当于junit4中的测试方法。

事实上,每个TestCase对应着一个具体的http请求,通过组合不同的参数,以期验证不同的业务场景。因此,接口执行驱动就是对不同的TestCase代表的url执行http请求。前面提到过,测试用例的真正执行单元是Statement类,因此,只需要继承Statement类,覆写唯一的evaluate()方法,在evaluate()方法中执行http请求,需要注意的是,我们需要将http请求具体分为get和post请求,具体的请求类型对应着不同的测试用例。

明确数据驱动和接口执行驱动之后,接着需要将所有的测试用例集和http请求结合起来,以执行接口测试,这里就涉及到调度器的概念了。调度器主要是将数据驱动加载的TestSuite集生成Junit4框架需要的执行器runner。通过调用runner的run()方法,遍历runnner以生成所有的TestCase。然后,针对每个TestCase执行覆写的methodInvoker ()方法,在 methodInvoker ()中生成每个TestCase所需要的所有执行单元statements,statements包含测试执行前数据准备、http请求执行以及测试执行后数据清理等工作。如上述可知,通过继承BlockJUnit4ClassRunner类自定义需要执行接口测试的runner。其中,覆写computeTestMethods(),生成需要执行的所有TestCase;然后,覆写methodInvoker,针对生成的TestCase指定需要执行的接口执行驱动XStatement。

最后,结果验证以及结果报告是很重要的环节。接口自动化测试的意义就是通过自动化测试手段,对系统进行大量回归测试,验证测试结果,从而定位出bug。对于大批量的回归测试,将测试结果统计出来,对于问题分析有很大的帮助,所以一份简单明了的结果报告很重要。对于结果验证,最简单的一种思路就是利用assertEquals去对指定字段的预期结果和实际结果做对比验证。此外,可以针对每个测试用例维护一份完整准确的运行结果,每次只需将实际运行的结果与其进行对比。结果报告需要提供运行测试用例的总数,本次执行成功的用例总数以及失败的用例总数;对于失败的用例,需要给出失败的原因;将所有的这些点透传到前端直观的展示出来即可。

是时候总结一下了,本文从数据驱动、接口执行驱动、调度器、结果验证以及结果报告五个维度讲解了如何基于junit4框架去搭建自定义化的接口自动化测试框架。逻辑不复杂,大家可以按照这个思路去动手尝试一下。为了让大家有个直观的概念,下面以流程图的形式为大家呈现出自定义的接口自动化框架扩展及运行原理。

一个接口自动化框架需要实现的东西不限于上面的五部分,包括数据准备、数据清理、请求参数的加签验签,数据库的操作与结果验证、mock的实现等等。但是,基于上面的思路,可以让大家能够轻松的搭建出自定义的测试框架,剩余的只需不断的完善。最后想要说的是:“纸上得来终觉浅,绝知此事要躬行”。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/366308.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习入门-----sklearn

机器学习基础了解 概念 机器学习是人工智能的一个实现途径 深度学习是机器学习的一个方法发展而来 定义:从数据中自动分析获得模型,并利用模型对特征数据【数据集:特征值+目标值构成】进行预测 算法 数据集的目标值是类别的话叫做分类问题;目标值是连续的数值的话叫做回…

【开源】SpringBoot框架开发无代码动态表单系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 动态类型模块2.2 动态文件模块2.3 动态字段模块2.4 动态值模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 动态类型表3.2.2 动态文件表3.2.3 动态字段表3.2.4 动态值表 四、系统展示五、核心代码5.1 查询档案类型5.…

智慧文旅:驱动文化与旅游融合发展的新动力

随着科技的快速发展和人们生活水平的提高,文化和旅游的融合成为了时代发展的必然趋势。智慧文旅作为这一趋势的引领者,通过先进的信息技术手段,推动文化与旅游的深度融合,为产业的发展注入新的活力。本文将深入探讨智慧文旅如何成…

数据库运维工作量直接减少 50%,基于大模型构建智能问答系统的技术分享

本文源自百度智能云数据库运维团队的实践,深入探讨了基于大模型构建「知识库智能问答系统」的设计过程和应用。 全文包括了总体的技术方案选型、各个模块的设计实现、重点难点问题的突破、以及目前的落地场景应用等。 该系统自从内部上线以来,整体的回…

大语言模型之LlaMA系列-LlaMA 2及LlaMA_chat(下)

多转一致性的系统消息 - System Message for Multi-Turn Consistency 在对话设置中,某些指示应适用于所有对话轮次。 例如,简洁地响应,或"充当"某个公众人物。当我们向Llama 2-Chat提供此类指示时,后续应响应始终遵守约…

十、Qt三维图表

一、Data Visualization模块概述 Data Visualization的三维显示功能主要有三种三维图形来实现,三各类的父类都是QAbstract3DGraph,从QWindow继承而来。这三类分别是:三维柱状图Q3DBar三维空间散点Q3DScatter三维曲面Q3DSurface 1、相关类的…

混乱字母排序——欧拉路数论

题目描述 小明接到一个神秘的任务:对于给定的 n 个没有顺序的字母对(无序代表这两个字母可以前后顺序颠倒,区分大小写)。请构造一个有 (n1) 个字母的混乱字符串使得每个字母对都在这个字符串中出现。 输入输出格式 输入格式 第…

蓝桥杯备战——10.超声波模块

1.分析原理图 蓝桥杯单片机板子的原理图做的简直是依托答辩,乱糟糟的不说还弄成黑白的,明明很简单的东西,弄成一大堆。 可以看到,J2跳线帽如果P10接N_A1,P11接N_B1就是用作超声波功能。N_A1用作发生超声波功能,而N_B1…

【blender插件】(1)快速开始

特性 blender的python API有如下特性: 编辑用户界面可以编辑的任意数据(场景,网格,粒子等)。修改用户首选项、键映射和主题。运行自己的配置运行工具。创建用户界面元素,如菜单、标题和面板。创建新的工具。场景交互式工具。创建与Blender集成的新渲染引擎。修改模型的数据…

pinctrl/gpio子系统(2)-gpio子系统介绍及驱动源码简单分析

文章目录 1.gpio子系统api2.gpio相关of函数3.gpio子系统驱动分析3.1设备树信息分析3.2驱动程序分析 4.最后 1.gpio子系统api 这里的api都是基于gpio的编号去进行操作 1)gpio_request,用于申请一个GPIO管脚 int gpio_request(unsigned gpio, const char …

前缀和 差分

差分和前缀和都是算法里边比较重要的知识点,不过学习的难度并不高,这篇文章会讲解相关的内容。 1. 前缀和怎么玩 1)一维前缀和 在该数之前,包括该数的所有数之和,有点类似高中学的数列的前n项和Sn。 2)二维…

【sentinel流量卫兵搭建与微服务整合】

sentinel流量卫兵搭建与微服务整合 搭建sentinel dashboard控制台微服务整合 搭建sentinel dashboard控制台 1、下载 官网链接 由于官网github网络原因,导致长时间下载失败。 网盘链接 网盘提取码:dwgj 2、运行 将下载jar包放在任意非中文、不包含特殊…

专有云 ABC Stack 联合银联商务打造金融级云平台,入选《2024 央国企上云用云典型案例》

2024 年 1 月,在中国信通院《2024 央国企上云用云典型案例》征集中,百度智能云携手银联商务提交的《银联商务金融级云平台》成功入选「上云用云解决方案典型案例」。 在国家「1 朵央企云统领,N 朵行业云共载,M 朵私有云共生」的央…

jenkins 下载插件sentry-cli失败 证书过期

现状 npm set ENTRYCLI_CDNURLhttps://cdn.npm.taobao.org/dist/sentry-cli npm set sentrycli_cdnurlhttps://cdn.npm.taobao.org/dist/sentry-cli 原因是npm原域名停止解析,在访问上面sentry-cli的cdn资源的时候 证书过期无法下载。 解决: 替换证书过期…

BL808 Linux支持WIFI

BL808芯片介绍 BL808是高度集成的AIoT芯片组,具有Wi-Fi/BT/BLE/Zigbee等无线互联单元,包含多个 CPU 以及音频编码译码器、视频编码译码器和 AI 硬件加速器,适用于各种高性能和低功耗应用领域。 外围接口包括 USB2.0、 Ethernet、 SD/MMC、 …

【python3.8 pre-commit报错】记录pre-commit install报错

一、问题 在执行pre-commit install --allow-missing-config命令时,报错 Traceback (most recent call last):File "C:\ProgramData\Anaconda3\envs\py38\lib\runpy.py", line 192, in _run_module_as_mainreturn _run_code(code, main_globals, None,F…

【Linux】 Linux编译器-gcc/g++使用

💗个人主页💗 ⭐个人专栏——Linux学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读1. Linux编译器-gcc/g使用1.1 引入1.2 初识gcc/g1.3 程序运行的四个阶段1.3.1 预处理1.3.2 编译1.3.3 汇编1.3.4 链接 1.…

Git―基本操作

Git ⛅认识 Git⛅安装 GitCentos(7.6)Ubuntu ⛅Git―基本操作创建本地仓库🍂配置本地仓库🍂工作区, 暂存区, 版本库🍂版本库工作区 添加文件🍂查看文件🍂修改文件🍂版本回退🍂☃️案例 撤销修改…

【Java 数据结构】二叉树

二叉树 1. 树型结构(了解)1.1 概念1.2 概念(重要)1.3 树的表示形式(了解)1.4 树的应用 2. 二叉树(重点)2.1 概念2.2 两种特殊的二叉树2.3 二叉树的性质2.4 二叉树的存储2.5 二叉树的…

Error: Projects must list all files or use an ‘include‘ pattern.

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…