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

说到自动化测试,或者说接口自动化测试,多数人的第一反应是该用什么工具,比如: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://www.hqwc.cn/news/492010.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盛元广通兽医实验室信息管理系统

兽医实验室信息管理系统在区域发展中扮演着关键角色,为动物卫生、兽医科研、医学教育和疾病防控等方面提供了有力的支持。实验室信息管理系统有助于建立全面的卫生防疫监测网络,从实验室用户、市级、省级和部级用户按级别分级上报,能够及时监…

DevOps的3大核心基础架构

原文链接:DevOps的3大核心基础架构_软件开发生产线 CodeArts_理论实践_DevOps概览 由于近年DevOps概念的火热,加之DevOps的涵盖面非常广,因此有很多文章和技术都在和DevOps强行关联,使很多想要了解学习DevOps的开发者迷惑不解。 …

java面试题之mysql篇

1、数据库索引 ​​​​​​​ 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。 索引的一个主要…

MCU独立按键单控LED实现

##江科大视频学习,并且对具体的一些小细节进行更详细的分析。 什么是独立按键? 轻触按键:相当于是一种电子开关,按下开头接通,松开时开头断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。 注意…

第六十七天 APP攻防-Frida反证书抓包移动安全系统资产提取评估扫描

第67天 APP攻防-Frida反证书抓包&移动安全系统&资产提取&评估扫描 知识点: 1、资产提权-AppinfoScanner 2、评估框架-MobSF&mobexler 3、抓包利器-Frida&rOcapture 章节点: 1、信息收集-应用&资产提取&权限等 2、漏洞发现…

数据库安全性与完整性设计

文章标签集合[数据库安全,数据敏感,通信安全,MD5,盐加密] 1 系统设计 1.1设计目标 (1)确定系统中需要保护的敏感数据和通信内容; (2)设计合适的签名、加密和解密算法; (3)实现…

npm i卡在 idealTree buildDeps没反应的解决方案

通过git clone拉下项目后,进行项目的初始化下包时,发现npm i 并没有反应(如图): 关键点:IdealTree 1.网络问题 确保你的网络连接正常,能够正常访问 npm 仓库。有时网络问题可能导致包无法正确…

JWT学习笔记

了解 JWT Token 释义及使用 | Authing 文档 JSON Web Token Introduction - jwt.io JSON Web Token (JWT,RFC 7519 (opens new window)),是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准((RFC 7519)。该 token 被设计为紧凑…

PyTorch中Tensor(张量)数据结构内部观察

上图中是一个张量embeds,打开其内部存储空间,我们可以看到内部的构成。在PyTorch中,Tensor 具有许多属性和方法。以下是其中一些关键的属性和方法: 属性: H: 在标准的PyTorch API中并没有直接表示为 .H 的…

AR应用的开发流程

增强现实(Augmented Reality,AR)是一种技术,它将虚拟信息叠加在真实世界中,通过计算机生成的视觉、听觉、触觉等感官反馈,将虚拟元素与现实世界进行交互。这种技术使得用户可以与现实世界中的虚拟对象进行互…

前端学习---- 前端HTML基本元素的介绍

一&#xff1a;显示相关的HTML基础知识 1. 推荐的前端编写工具 2. VScode的html速写规则&#xff08;从a标签开始再用&#xff09; ①、&#xff01;&#xff1a;代表生成html的基本框架元素 ②、html元素&#xff1a;直接书写html,不需要加<>,按回车会自动生成 ③、{}…

我的NPI项目之Android 安全系列 -- Android Strongbox 使能(一)

这里借用Android14高通相关的技术文档作为基础文档&#xff0c;该文档描述的是基于NFC的secure element. NFC型号为SN220. 有些概念的说明&#xff1a; 1. RoT 在我们目前的这个上下文中&#xff0c;首先RoT下几个内容&#xff0c;Bootinfo/ Additonal params(images hash) /…