接口设计的可测试性
错误码不分层的接口,你只能靠 msg 断言,改个文案用例就跑失败。返回快照的字段返回了实时,数据就无法核对上。
错误码不分层的接口,你只能靠 msg 断言,改个文案用例就跑失败。返回快照的字段返回了实时,数据就无法核对上。
本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 如何评价接口自动化项目 我理想中的接口自动化项目,是有一套脚本,能够 100%覆盖核心业务场景,能够回归线上频繁出现的问题,能够支持手工无法验证的场景,能够抛出偶现问题,能够包含容易遗漏的边界场景、异常场景,每天都能定时运行,出具报告,给予反馈。 用实际的指标量化下: 功能测试自动化率 = 自动化测试用例数/总测试用例数 自动化发现 bug 占比 = 自动化发现的 bug/总 bug 数 自动化发现 bug 有效性 = 自动化发现的有效 bug/自动化提交的 bug 总数 自动化执行成功率 = 自动化执行成功的次数/自动化执行总次数 周活跃自动化用例占比 = (∑每周执行过的自动化测试用例)/(∑周维度自动化测试用例) 应用维度自动化代码覆盖率 = 自动化用例覆盖代码行数/应用维度代码总行数 现状是什么(Situation) 我负责的业务是发票中台,数据流简化后如下图所示: 发票中台对调用方提供 RPC 服务,底层有读写 MySQL、同步 ES、消息队列、异步任务等服务,上游是用户和订单,需要账号、增票资质、订单等物料;下游是财务,推送申请单给财务开具发票等。 发票的接口自动化在多年前是写了的,用 Java+TestNG+RPC 本地化了一套框架来实现,因为人员离职和业务变更,这套自动化到我手上的时候,已经不能用了,本地化的接口自动化项目也无法做数据度量,只有接口测试平台写的自动化用例才会被统计到。 任务是什么(Task) 我给自己定的绩效是在 Q2 完成 95 条自动化用例,按照一个标准化的自动化项目来实现发票的接口自动化,结合测试环境、测试物料、流水线、精准分析,打造一个个人的稳定的沉淀物,无论是晋升还是求职,都能拿来讲点故事。 行动是什么(Action) 编写自动化用例的方式 1、最理想的方式,是能够录制线上流量直接转换为自动化用例,修修改改即可。虽然我们有流量录制回放平台,但是它跟接口自动化平台并没有打通,很可惜不能采取这种方式。 2、参考线上流量日志,抓取接口、入参,人工转化为自动化用例。 3、参考接口的代码设计,比如 controller/provider/sdk 都定义了应用接口,能知道哪些覆盖到了,哪些还需要补充。 4、根据入参模板自行构造参数。参数个数太多的话造起来很麻烦。 我主要采用第 2 种和第 3 种方式结合来编写自动化用例。 典型自动化用例 前置步骤:初始化数据,将订单发票类型更新为 3。 预设变量:提供参数化数据。 执行步骤:调用修改订单发票类型接口,将发票类型 3 改为 2,入参引用预设变量。 ...
本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 What-什么是 CodeReview? CodeReview,即代码评审,是白盒测试中,静态测试的一种方法,通过阅读代码,提出代码层面的缺陷。 Why-为什么做 CodeReview? 测试左移:在测试前就发现代码缺陷。 明确测试范围:根据需求文档和代码,对齐测试范围,防止研发夹带本次需求范围外的代码上线。 提升代码能力:学习研发优秀的编程技术。 深入原理:了解系统内部结构及实现。 发现隐藏缺陷:能发现某些极端场景下的问题或概率性问题。 减少测试研发周期占比:节省用例执行个数,尤其多个同类异常梳理,不用执行类似用例,CodeReview 一行代码即可。 Who-谁适合做 CodeReview? CodeReview 需要三大门槛: ①熟悉编程语言,Java/Python/Go 等。 ②熟悉编程规范,《阿里巴巴 XXX 编码规范》、《华为 XXX 编码规范》、《京东 XXX 编码规范》。 ③了解需求、架构和设计,需求文档/架构图/设计文档。 达到门槛才适合做 CodeReview。 When-什么时候做 CodeReview? 提测前,通过 Code Diff Review,自己走读代码或者参与研发代码评审会议均可, 发现功能缺陷时,通过走查代码定位代码原因,并分析是否有关联缺陷。 修复缺陷时,阅读研发 commit 记录,检查是否引入新缺陷。 上线前,通过 merge 范围检查是否有夹带代码,为了测试改动的临时代码是否恢复。 Where-在哪里做 CodeReview? 线上仓库(如 Gitlab),适合于修改点单一,不需要查看上下文信息就能找到缺陷。直接在网页端评审代码且发表 comment。 本地仓库(如 IDEA),适合于修改点较多,需要查看上下文信息(变量或方法跳转到定义或使用之处)。在本地找到缺陷后在线上发表 comment。 How-CodeReview 如何上手? 准备:了解需求、架构和设计;学习编程语言;学习代码规范; 实践:坚持 CodeReview,记录缺陷,定期总结。如果看代码找缺陷比较困难,可以先从发现功能缺陷后,定位代码原因入手。 常见 CR 缺陷: 除数为 0、整数溢出、精度损失; 可能死循环; 在 finally 程序块中关闭或者释放资源; 异常未处理或提示不明确(没有 catch 异常,集合等没有判空和长度为 0); 公式计算错误; ...
大家好,我是刚哥。
本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 为什么学 JUnit5 Java 技术栈的单元测试框架有两个:JUnit 和 TestNG,有种说法是 TestNG 比 JUnit 更强大,学 TestNG 就够了,但是当我打开 GitHub 看到 star 的时候,犹豫了: JUnit TestNG 相差了足足有3K之多。带着这个困惑,我在网上查阅了一番资料,原来JUnit5 相较于 JUnit4 有了重大升级,已经包含了 TestNG 的所有功能。为了坚定我学 JUnit 的想法,我咨询了身边做 Java 开发的朋友,开发写 UT 都是用的 JUnit。这两个理由足以让我开始对 JUnit5 的学习。 JUnit5 是什么 跟之前的 JUnit 有所不同,JUnit5 由三个子项目的模块组成: JUnit5 = JUnit Platform + JUnit Jupiter + JUnit Vintage JUnit Platform 在 JVM 上启动测试框架的基础,不仅支持 Junit 自制的测试引擎,其他测试引擎也都可以接入。提供了从命令行启动平台的 Console Launcher,和支持 JUnit4 环境的 JUnit4 based Runner。IDE 一般都集成了 JUnit Platform,比如 IntelliJ IDEA。 JUnit Jupiter JUnit5 新特性,结合了新的 programming model 和 extension model,以便于在 JUnit5 中编写测试和扩展。提供了在平台上运行基于 Jupiter 测试的 TestEngine。 JUnit Vintage 提供了在平台上运行基于 JUnit3 和 JUnit4 测试的 TestEngine,照顾老的项目。 JUnit5 新特性 使用 JUnit Jupiter 写测试 示例代码: ...
本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 环境搭建 据说,很多人都被繁琐的环境搭建给吓到了。 是的,确实,繁琐。 node.js 下载地址: https://nodejs.org/en/download/ cmd 输入 node -v,出现下图说明成功: JDK 下载地址: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 百度一下“配置 Java”,配置环境变量。 cmd 输入 java -version,出现下图说明成功: Android SDK 下载地址: https://www.androiddevtools.cn/ 百度一下"配置 Android SDK 环境变量"。 cmd 输入 adb,出现下图说明成功: Appium Desktop 下载地址: https://github.com/appium/appium-desktop/releases 或 https://testerhome.com/topics/680 Maven 下载地址: http://maven.apache.org/download.cgi 百度一下“ maven 环境配置”。 cmd 输入 mvn -version,出现下图说明成功: IntelliJ IDEA 下载地址: http://www.jetbrains.com/idea/ 安卓模拟器 下载地址: https://www.yeshen.com/ 把 Android SDK 目录下 \platform-tool 的 adb.exe 拷贝。 打开 Nox\bin 目录,粘贴替换 adb.exe。 ...
JMeter 是性能测试工具,在使用 JMeter 变多以后,越来越觉得之所以它能成为当今时代最主流测试工具,是因为它太成熟了,举个小例子,编写 GET 请求的时候,需要把查询参数,也就是?号后面的请求参数添加进去,JMeter 竟然有个 Add from Clipboard 功能,在浏览器复制以后,点这个按钮就填充好了:
本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 安装 Python 和编辑器 PyCharm Python 安装包下载地址是: https://www.python.org/downloads/ PyCharm 安装包下载地址是: https://www.jetbrains.com/pycharm/download/ 下载后按常规软件安装。 pytest pytest 是 Python 内置包,无需单独安装,但是需要设置。 创建 1 个 Project 和 1 个 test.py 来试试,左上角点击 File | New Project | create,创建项目。在项目中右键选择 New | File 创建 test.py 接着设置 PyCharm,默认 PyCharm 自带的测试框架是 Unittests,在 File | Settings | Tools | Python Integrated Tools | Testing | Default test runner,修改为 pytest 在 test.py 文件中添加代码 def test(): pass 这个时候 def 的左边会出现一个绿色的箭头,点击之后就可以使用 pytest 运行,注意一定要是 pytest for… 才可以,如果只是 Run test.py,是不走 pytest 执行的(右上角 Edit Configurations 删掉来解决) ...
本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 Man In The Middle mitm 是 Man In The Middle 的首字母缩写,意思是位于中间的人,表明 mitmproxy 是一个代理,可以拦截请求,实现网络抓包。知名的网络抓包工具有 Fiddler、Charles、HttpWatch、WireShark、BurpSuite 和 Postman 等,mitmproxy 相对来说,没有这么高的知名度,它相比于以上工具的独特优势是,它提供了 Python API,可以编写 Python 代码对网络请求进行流量录制,从而收集接口信息以及转化为接口自动化用例等。mitmproxy 官方文档不但有 mitmproxy 工具使用介绍,还有代理实现原理,对我们学习掌握网络知识有很大帮助。 安装与使用 pip 安装 pip install mitmproxy mitmproxy 是 Python 开发的,用 pip 就能安装成功。官方给出了二进制安装包等方法,我觉得作为一款用 Python 开发的工具,用 pip 直接安装是更 Pythonic 的。 命令启动 可以通过 3 种命令启动 mitmproxy: mitmproxy 控制台 mitmweb 网页 mitmdump 命令行 它们的内容都是一样的,只是 UI 不一样而已。 手动设置代理 打开以后 mitmproxy 默认会监听http://localhost:8080,需要设置下代理,把代理服务器设置为这个地址。 Windows 可以这样设置: 设置后一定要记得点击保存按钮,否则代理不会生效。 实际上,Charles 等网络抓包工具会自动配置代理,而 mitmproxy 需要手动设置代理,开发团队的解释是因为浏览器版本和配置经常会变化,所以他们建议在网上根据环境搜索方法手动设置。 ...
点进 Service,全是接口。点进 ServiceImpl,前半段在校验业务规则,后半段调了个 stockService.deduct(),又得跳到另一个 Service。