接口自动化测试用例的编写方法

article/2025/7/16 0:56:58

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 

phpunit 接口自动化测试系列

Post接口自动化测试用例

Post方式的接口是上传接口,需要对接口头部进行封装,所以没有办法在浏览器下直接调用,但是可以用Curl命令的-d参数传递接口需要的参数。当然我们还以众筹网的登录接口为例,讲解post方式接口的自动化测试用例。

(1)接口文档

.登录(POST)
URL:http://api.zhongchou.cn/user/login

参数:

identity,用户名、用户手机、用户邮箱,三者之一

password,用户密码

返回:

errno,0:表示成功,非0:表示失败

User基础数据结构

token,成功会返回32位token字符串,失败会返回空字符串

这个接口文档很清楚,就是传递用户名和密码进行登录,登录后会返回user基本数据结构和Token。

(2)Curl命令执行

分析了接口文档,我们需要在终端下执行接口,然后才能根据接口的返回值来编写对应的接口测试用例。

在终端下执行命令:

[root@n028 api]# curl -d ‘identity=1838905&password=a**0’ http://api.zhongchou.cn/user/login?v=1

其中的identity为众筹网的用户名,password为密码,V=1是因为这个接口是第一版本的。执行结果如图4.2.1所示:

在这里插入图片描述

(3)Curl返回值查看

由于post方式无法用浏览器直接调用,返回结果是编码后的json字符串,不方便我们查看结果。所以我们要借助于chrome的插件。

打开chrome浏览器->右击浏览器,选择“审查元素”->在浏览器下部选择“Console”选项卡。在打开的栏目下的“>”后输入dir().然后将刚刚终端Curl返回的结果拷贝到这个函数中,回车即可解析结果。如图4.2.2所示:

在这里插入图片描述

(4)PHP调用Post方式接口

 PHP调用Post接口和Get方式有所不同,一般用以下方式调用,而且是固定的:

