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

🍅 视频学习:文末有免费的配套视频可观看

🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快

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命令调用,浏览器调用和查看接口返回值的方法,以及对应的接口自动化用例的编写方法。最后还介绍了接口测试用例的覆盖方法,通过本章的学习我们可以参照接口文档,写出这个接口的所有自动化测试用例。

同时,在这我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看就行,希望对你有所帮助!

7天Python自动化测试速成课,小白也能快速上手(项目实战)

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

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

相关文章

2007-2022年上市公司迪博内部控制评价缺陷数量数据

2007-2022年上市公司迪博内部控制评价缺陷数量数据 1、时间:2007-2022年 2、范围:上市公司 3、指标:证券代码、证券简称、辖区、证监会行业、申万行业、是否存在财报内控重大缺陷、财报内控重大缺陷数量、是否存在财报内控重要缺陷、财报内…

植物病害识别:YOLO甘蔗叶片病害识别分类数据集

YOLO甘蔗叶片病害识别数据集, 包含尾孢菌叶斑病,眼斑病,健康,红腐病,锈病,黄叶病6个常见病类别,3300多张图像,yolo标注完整,全部原始图像,未应用增强。 适用于CV项目&…

【Web - 框架 - Vue】随笔 - Vue的简单使用(01) - 快速上手

【Web - 框架 - Vue】随笔 - Vue的简单使用(01) - 快速上手 Vue模板代码 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>模板</title> </head> <body> <div></di…

内容检索(2024.03.08)

随着创作数量的增加&#xff0c;博客文章所涉及的内容越来越庞杂&#xff0c;为了更为方便地阅读&#xff0c;后续更新发布的文章将陆续在此汇总并附上原文链接&#xff0c;感兴趣的小伙伴们可持续关注文章发布动态&#xff01; 本期更新内容&#xff1a; 1. 电源完整性理论与…

CMake笔记

CMake笔记 文章目录 CMake笔记1 工程项目一般形式2 常见命令2.1 project2.2 set2.3 message2.4 add_executable()2.5 语法原则2.6 add_subdirectory2.7 add_library2.8 list 3 安装3.1 安装.h文件/文本文件3.2 安装工程脚本3.3 安装目录/目录下内容3.4 安装库文件3.5安装过程 4…

cocos creator 3.7.2使用shader实现图片扫光特效

简介 功能&#xff1a;图片实现扫光效果 引擎&#xff1a;cocos Creator 3.7.2 开发语言&#xff1a;ts 完整版链接 链接https://lengmo714.top/284d90f4.html 效果图 shader代码 // Copyright (c) 2017-2020 Xiamen Yaji Software Co., Ltd. CCEffect %{techniques:- pas…

CorelDRAW Graphics Suite2024免费试用体验15天版下载

使用基于全球知名的 Corel Painter 画笔技术构建的 100 款逼真像素画笔&#xff0c;以全新的方式将您独特的想法变为现实&#xff01;试用 CorelDRAW 的全新美术画笔&#xff0c;探索您的创意想法。 使用 CorelDRAW 中现在可用的远程字体&#xff0c;畅享更多创作自由&#xf…

【linux驱动开发】IO模型之同步IO、异步IO、IO多路复用

文章目录 IO的概述IO模型的实现阻塞IO非阻塞IOIO多路复用信号驱动异步IO 编译与测试说明 IO的概述 io&#xff0c;英文名称为inoput与output&#xff0c;表示输入与输出。 在冯诺依曼结构计算机中&#xff0c;计算机由 运算器、控制器、存储器、输入、输出五部分组成&#xf…

warning: #188-D: enumerated type mixed with another type

警告解释&#xff1a;枚举类型混合了其它的数据类型&#xff1b; 解决方法&#xff1a; 1&#xff1a;检查代码&#xff0c;是不是存在混用&#xff1b;&#xff1b; 2&#xff1a;结构体初始化为 0 报warning&#xff0c;不能将结构体的第一个变量&#xff0c;使用枚举类型&am…

