接口自动化测试用例如何设计

说到自动化测试,或者说接口自动化测试,多数人的第一反应是该用什么工具,比如:Python Requests、Java HttpClient、Apifox、MeterSphere、自研的自动化平台等。大家似乎更关注的是哪个工具更优秀,甚至出现“ 做平台的 > 写脚本的 > 用工具的 ”诸如此类的鄙视链,但却很少有人去关注接口测试用例的设计问题。

在我看来,工具并没有高低贵贱之分,只能说哪个更适合,适合当前的业务以及适合当前的团队协作。

自动化测试的本质还是测试,自动化只是为了提高测试的效率,而测试的基础是测试用例,因此我们不应该忽略接口自动化测试用例的设计问题。换言之,当你掌握了自动化测试用例的设计思想以及方法,无论用什么工具,都能得心应手,因为工具的东西多练多操作肯定能学会,而思维认知的东西则需要在学习他人好的方法的基础上自己琢磨领悟,并形成一套自己的经验总结。

想象一下,回归测试的时候,成百上千的接口执行下来,没有报错,我们真的对系统放心吗,我们又是怎样衡量自动化脚本是否合理的呢?

所以,今天就来聊聊接口自动化测试用例如何设计。

接口信息来源

与界面功能测试相比,除了要明确需求和测试目标之外,接口测试还需要有针对性地去设计测试数据和接口的组合,确定接口信息通常有两条路径,一是通过接口文档获取,二是通过接口抓包获取。

接口文档

开发人员一般不喜欢写接口文档,同时也讨厌别人不写接口文档,就像程序员一般不喜欢写注释,同时也讨厌不写注释的代码,所以测试人员想要获取一份相对完善的接口文档有时是比较麻烦的,这就需要驱动开发人员提供,这对于开发人员来说并不困难。

统一的接口文档管理方式也是比较多的,比如:在wiki上创建一个接口文档目录空间专门用于维护接口信息、系统后台管理中有专门的接口文档模块、在需求单子下面备注、使用apifox工具进行接口文档的维护管理等。同时现在也有很多插件或工具能够帮助开发人员自动生成接口文档,比如:swagger、apidoc、yapi。

作为测试人员需要关注接口文档的有效性和及时性,包括:Request URL、Request Method、Content-Type、请求参数、响应结果、请求示例等。

抓包

如果没有接口文档,那就只能自己动手丰衣足食,通过抓包分析的方式来获取接口信息,常见的抓包工具比如:浏览器F12、Fiddler、Charles等,还可以把Fiddler抓到的接口导出,通过工具转成接口平台可识别的脚本,进而提高效率。

在获取到接口信息后,还需要与开发人员多进行交流,明确接口参数的含义和来源,以便于我们有针对性地进行用例的设计,有不明确的点应当直接找开发同学问清楚,而不应该自己过多的猜想,避免自己的猜想有误造成后续用例设计的错误。在此阶段,还需梳理接口的优先级和重要程度,根据优先级顺序进行用例设计,在有限的时间内,做最大价值的事。

单接口测试

单接口测试主要验证接口的请求地址、请求类型、请求格式、请求参数、权限、返回值等为主,目的是保证接口能跑通,这类用例一般在接口设计完成后定稿,使用过程中可配合Mock服务完成用例编写。

场景逻辑验证

场景逻辑验证是以用户场景为基础,验证接口间的参数传递和业务流程是否能够正常流转,比如:用户注册接口 --> 用户登录接口 --> 修改用户信息接口,使得业务流程形成闭环。

这个阶段的用例复杂度较高,需要非常熟悉业务与接口之间的关系,同时也是接口测试的核心部分、最有价值的部分。

异常测试

与界面功能测试类似,除了测试各种正常场景外,还需要验证各种异常情况,主要验证参数异常,比如:某个参数的类型是String,当你传入其他类型时是否会报错并给出提示;某个参数的长度限制200个字符,当超过200个字符时是否给出提示;某个参数是必填,当不传为空时是否有非空判断。还需要验证逻辑异常等情况下接口是否能够处理并给出友好的提示信息、提示是否准确清晰以及返回的信息是什么。通常情况下,关注参数的异常场景会比较多,可以用等价类、边界值等方法进行传参的设计。

尽量自动化

所有用例应该是非交互式的,能自动化就不要手动去获取。最常见的就是token的获取,获取token的方法也有很多种,最常用的就是通过调用登录接口获取返回值中的token,用于后续接口的鉴权,还有一些开放平台接口,token有特定的生成规则,就可以将其写成脚本自动生成token,而不是每次执行测试用例之前,需要手动生成token再复制粘贴到脚本中,特别是分环境测试时就会很麻烦,而且token一般是有有效时间的,写成自动化脚本,每次都获取都是最新的,就不用担心token过期的问题了。

独立性

用例之间相互独立,不能有依赖,需要在每一个用例里处理好前置条件,而不是多个用例相互依赖。

