接口自动化测试用例详解

news2024/11/22 15:22:35

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();//初始化curl
 
        curl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页
 
        curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
 
        curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
 
        curl_setopt($ch, CURLOPT_POSTFIELDS,$post_params);
 
        $data = curl_exec($ch);//运行curl
 
        curl_close($ch);
 
  
 
        echo  $data;
 
    }

然后执行代码,就可以看到如图4.2.3所示的输出结果:
在这里插入图片描述
如到Get方式,这个输出结果同样是经过编码后的json字符串,我们也需要对其进行json_decode()解码一下,然后再输出结果。所以增加以下两行代码:

r e s = j s o n d e c o d e ( res=json_decode( res=jsondecode(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();//初始化curl
 
        curl_setopt($ch, CURLOPT_URL,$url);//抓取指定网页
 
        curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
 
        curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
 
        curl_setopt($ch, CURLOPT_POSTFIELDS,$post_params);
 
        $res = curl_exec($ch);//运行curl
 
        curl_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命令调用,浏览器调用和查看接口返回值的方法,以及对应的接口自动化用例的编写方法。最后还介绍了接口测试用例的覆盖方法,通过本章的学习我们可以参照接口文档,写出这个接口的所有自动化测试用例。下章节我们将讲述对测试架构的规划及测试用例的组织。

最后:下方这份完整的自动化测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】

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

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

相关文章

Qt 事件机制

【1】事件 事件是可以被控件识别的操作。如按下确定按钮、选择某个单选按钮或复选框。 每种控件有自己可识别的事件,如窗体的加载、单击、双击等事件,编辑框(文本框)的文本改变事件等等。 事件就是用户对窗口上各种组件的操作。…

速锐得适配北汽EX系列电动汽车CAN总线应用于公务分时租赁

过去的几年,我们看到整个分时租赁业务出现断崖式下跌,这是我们看到这种市场情况,是必然,也是出乎意料。原本很多融资后的出行公司、大牌的出行服务商的分时租赁业务,受各种影响不得不转型成其他出行服务。例如&#xf…

图像处理实战--Opencv实现人像迁移

前言: Hello大家好,我是Dream。 今天来学习一下如何使用Opencv实现人像迁移,欢迎大家一起参与探讨交流~ 本文目录:一、实验要求二、实验环境三、实验原理及操作1.照片准备2.图像增强3.实现美颜功能4.背景虚化5.图像二值化处理6.人…

C++ 实现pcm 转wav

输入音PCM 属性&#xff1a; 16k采样率 16位深 单声道 #include <iostream> #include <vector> #include <fstream> using namespace std; /* wav音频头部格式 */ typedef struct _wave_pcm_hdr { char riff[4]; // "RIFF&…

接口测试神器——Apifox从安装到使用的详细教程

目录 Apifox简介 安装 API文档导入 接口管理 接口设计 接口调试 使用脚本 Mock数据 测试管理 主题设置 总结 重点&#xff1a;配套学习资料和视频教学 Apifox简介 Apifox 的定位是Postman Swagger Mock JMeter&#xff0c;具有API文档管理、API调试、API Mock、…

2022年“网络安全”赛项山东省菏泽市选拔赛任务书

2022年“网络安全”赛项山东省菏泽市选拔赛任务书 任务书 一、竞赛时间 共计3小时。 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段单兵模式系统渗透测试 任务一&#xff1a;Apache安全配置 任务二&#xff1a;数据分析-A 任务三&#xff1a;Windows操作系…

四信5G智慧灯杆落地厦门软件园 赋能园区实现智慧升级

2023年初&#xff0c;四信5G智慧灯杆项目落地厦门市集美软件园三期&#xff0c;实现一杆多能、多杆合一&#xff0c;为园区智慧管理和产业经济数字化高效赋能&#xff0c;打造智慧园区5G智慧灯杆项目标杆。 5G智慧灯杆赋能园区实现智慧升级 园区是城市发展的重要组成部分&#…

Xiou的个人说明

小幽&#xff08;Xiou&#xff09;的个人说明书 V1.0 小幽是谁? 周六读书吧推广大使&#xff0c;终身学习爱好者、终身阅读爱好者、硬件工程师、学习成长陪伴伙伴、大学生职业规划答疑解惑者。 拥有【结构化思维】、【执行力】、【超强学习力】、【前瞻】等核心能力。 过往…

serdes理解

serdes概念 serdes是一种TX并行转串行传输&#xff0c;RX串行转并行的接收的串并转换协议。而且在传输过程中不传输时钟信号&#xff0c;通过从数据信号中恢复时钟。serdes和PHY不是等效的概念。满足serdes协议的有很多不同种类的PHY。Serial RapidlO、FiberChannel (FC)、PCI-…

Python代码使用PyQt5制作界面并封装

目录参考链接续&#xff1a;https://blog.csdn.net/yulinxx/article/details/93344163 若要对此程序进行封装&#xff0c;加个界面&#xff0c;然后制作成 EXE&#xff0c; 使用 PyQt5 制作界面&#xff0c;PyInstaller 进行封装成 EXE 可参考&#xff1a; Python制作小软件…

RabbitMQ简介及安装

RabbitMQ简介及安装 1.RabbitMQ概述 官网&#xff1a;https://www.rabbitmq.com/ 基本介绍 RabbitMQ 是一个流行的开源消息中间件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;&#xff0c;为 分布式应用程序提供了可靠的、异步的消息传递机制。Rabbi…

【Nacos】@NacosValue的使用与原理

在SpringCloud工程中&#xff0c;可以使用RefreshScopeValue实现配置文件内容变更后的动态刷新。 在SpringBoot工程中&#xff0c;可以使用NacosValue来实现配置文件内容变更后的动态刷新。 NacosValue的使用 引入依赖&#xff1a; <dependency><groupId>com.a…

网页打印与导出word实现在A4纸上相同效果

在工作中遇到这样一个需求&#xff0c;客户要求&#xff1a; 1、实现在浏览器中打印和导出到word中&#xff0c;要求浏览器打印出来的效果和word中打印的效果基本一致。2、打印的内容要自动分页&#xff0c;第一页的顶部有文件头&#xff0c;最后一页的底部有页尾。 这里记录一…

GitHub 下载超过 28W 次的 Java 面试题库来袭,面面俱到太全了

“金三银四”、“金九银十” 一直被称为是跳槽的旺季&#xff0c;最近也有不少小伙伴找我咨询一些面试相关的问题。刚好小编最近获得一份收费 Java 面试题库&#xff01; 这些面试题都是互联网大厂真实流出的面试内容&#xff0c;每个问题都附带完整详细的答案&#xff0c;不像…

React(三):脚手架、组件化、生命周期、父子组件通信、插槽

React&#xff08;三&#xff09;一、脚手架安装和创建1.安装脚手架2.创建脚手架3.看看脚手架目录4.运行脚手架二、脚手架下从0开始写代码三、组件化1.类组件2.函数组件四、React的生命周期1.认识生命周期2.图解生命周期&#xff08;1&#xff09;Constructor&#xff08;2&…

SpringMvc+Spring+JPA+Hibernate实现的增删改查

SpringMvcSpringJPAHibernate实现的增删改查 基于SSJ 12.1目录图 完整项目目录 12.2创建步骤 1.选择目录 2.选择基于的包结构 3.设置坐标。不能和已有的重复。 4.创建出来的包结构 5.自己配置tomcat&#xff0c;设置构建路径 下面进行依赖坐标导入。 12.3pom依赖 可以全设置5.3…

自学5个月Java找到了9K的工作,我的方式值得大家借鉴 第一部分

我是去年9月22日才正式学习Java的&#xff0c;因为在国营单位工作了4年&#xff0c;在天津一个月工资只有5000块&#xff0c;而且看不到任何晋升的希望&#xff0c;如果想要往上走&#xff0c;那背后就一定要有关系才行。而且国营单位的气氛是你干的多了&#xff0c;领导觉得你…

java基础之线程池

线程池1.线程池1.1 线程状态介绍1.2 线程池-基本原理1.3 线程池-Executors默认线程池1.4 线程池-Executors创建指定上限的线程池1.5 线程池-ThreadPoolExecutor1.6 线程池-参数详解1.7 线程池-非默认任务拒绝策略2. 原子性2.1 volatile-问题2.2 volatile解决2.3 synchronized解…

你真的懂动态库吗?一文详解动态库的方方面

这里写目录标题创建动态库创建静态库动态库与静态库的区别动态链接与静态链接的区别动态库的加载过程dll的创建以及应用程序隐式链接到dll的过程dll的创建以及应用程序显示链接到dll的过程动态库的二进制兼容性创建动态库 1.【新建】-》【项目】-》【动态链接库】 新建的动态…

Elasticsearch入门之Http操作(高级查询)

Elasticsearch 基本操作 Http操作&#xff1a; 高级查询&#xff1a; 高级查询&#xff1a;Elasticsearch 提供了基于 JSON 提供完整的查询 DSL 来定义查询 初始化数据&#xff1a; 查询所有文档&#xff1a; 在 Postman 中&#xff0c;向 ES 服务器发 GET 请求 &#xff1a…