public function testlogin(){$url='http://api.zhongchou.cn/user/login?v=1';$post_params=array('identity'=>'183****8905','password'=>'a0****0');$ch = curl_init();//初始化curlcurl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页curl_setopt($ch, CURLOPT_HEADER, 0);//设置headercurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上curl_setopt($ch, CURLOPT_POST, 1);//post提交方式curl_setopt($ch, CURLOPT_POSTFIELDS,$post_params);$data = curl_exec($ch);//运行curlcurl_close($ch);echo  $data;}

然后执行代码,就可以看到如图4.2.3所示的输出结果:

在这里插入图片描述

如到Get方式,这个输出结果同样是经过编码后的json字符串,我们也需要对其进行json_decode()解码一下,然后再输出结果。所以增加以下两行代码:

res=jsond​ecode(data);

print_r($res);

此时的输出结果图4.2.4所示,简单清晰了许多。

在这里插入图片描述

(5)PHP编写Post接口自动化测试用例 

现在PHP能调用post方式的接口了,可是没有添加自动判断执行结果的脚本,不算是一个真正的测试用例。接下来我们添加上对返回值的assert语句,使之成为一个完整的自动化测试用例。

完整的测试用例如下:

public function testlogin(){$url='http://api.zhongchou.cn/user/login?v=1';$post_params=array('identity'=>'183****8905','password'=>'a0******0');$ch = curl_init();//初始化curlcurl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页curl_setopt($ch, CURLOPT_HEADER, 0);//设置headercurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上curl_setopt($ch, CURLOPT_POST, 1);//post提交方式curl_setopt($ch, CURLOPT_POSTFIELDS,$post_params);$res = curl_exec($ch);//运行curlcurl_close($ch);$data=json_decode($res,true);//print_r($data);if(is_null($data)==false){if($data['errno']=='0'){$this->assertEquals('0',$data['errno']);//判断errno是否为0,此步为抛出执行通过$index =strpos($data['data']['name'],'8905');$this->assertnotEquals(-1,$index);//判断结果是否包含关键字print('接口/user/login:登录接口------------------OK'."\n");}else{$this->assertEquals('0',$data['errno']);//抛出执行失败print("接口/user/login:登录接口---------------Failure!"."\n".$res."\n");}}}

Assert判断语句和get相似,先判断返回errno,然后判断返回的name是不是我们刚刚登录的账号。当然如果返回值不是我们预期的,也要使测试用例执行失败。执行结果如图4.2.5所示,同样如果要看接口返回值 ,注销掉//print_r($data);

在这里插入图片描述

测试用例的覆盖

上面我们讲述了get和post两种方式的接口自动化测试用例的编写,通过运行我们发现还是挺简单的嘛。不过上面两种测试用例只是接口的一个正常的测试用例,而对于一个接口的测试用例覆盖是非常多的。下面我们就常用的接口测试用例覆盖方法列举一下:

(1)必需参数覆盖。对于接口的参数,接口文档一般都会说明哪些儿是必需的,哪儿是非必需的。对于必需的参数,一定要测试传参数和不传参数接口是否报错?

(2)必需的参数各种情况覆盖。传非法的字符,特殊的字符,空值,超过边界的参数是否报错?错误信息是否正确?

(3)非必需参数覆盖。一般接口对于非必需参数都不会做非正常性传值的判断,所以要测试合法的参数值 ,接口返回的内容是否正确。如果有接口文档说明对非必需参数做了非正常的验证的话,也要对其进行验证。

(4)参数的组合覆盖。有些儿参数需要相互配合着才起作用,如“offset”和“count”组合起来进行翻页,这个时候要组合起来进行测试。

(5)业务逻辑相关的覆盖。有些儿接口与业务逻辑关联密切,单独从接口角度测试,可能会遗漏掉一些儿因业务逻辑而产生的bug。所以如果和业务逻辑相关,也要考虑到业务逻辑相关的测试用例。

其实接口的测试用例差不多也就这些儿情况,也许有特殊的接口,到时候和产品,开发人员做好沟通,尽量先从接口层面保证质量。这样再从测试接口的应用层的时候,就可以少很多工作量,只注重样式和各个接口调用的配合就可以了。

总结

本章讲述了常用的Get和Post方式Curl命令调用,浏览器调用和查看接口返回值的方法,以及对应的接口自动化用例的编写方法。最后还介绍了接口测试用例的覆盖方法,通过本章的学习我们可以参照接口文档,写出这个接口的所有自动化测试用例。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。


http://www.hkcw.cn/article/iPCrffYUhe.shtml

相关文章

2025030给荣品PRO-RK3566开发板单独升级Android13的boot.img

./build.sh init ./build.sh -K ./build.sh kernel 【导入配置文件】 Z:\Android13.0\rockdev\Image-rk3566_t\config.cfg 【更新的内核】 Z:\Android13.0\rockdev\Image-rk3566_t\boot.img 【导入分区表,使用原始的config.cfg会出错的^_】 Z:\Android13.0\rockdev\…

伊拉克军方打死6名“伊斯兰国”武装分子

△伊拉克联合行动指挥部发布视频截图当地时间5月30日,伊拉克联合行动指挥部下属安全媒体中心发表声明称,29日晚至30日早间,伊军方出动战机对位于该国北部萨拉赫丁省沙伊谷地的极端组织“伊斯兰国”武装分子藏匿点发动空袭,打死了6名武装分子,并摧毁其藏匿点。(总台记者 米…

Python打卡训练营Day40

DAY 40 训练和测试的规范写法 知识点回顾: 彩色和灰度图片测试和训练的规范写法:封装在函数中展平操作:除第一个维度batchsize外全部展平dropout操作:训练阶段随机丢弃神经元,测试阶段eval模式关闭dropout 作业&#x…

Haproxy搭建web群集

目录 一:Haproxy 1.Haproxy常见的调度算法 二:环境案例 1.配置web主机 2.配置haproxy主机 3.Haproxy日志 一:Haproxy Haproxy 是目前比较流行的一种群集调度工具,同类群集调度工具有很多,如 LVS 和 Nginx。相比较而言&#…

ansible自动化playbook简单实践

方法一:部分使用ansible 基于现有的nginx配置文件,定制部署nginx软件,将我们的知识进行整合 定制要求: 启动用户:nginx-test,uid是82,系统用户,不能登录 启动端口82 web项目根目录/…

一句话开发Chrome摸鱼插件

本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴。 CodeBuddy 一、CodeBuddy新功能特色 Craft智能体:自然语言驱动的全栈开发引擎Craft开发智能体的核心突破在于实现需求理解-任务拆解-代码生成的…

2024PLM系统实施案例:天水天轲零部件

一、行业背景与中小企业的现实挑战 汽车零部件行业竞争激烈,中小企业普遍面临研发周期长、数据管理混乱、供应链协同效率低等问题。天水天轲零部件作为一家年产值约700万元的小型制造企业,其痛点具有行业典型性: 研发数据分散&#xff1a…

Linux(8)——进程(控制篇——上)

目录 ​编辑 一、进程创建 1.fork函数的回顾 2.fork的返回值 3.写时拷贝 4.fork的常规用法 5.fork调用失败的原因 二、进程终止 1.进程退出的场景 2.进程常见的退出方法 3.进程退出码 4.进程正常退出 1)_exit函数 2)exit函数 3&#xff…

万亿小吃市场背后:冷链配送如何破解连锁门店“到店难题”?

在餐饮行业连锁化率突破23%、小吃快餐品类占据连锁门店半壁江山的今天,冷链配送已成为支撑品牌扩张的隐形基础设施。从田间到餐桌,从中央厨房到终端门店,冷链物流的每一次温度波动都直接关联着消费者的味蕾体验与品牌口碑。本文将解析冷链配送…

基于Java+MySQL 实现(Web)企业信息展示系统

基于java web企业信息展示系统设计和实现 摘要 随着企业经营环境的不断变化和竞争的口益加剧,企业经营管理水平的提高已成当务之急,人力资源管理作为企业管理中最重要的部分,其水平的高低已成企业发展的关键因素。随着计算机技术特别是互联…

11.2 java语言执行浅析3美团面试追魂七连问

美团面试追魂七连问:关于Object o New Object() ,1请解释一下对象的创建过程(半初始化) 2,加问DCL要不要volatile 问题(指令重排) 3.对象在内存中的存储布局(对象与数组的存储不同),4.对象头具体包括什么.5.对象怎么定位.6.对象怎么分配(栈-线程本地-Eden-Old)7.在…

SpringBoot+Vue+微信小程序校园自助打印系统

概述​​ 校园自助打印系统是现代化校园建设中不可或缺的一部分,基于SpringBootVue微信小程序开发的​​免费Java源码​​项目,包含完整的用户预约、打印店管理等功能模块。 ​​主要内容​​ ​​ 系统功能模块​​ ​​登录验证模块​​:…

特伦斯 S75 电钢琴:奏响极致音乐体验的华丽乐章

在音乐爱好者增多、音乐教育普及,以及科技进步的推动下,电钢琴市场蓬勃发展。其在技术、品质和应用场景上变化巨大,高端化、个性化产品受青睐,应用场景愈发多元。在此背景下,特伦斯 S75 电钢琴以卓越性能和独特设计&am…

OpenCV---pointPolygonTest

一、基本概念与用途 pointPolygonTest 是 OpenCV 中用于判断点与多边形关系的重要函数,常用于: 目标检测:判断像素点是否属于检测到的轮廓区域碰撞检测:检测物体是否重叠图像分割:确定点是否在分割区域内几何分析&am…

深入详解DICOMweb:WADO与STOW-RS的技术解析与实现

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…

20250530-C#知识:万物之父Object

C#知识:万物之父Object Object类(即object)是所有类的基类,这里面的方法还是需要好好了解一下。 1、Object类 是顶级父类,其他类默认都是Object类的子类(自定义类也会默认继承Object类)可以用O…

ollama国内安装使用

解决国内下载慢和安装卡住问题 docker安装-优先推荐 https://hub.docker.com/r/ollama/ollama/tags docker pull ollama/ollama:latestGitHub 镜像加速 改安装脚本、使用 GitHub 镜像和文件加速服务 https://defagi.com/ai-case/ollama-installation-guide-china/ modelsco…

阻塞队列的学习以及模拟实现一个阻塞队列

前言 今天上午学习了阻塞队列。之前在数据结构的时候,学过队列。把队列放在多线程中,对队列会有新的体会。我自己也实现了一个阻塞队列结合生产消费模型,希望对于大家有帮助~ 阻塞队列的相关知识 结语 本次的分享就结束啦。端午安康~

深度学习赋能图像识别:技术、应用与展望

论文: 一、引言​ 1.1 研究背景与意义​ 在当今数字化时代,图像作为信息的重要载体,广泛存在于各个领域。图像识别技术旨在让计算机理解和识别图像内容,将图像中的对象、场景、行为等信息转化为计算机能够处理的符号或数据 &am…

如何通过一次需求评审,让项目效率提升50%?

想象一下,你的团队启动了一个新项目,但需求模糊不清,开发到一半才发现方向错了,返工、加班、客户投诉接踵而至……听起来像噩梦?一次完美的需求评审就能避免这一切!它就像项目的“导航仪”,确保…