可重复性

用例测试应该是可以重复执行的,因此需要注意参数的生成方式。

合理的断言

黑盒测试的重点是输入和输出,其实集成后的接口测试也属于黑盒测试,也许我们不需要关注内部的代码是如何实现的,更多的是关注请求参数和响应结果,因此在设计用例时,需要重点关注断言的设计,好的断言能够帮助我们发现问题,没有断言的用例或者脚本就是在耍流氓,完全没有意义,如果没有断言,全部用例都是pass,那我们也无法真正对系统放心,无法确保一定没有问题。

从接口层面上看,我们至少需要关注两方面的验证,一是数据结构验证,二是核心数值验证。

数据结构验证就是校验接口返回的数据结构是否与事先约定好的一致,调用方在处理数据时,肯定是按照事先约定好的数据结构来解析数据,如果数据结构发生了变化,那么对调用方来说,无疑是灾难性的事故,也就是说之前已经开发完成的程序在对接时就会出错,导致需要重新开发。

核心数值的验证需要根据不同的业务场景,有针对性地验证某些键值是否与预期一致,同时可以结合数据库查询的方式来验证,比如:用户注册接口调用成功后会返回一个用户ID,此时就可以使用SELECT * FROM user_table WHERE user_id = "";以判断是否真的注册成功,这个比较依赖于测试人员对于业务的了解程度,根据实际情况灵活设计即可。

除此之外,还有一些额外的验证点在需要的时候也可以进行校验,比如:返回的URL是否能访问、涉及到数据流转的、返回的数据是否真的有必要(避免返回数据量过大导致意外情况发生)。

通过添加合理的断言,才能让接口自动化用例有一定的业务价值,能够真正帮助到团队提升效率,这样的测试结果才能让人安心。

公共参数

接口自动化测试中一个很重要的环境就是测试数据的准备,要想让脚本可以在多套环境中运行,那么测试数据就不能写得太死,需要根据具体环境去自动获取一些数据值。

公共参数就是通过不同作用域或标识的区分,有一个专门的模块来处理一些公用数据的存放,比如:不同环境的账号密码,不同环境的URL等。

数据集合

通过特定的API或数据库SQL,事先生成一些所需的数据作为前置条件,然后存放到一个特定的集合中,需要的时候再从数据集合里面取。

数据模板

由于测试环境一般会有多套,为了方便环境的切换,我们不应该把太多的数据信息写死,而是通过填写一些简单的信息,再调用基础接口,自动生成一整套业务数据,比如:用户信息包含用户名、手机号、邮箱、注册时间等,此时我们不应该把这些信息都写死,而是通过用户id去调用用户信息查询接口获取一整套用户信息数据。

对于接口自动化测试用例的设计,可能不同的人有不同的思路和想法,我们要做的就是取其精华,把一些好的思路和方法在具体项目中实践,并形成一套自己的经验总结。

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

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

相关文章

前后端分离Vue+node.js在线学习考试系统gqw7o

与其它应用程序相比,在线学习平台的设计主要面向于学校,旨在为管理员和学生、教师、院系提供一个在线学习平台。学生、教师、院系可以通过系统及时查看公告信息等。 在线学习平台是在Windows操作系统下的应用平台。为防止出现兼容性及稳定性问题&#xf…

多输入时序预测|WOA-CNN|鲸鱼算法优化的卷积神经网络时序预测(Matlab)

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、部分程序: 四、完整程序数据下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matalb平台编译&…

无人集群试验评估现状及技术方法综述

源自:系统工程与电子技术 作者:赵蕊蕊, 于海跃, 游雅倩, 张涛, 陶敏, 姜江 “人工智能技术与咨询” 发布 摘 要 试验评估是促进装备系统作战能力生成和实战化应用的重要手段。无人集群依靠自组网实现复杂交互, 具备典型的智能性和涌现性, 开展无人集…

【大数据】Flink SQL 语法篇(四):Group 聚合

Flink SQL 语法篇(四):Group 聚合 1.基础概念2.窗口聚合和 Group 聚合3.SQL 语义4.Group 聚合支持 Grouping sets、Rollup、Cube 1.基础概念 Group 聚合定义(支持 Batch / Streaming 任务):Flink 也支持 G…

复制策略深入探讨

在之前的博客中,我们讨论了复制最佳实践和不同类型的复制,例如批量、站点和存储桶。但是,随着所有这些不同类型的复制类型的出现,人们不得不想知道在哪里使用哪种复制策略?从现有 S3 兼容数据存储迁移数据时&#xff0…

SV-6301 IP网络可视对讲报警柱简介

SV-6301 IP网络可视对讲报警柱简介 18123651365微信 功能特点: 1.全金属外壳,户外防风雨,坚固耐用,易于识别 2.单键呼叫,可通过软件指定呼叫目标,双向可视对讲广播喊话 3.终端内置扬声器和话筒眯头&…