安全防御第七次实验

需求&#xff1a;在FW7和FW8之间建立一条IPSEC通道保证10.0.2.0/24网段可以正常访问到192.168.1.0/24 一、NAT配置 FW4&#xff1a; FW6&#xff1a; 二、在FW4上做服务器映射 三、配置IPSEC FW5&#xff1a; FW6&#xff1a; 四、防火墙上的安全策略 FW4&#xff1a; FW5:…

VBA中类的解读及应用第十讲:限制文本框的输入,使其只能输入数值(上)

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。 类&#xff0c;是非常抽象的&#xff0c;更具研究的价值。随着我们学习、应用VBA的深入&#xff0…

【动态规划.3】[IOI1994]数字三角形 Number Triangles

题目 https://www.luogu.com.cn/problem/P1216 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径&#xff0c;使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。 7→3→8→7→5 的路径产生了最大权值。 分析 这是一个动态规划…

抽象版忘记密码模板0.1版本

背景&#xff1a;用户密码忘了&#xff0c;无法登录&#xff0c;怎么办&#xff01;急&#xff01;急&#xff01;急&#xff01; 前置工作——Srpingboot3-maven项目&#xff0c;核心框架如下 <dependency><groupId>org.springframework.boot</groupId><…

Redis核心数据结构之字典(二)

字典 解决键冲突 当有两个或以上数量的键被分配到了一个哈希表数组的同一个索引上面&#xff0c;我们称这些键发生了冲突(collision)。 Redis的哈希表使用链地址法(separate chaining)来解决键冲突&#xff0c;每个哈希表节点都有一个next指针&#xff0c;多个哈希表节点可以…

数据库原理实验课(1)

目录 实验内容 安装头歌中的相关内容 具体过程 完结撒花~ 我也是第一次接触oracle的相关软件和操作&#xff0c;所以是一次傻瓜式教学记录 实验内容 安装头歌中的相关内容 具体过程 这是我在百度网盘中下载解压出来的oracle文件夹内的全部内容&#xff08;可能有因为安装完…

CodeSys通过C函数接口调用Qt

建议先查看之前的文章【CodeSys中调用C语言写的动态库】&#xff0c;了解如何创建一个能够被codesys调用的动态库。 假如想要在函数中使用Qt或者第三方库&#xff08;比如opencv等&#xff09;&#xff0c;可以在其自动生成的makefile文件中设置好相应的参数。 比如我这里就是…

2024037期传足14场胜负前瞻

2024037期售止时间为3月9日&#xff08;周六&#xff09;20点00分&#xff0c;敬请留意&#xff1a; 本期深盘多&#xff0c;1.5以下赔率4场&#xff0c;1.5-2.0赔率5场&#xff0c;其他场次是平半盘、平盘。本期14场整体难度中等。以下为基础盘前瞻&#xff0c;大家可根据自身…

力扣刷题Days13-101对称二叉树(js)

目录 1,题目 2&#xff0c;代码 2.1递归思想 2.2队列--迭代思想 3&#xff0c;学习与总结 1,题目 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 2&#xff0c;代码 2.1递归思想 return dfs(left.left, right.right) && dfs(left.right, right.l…

IDS入侵检测知识整理及lDS入侵检查表

【IDS入侵检测知识整理及lDS入侵检查表】 1. 网络入侵检测IDS概念 2. IDS分类 3. IDS的工作原理 4. IDS在网络中的部署 5. 入侵检查表 项目建设全套资料获取通道&#xff1a;软件开发全套资料_数字中台建设指南-CSDN博客

echarts中toolbox 中文乱码问题

问题描述 本地引用的echarts源文件&#xff0c;页面其他部分编码显示正常&#xff0c;唯独toolbox鼠标悬停在上面时提示信息显示乱码。 如图所示&#xff1a; 尝试过的方法 使用sublime text 3&#xff0c;notepad&#xff0c;记事本更改文件编码为utf-8引入时&#xff0c;在sc…