测试工程师高效编写API测试

news2024/11/27 19:58:14

1、自动化测试流程

我一直有编写自动化测试的习惯,但之前一直没有达到最理想的效果,也在反思问题出现的原因,最近终于有了一些思路。其主要的原因是之前写测试都是靠感觉,感觉哪些需要测试了,就写一个测试,所有的思考都是碎片化的,没有一个系统化思考的过程,也没有通过合理的流程做保证。

确实,无论是开发还是测试,良好的流程更能确保事情更加有条不紊的推进,能够帮助我们把思维聚焦在更小范围的事务上,从而达到更理想的效果。

对于自动化测试也是一样,我们需要有一个合理的流程,把涉及的工作分为几个阶段,每个阶段关注不同的要点,避免同一时刻关注点太多带来的思维分散。

那么,就我而言,我觉得把自动化测试分为如下3个阶段是比较合理的:

1、测试用例的设计
2、测试代码的架构
3、测试代码的编写

在接下来的篇幅中,我将详细的介绍每个阶段需要主要关注的事情以及如何把每个阶段都做的更好~

2、测试用例的设计

无论是自动化测试还是手动的黑盒测试,测试用例都是非常重要的,测试用例的质量直接关系到整体测试的效果。因此,我们第一步需要设计测试用例,保证测试用例能够最大范围的覆盖 API 的使用场景。

那么,如何才能设计好测试用例呢?

第一、合理的划分场景

一般而言,一个 API 或者一组 API 能满足用户的多个场景,在把握用户需求的基础上,我们需要将这些需求拆分成多个测试场景,通过合理的场景划分,一方面能够确保我们的 API 能够能够满足用户需求,另一方面聚焦每一个测试的范围,避免一个测试范围太广或者太窄,太广导致测试不到位,太窄需要写大量测试,浪费时间也不够高效。

第二、考虑边界条件

设计好主要场景的测试用例之后,API 的主要逻辑分支都应该被覆盖到了,接下来需要考虑针对边界条件的测试用例。

比较常见的边界条件有如下这些:

  • 权限,没有权限的用户操作会如何,是否正确返回 403
  • 非法数据提交是否正确检验,返回 400 错误
  • 业务逻辑中的异常流程

当然,边界条件的判定是很复杂的,各个应用根据其业务的不同而差异很大,重要性也各不相同,开发者应该就具体业务具体确定。

第三、引入 Review 机制

一个人难免有考虑不全面的情况,这个时候可以让团队的其他成员来 Review 这些测试用例,以便更早的做出优化和调整。

当然,Review 机制适用于任何阶段,只是一般而言, Review 的时间点越早,价值越大。

3、测试代码的架构

你没有看错,测试代码也是需要架构的,和我们写其他代码一样,良好的架构能够使得维护变得简单,扩展变得容易。

那么,测试代码的架构需要考虑哪些方面呢?

第一、测试库的选取与扩展开发

首先我们需要选择合适的测试库来让测试的编写更简单,如果所有工具都从零手动编写,那工作量无疑是巨大的。这个时候,我们需要根据自己的需求,选择合适的库来做测试开发,就我所熟悉 PHP 领域而言,可能是 PHPUnit 配合 Guzzle,可能是 Codeception,也可能是其他的。

当然,即便使用现成的库和工具,有的需求这些库也并不能满足,还需要进行一些扩展开发工作。比如我的前一篇文章中,为了更严谨的验证 json 结构而开发的 json-validator。

第二、基础业务的封装

在代码的世界中,有底层代码与上层代码的区分,底层代码被上层代码所调用,做为一个软件系统的基石。

测试代码也是类似的,底层的代码用于封装基础的业务逻辑,上层代码是最外层的业务测试,其运行依赖于底层代码。

例如,我们现在需要测试「登录用户能够正常发表文章」的这一场景,其中包含「让用户处于登录状态」和「发表文章」两个操作。很显然「让用户处于登录状态」应该更底层,许多操作都依赖于它,它应该属于底层代码的范畴。

在这个例子中,我们可以把「让用户处于登录状态」这一操作封装为底层库,让其他测试代码更方便的调用。

说了这么多,总结一下其实就四个字:分层思想。

4、测试代码的编写

有了良好的测试用例和测试架构支撑,终于到了「编写测试代码」这一环节,这一环节有如下两个要点,帮助我们高效的编写测试代码:

1、测试用例与测试代码分离

测试的过程,其实就是检查对应的输入能够得到期望的输出的过程,为了让同一段测试代码能够适用于更多的测试用例,我们可以把测试用例和测试输出参数化,同一类别的测试用例复用同一段测试代码,从而做到测试用例与测试代码的分离。这样做可以在新添加测试用例的时候不用修改测试代码,扩展性更好。

在 PHPUnit 中,我们可以通过内置 dataProvider 功能实现此目的,我相信其他测试框架应该也有对应的支持。

2、保持测试代码的简单

测试的代码应该尽量简单,最好是申明式的,给什么数据出什么结果,让人一目了然。如果测试代码逻辑复杂,又如何保证测试代码是正确的呢?可能与测试编写的初衷相悖。

最后:下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!【100%无套路免费领取】

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

  全套资料获取方式:点击下方小卡片自行领取即可

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面试必刷TOP101】二分查找-I 二维数组中的查找

目录 题目:二分查找-I_牛客题霸_牛客网 (nowcoder.com) 题目的接口: 解题思路: 代码: 过啦!!! 题目:二维数组中的查找_牛客题霸_牛客网 (nowcoder.com) 题目的接口&#xff1…

emacs怎么安装插件