GZ036 区块链技术应用赛项赛题第10套

2023年全国职业院校技能大赛 高职组 “区块链技术应用” 赛项赛卷(10卷) 任 务 书 参赛队编号: 背景描述 养老保险是对于老年人的最基本的生活保障。各种数据显示,当前的养老金市场规模庞大。2016年美国的养老金资…

SpringCloud-Docker原理解析

Spring Cloud和Docker的结合为微服务架构的部署和管理提供了强大的支持。本文深入剖析Spring Cloud与Docker的集成原理,从服务注册与发现、配置管理、负载均衡到容器化部署等方面展开详细解析。探讨Spring Cloud如何利用Docker容器技术实现服务的弹性伸缩&#xff0…

Linux系统中前后端分离项目部署指南

目录 一.nginx安装以及字启动 解压nginx 一键安装4个依赖 安装nginx 启动 nginx 服务 开放端口号 并且在外部访问 设置nginx自启动 二.配置负载均衡 1.配置一个tomact 修改端口号 8081端口号 2.配置负载均衡 ​编辑 三.部署前后端分离项目 1.项目部署后端 ​编辑…

SpringBoot3——核心特性——快速入门(三)

4、核心技能 4.1、常用注解 SpringBoot摒弃XML配置方式,改为全注解驱动 4.1.1、组件注册 Configuration、SpringBootConfiguration Bean、Scope Controller、 Service、Repository、Component Import ComponentScan 步骤: 1、Configuration 编写一个配置…

MFC由初值终值步长生成数值序列

matlab的冒号运算符可以生成数值序列; 下面来生成自己的数值序列; vc6新建一个对话框工程; 放几个控件;添加成员变量如下; void CMycolonDlg::OnButton1() {// TODO: Add your control notification handler code hereUpdateData(TRUE);double d1, d2;CString str1, …

Linux基础命令—进程管理

基础知识 linux进程管理 什么是进程 开发写代码->代码运行起来->进程 运行起来的程序叫做进程程序与进程区别 1.程序是一个静态的概念,主要是指令集和数据的结合,可以长期存放在操作系统中 2.进程是一个动态的概念,主要是程序的运行状态,进程存在生命周期,生命周期结…

YOLO算法改进Backbone系列之:EfficientViT

EfficientViT: Memory Effificient Vision Transformer with Cascaded Group Attention 摘要:视觉transformer由于其高模型能力而取得了巨大的成功。然而,它们卓越的性能伴随着沉重的计算成本,这使得它们不适合实时应用。在这篇论文中&#x…

ChatGPT/GPT4科研应用与AI绘图及论文高效写作

原文:ChatGPT/GPT4科研应用与AI绘图及论文高效写作 第一:2024年AI领域最新技术 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大讯飞-星火认知 5.百度-文心一言 6.MoonshotAI-Kimi 7.智谱AI-GLM-4 第二:…

【CT成像】VGSTUDIO MAX最小系统要求检查缺少支持OpenGL3.3的解决办法

【CT成像】VGSTUDIO MAX最小系统要求检查缺少支持OpenGL3.3的解决办法 1.背景2.分析3.解决办法4.资源 1.背景 我把自己的台式机电脑进行了VMware ESXi 虚拟化。 在vmware ESXi系统中安装了windows系统, 并在windows系统中安装了VGSTUDIO MAX软件。 在运行VGSTUDIO…

matlab一维二维和三维RBF插值方法

1、内容简介 略 50-可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 matlab一维二维和三维RBF插值方法_哔哩哔哩_bilibili 4、参考论文 略

电商赠品数据可以监测吗

很多店铺为了引流,会在标题、图片上标明促销活动,常见的有赠品描述,由于现在监测价格技术的壁垒,其实很多时候,主图上的赠品信息因其描述方式、字体等的不同,会导致监测不出来的情况出现,这也给…

代码签名常见问题解答!!!

1、什么是代码签名证书? 代码签名证书(Code Signing Certificate)是受信任的证书颁发机构颁发给软件开发者,对其开发的可执行脚本、软件代码和内容进行数字签名的数字证书。代码签名证书用于验证开发者身份真实性、保护代码的完整…

【计算机网络】传输层——TCP和UDP详解

文章目录 一. TCP和UDP简介二. UDP 协议详解1. UDP报文格式2. UDP的使用场景 三. TCP 协议详解1. TCP报文格式2. TCP协议的重要机制确认应答(保证可靠传输的最核心机制)超时重传连接管理(三次握手、四次挥手)!&#xf…

微信小程序-宿主环境-开发文档学习笔记

查看更多学习笔记:GitHub:LoveEmiliaForever 微信小程序开发指南 微信小程序开发文档 渲染层和逻辑层 WXML 模板和 WXSS 样式工作在渲染层,JS 脚本工作在逻辑层 渲染层和数据相关。逻辑层负责产生、处理数据。逻辑层通过 Page 实例的 setD…