2023年9月26日,周二下午 目录 Linux下Emacs的配置文件位置包管理器elpa怎么给elpa换源罗列可按照的插件怎么搜索插件怎么安装插件配置插件 Linux下Emacs的配置文件位置 默认配置文件位置是 ~/.emacs 或 ~/.emacs.d/init.el 如果没有inti.el的话,自己创…

产品经理如何进行项目管理?

在网上总是有人认为产品经理和项目经理不是一路人,工作上也没有什么共性,认为项目管理仅仅是项目经理的活,其实不然。一个项目从初始到结束这一整个周期,产品经理都是需要全程盯着的。 那么优秀的产品经理是怎么管理项目的呢&…

7、如何使用Flink中的窗口(Window算子)

目录 1、如何理解 Flink中的窗口(window) 2、Flink中窗口的类型 2.1 根据上游DataStream类型分类 2.2 根据驱动类型分类 2.3 根据进入到窗口数据的分发规则分类 3、怎样使用 Flink中的 Window算子 4、怎样使用 Flink中的 Window Assigners 4.1、…

Python 进阶 - 日常工作中使用过的简单Trick

引言:无论你是一名初学者还是有一定经验的开发者,这些技巧都能帮助你更好地利用Python来解决问题、提高效率和写出更干净、可维护的代码。无论你是数据科学家、Web开发者、自动化脚本编写者还是其他领域的从业者,这些技巧都能对你有所帮助。 …

Linux 日期、时区

1、date命令 通过date命令可以在命令行中查看系统的时间 date [-d] [格式化字符串] -d 按照给定的字符串显示日期,一般用于日期计算 格式化字符串:通过特定的字符串标记,来控制显示的日期格式 %Y 年 %y 年份后两位数字 (00..99) %m …

【百度地图】绘制扇形图层

思路:使用多边形图层PolygonLayer,借助函数将一个经纬度转换成扇形经纬度数组 扇形经纬度数组生成函数 /** 返回扇形经纬度数组 绘制多边形* lon 经度* lat 维度* radius 半径* azimuth 方向角* jiaodu(扇形的夹角)** **/ export…

java Spring Boot2.7写一个接口 提供图片预览 前端可以直接用接口地址当src为图片地址使用

我们特别是在做小程序开发时 很多图片会比较大 而小程序本身就对自身大小要求非常高 所以 图片放在服务器上提供访问链接是一种非常好的选择 我想很多前端会误认为 直接将图片放在服务器上就可以了 但其实没那么简单 因为服务器其实也可以理解为一个电脑 你就想 你自己本地都不…

python+requests+pytest+allure自动化框架

1.核心库 requests request请求 openpyxl excel文件操作 loggin 日志 smtplib 发送邮件 configparser unittest.mock mock服务 2.目录结构 base utils testDatas conf testCases testReport logs 其他 2.1base base_path.py 存放绝对路径,dos命令或Jenkins执行…

idea Springboot闲置物品交易平台VS开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 闲置物品交易平台是一套完善的完整二手交易信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代…

Wespeaker框架训练(2)

2. 模型训练 2.1 run.sh stage 3 数据集处理完毕后开始训练,主要是调用wespeaker/bin/train.py 函数 echo ”Start training ...” 打印提示信息,表示开始训练num_gpus$(echo $gpus | awk -F ’,’ ’print NF’) 通过gpus 变量获取要使用的GPU 数量t…

《C++ primer》练习6.36-6.38:书写返回数组引用的函数声明

最近看C primer,看到《C primer》6.3.3练习,要求书写返回数组引用的函数声明,觉得有必要实践记录一下。 这里先总结返回数组的引用的的函数声明写法(下面的Type是数组元素的类型,可以是int、float等,如果要…

企业架构相关

数据架构的作用首先是找到所有的业务对象 和数据对象。 在数据对象分析里面有一个重点就是主数据识别和分析。

OpenCV项目开发实战--使用 EigenFaces 进行人脸重建 (含C++/Python源码)

在这篇文章中,我们将学习如何使用 EigenFaces 重建面部。这篇文章是为初学者写的。如果您不了解主成分分析 (PCA) 或 EigenFaces。 什么是特征脸? 特征脸是可以添加到平均(平均)脸部以创建新的面部图像的图像。我们可以用数学方式将其写为: 在哪里,

【周赛364-数组】最大二进制奇数-力扣 2863 题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

vue pc端/手机移动端 — 下载导出当前表格页面pdf格式

一、需求:在手机端/pc端实现一个表格页面(缴费单/体检报告单等)的导出功能,便于用户在本地浏览打印。 二、实现:之前在pc端做过预览打印的功能,使用的是print.js之类的方法让当前页面直接唤起打印机的打印预…

win11、win10使用python代码打开和关闭wifi热点的正确方法

问题一 win10、win11,可以在任务栏的WIFI图标启动移动热点,但是无法设置SSID和密码。在网上搜索好久,无解。 万能的网络解决不了,只能自己动手解决了。 问题二 我当前的WiFi驱动程序不支持承载网络,如果我输入netsh…

JMeter+Python 实现异步接口测试

当使用JMeter和Python来实现异步接口测试时,可以按照以下步骤进行操作: 1、安装JMeter和Java Development Kit(JDK): 下载并安装JMeter(https://jmeter.apache.org/download_jmeter.cgi)和适用…

数组06-滑动窗口

目录 LeetCode——209. 长度最小的子数组 分析: LeetCode——844. 比较含退格的字符串 分析: LeetCode——209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续…

Apache Doris 行列转换可以这样玩

行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧。 行列转换就是如下图所示两种展示形式的互相转换 1. 行转列 我们来看一个简单的例子,我们要把下面这个表的数据,转换成图二的样式 image-20230914151818953.png …