软件测试 接口测试 Postman入门 接口测试的流程 执行接口测试 接口关联 环境变量和全局变量 内置动态参数以及自动有的动态参数

1 接口测试概述

1.1 什么是接口

接口测试是测试系统组件之间的一种测试。
硬件接口:USB接口,鼠标键盘接口
软件接口:称为API。例如:微信中的提现和充值,这两个功能需要和银行卡关联,想要调用银行接口,就必须拿到鉴权码(token/key/appkey),软件的接口主要使用数据交互。
软件接口分类:
(1)系统对外提供的接口。这种接口外部是可以接触到的,对安全性要求高。例如:银行系统提供提现和充值接口给微信使用。
(2)系统调用外部的接口。例如:某电商系统需要支付宝或微信支付,即该电商系统调用支付宝或微信支付接口。

1.2 为什么需要做接口测试

前后端分离,系统和子系统分离,需要查看数据传输。
基于安全考虑。
测试前移。

1.3 目前市面上的接口架构设计以及其基于的协议

(1)SOAP的接口架构,是一种轻量级的简单的XML的协议规范。基于webservice协议,地址是以?wsdl结尾,是一种很旧的技术,了解即可。

(2)RPC的接口架构,是一种远程调用,调用服务器的接口和调用本地一样。
dubbo协议,阿里的RPC的接口架构,地址是以dubbo://,适合传输高并发数据量少的数据。springcloud的微服务也是RPC接口架构。
此外,还有htrift,rmi,hessian。

(3)RestFul接口架构,默认使用http协议,是主流技术。默认使用json传输数据。
对于同样一个接口地址http://127.0.0.1/yuser,使用不同的请求方式得到的结果是不同的。get请求用于查询用户,post请求用于增加用户,put请求用于修改用户,delete用于删除用户。

1.4 http协议

http协议是超文本传输协议,主要用于浏览器和服务器之间交互数据。交互分为请求和响应两部分。
请求有请求行,请求头和请求正文。
响应有响应行,响应行和响应正文。响应码,1xx表示信息,2xx表示请求成功,3xx表示重定向(页面跳转),4xx客户端错误,5xx服务器错误。

请求头的部分信息,如下表:

信息描述例子
Accpet客户端接受的数据类型application/json,text/javascript,/;q=0.01
X-Requested-Withajax异步请求(不需要刷新)XML HttpRequest
User-Agent客户端类型Mozilla/5.0
Content-Type内容的格式application/x-www-form-urlencoded;charset=UTF-8
CookieCookie信息token=21398sdlah

Cookie的原理
Cookie不是缓存,是保存在客户端的一小段文本信息,格式是dict格式。
当客户端第一次访问服务器时,服务器就会生成Cookie信息,这个Cooike信息通过响应头里面的Set-Cookie传输到客户端。从第2-N次请求,只要访问当前的域名和路径,客户端就会在请求头的Cookie里面自动带上客户端的Cookie信息。

2 接口测试的流程以及其工具

2.1.1 接口测试的流程

1 拿到接口API文档,熟悉接口业务,接口地址,鉴权方式,入参,出参,错误码。规范方式是把API文档存放在swagger或者showdoc中,不规范是把API文档存放在word文档中,没有API文档则通过抓包或录制方式获得。
2 编写接口用例以及评审。
思路。
正向用例,输入正常参数,接口能够成功返回数据。
反向用例有鉴权反向用例、参数反向用例、错误码覆盖和其他错误场景。
鉴权反向用例包括鉴权码为空,鉴权码错误和鉴权码过期等等。
参数反向用例包括参数为空,参数类型异常,长度异常等等。
错误码覆盖根据业务而定。
其他错误场景包括接口黑名单,接口调用次数限制和分页场景。
3 编写接口测试用例。
在这里插入图片描述

4 使用接口测试用例工具执行接口测试。
5 输出接口测试报告(html格式)

2.1.2 市面上的接口测试工具

第一套:Postman+newman+git+Jenkins实现接口自动化,并且输出参数报告和发送邮件。
newman是专门为postman使用的,主要用于和Postman进行持续集成。

第二套:Jmeter+Ant+git+Jenkins实现接口自动化。Ant是Jmter的插件,主要用于和Postman进行持续集成。

其他工具:soupui,apipost,fiddler,charles

3 mall_cms_v2接口

测试的接口为Postman官方例子的API,如下:

https://documenter.getpostman.com/view/12387168/TzzDKb12#7f0beb33-e365-420b-bbcf-67df9c87749e

name,password,token。

4 Postman界面介绍

Home主页
workpaces工作空间
collections集合,项目集合。
APIs api文档。
Environments 环境变量,全局变量。
Mock Servers 虚拟服务器。
Monitors 监听器。
Hoistory 历史记录。
在这里插入图片描述

5 Postman执行接口测试

5.1 请求页面模块

Postman 请求页面模块如下图:
在这里插入图片描述
Parsam:get请求传参
Authorization:鉴权
Headers:请求头
Body:post请求传参,传参方式如下表:

方式描述
form-data可用键值对和文件传参数
x-www-from-urlencoded只能以键值对方式传参数
rawjson,text,xml,html,javascript
binary把文件以二进制的方式传参

具体位置如下图:
在这里插入图片描述

pre-request-script:请求之间的脚本
tests:请求之后的断言
Settings:设置
cookies:用于管理Cookie信息

5.2 响应页面模块

Body:接口返回的数据,传参的形式如下表:

方式描述
Pretty以json,html,xml等不同的格式查看返回的数据
Raw以文本的方式查看返回的数据
PreView以网页的方式查看返回的数据

在这里插入图片描述
Cookies:响应的Cookies信息。
Headers:响应头。
Test Results:断言的结果。

响应页面模块如下图:
在这里插入图片描述
200 为状态码
OK 为状态信息
12.64s为响应时间
347.84kb为响应的字节数

get请求和post请求的区别!!!
1 get请求是获取数据,post请求是提交数据。
2 本质区别是传参的方式不一样。get请求在地址栏后面以?的方式传参,多个参数之间用&分隔。post请求是在body以表单的方式传参。
3 post请求比get请求安全。

post请求例子,请求模块如下图:
在这里插入图片描述
响应模块如下图:
在这里插入图片描述

6 Postman的环境变量和全局变量

6.1 环境变量

第一,添加多个环境变量,如下图:
在这里插入图片描述

第二,在环境变量中设置变量以及变量值,变量为url,变量值为152.136.185.210:4000/login,如下图:
在这里插入图片描述

第三,在Collections切换环境变量,如下图:

在这里插入图片描述

6.2 环境变量和全局变量的区别

环境变量:重点在环境下,切换环境,运行接口。
全局变量:重点在变量,全局变量可以给任何接口使用。
环境变量是在创建接口之前就要创建好,选择好了环境变量,才进行接口测试。

获取环境变量和全局变量的值通过:{{变量名}}

7 接口关联

7.1 使用json提取器实现接口关联

152.136.185.210:4000/login为例子

请求之后的断言
第一步,查看响应之后的结果,如下代码:

console.log(responseBody);

第二步,将获取的access_token的值的格式转换为对象的数据,结果存储在result变量中,如下代码:

var result = JSON.parse(responseBody)

第三步,将access_token设置为全局变量,如下代码:

pm.globals.set("token", "result.token");

综上,在请求模块中的Tests子模块中输入以下代码:

//查看响应之后的结果
console.log(responseBody);
//把返回的字符串格式的数据转换成对象的数据
var result = JSON.parse(responseBody)
//把token的中的值设置为全局变量
pm.globals.set("token", "result.token");

运行结果如下图:
在这里插入图片描述
查看全局变量是否添加了token,如下图:
在这里插入图片描述
上述两张图片的token一致,则证明成功添加了token全局变量!
即其他接口都是直接使用token,使用格式{{token}},实现了与接口相关联。

7.2 使用正则表达式提取器实现接口关联

//使用正则表达式提取器实现接口关联,math匹配。
var result = responseBody.match(new RegExp('"access_token":"(.*?)"'));
//获取鉴权码
console.log(result[1])
//将鉴权码设置为全局变量
pm.globals.set("access_token", result[1]);

分析上述代码:
responseBady返回结果,math方法将结果与token匹配,从而获token,再将token设置为全局变量。
在Console框运行结果如下图:
在这里插入图片描述
在全局变量页面中也可以查看token值,如下图:
在这里插入图片描述

8 Postman内置动态参数以及自定义动态参数

8.1 内置动态参数

postman内置动态参数写在请求模块的Body子模块中的row点上,以json形式传入,内置动态参数如下:

{{$timestamp}}	生成当前时间的时间戳
{{$randomInt}}	生成0-1000之间的随机数
{{$guid}}		生成随机GUID字符串

8.2 自定义动态参数

自定义动态参数一般写在请求页面的Pre-request Script中,如下代码:

//手动获得时间戳
var times = Date.now()
//设置为全局变量
pm.globals.set("times", times);

使用times全局变量变量格式如下:

{{times}}

注:
(1)业务闭环的实现。遵从创建、修改、查询和修改的顺序。
(2)上传文件,如下图所示:
在这里插入图片描述

9 Postman断言

9.1 常用的6种断言

断言描述
Status code: Code is 200判断状态码是否为200
Response boby: Contains string判断响应内容是否包含string字符串
Response boby: JSON value check判断响应内容的json是否为对应的值
Response boby: Is equal to string判断响应内容是否等于string字符串
Response headers: Content-Type header check判断响应头是否包含Content-Type header
Response time is less than 200ms判断响应时间是否少于200ms

9.2 动态参数的断言方式

一般情况下,我们都会把动态参数设置成全局变量,即在断言中需要调用全局变量,方法如下:
其一,使用Postman中自带的获取全局变量的方法,如下:

pm.globals.get("variable_key");

其二,使用列表取值的方式,如下:

globals["variable_key"]

其三,使用对象引用的方式,如下:

globals.variable_key

9.3 全局断言

在项目选择Edit,如下图:
在这里插入图片描述
在Tests模块下设置全局断言,即每一个接口都会进行该全局断言。一般地,我们将状态码断言设置为全局断言,如下图:
在这里插入图片描述

10 Postman批量运行测试用例

添加进runner中
在这里插入图片描述

若测试用例中有上传文件,则需要在设置中进行调整,首先找到设置界面,如下图:
在这里插入图片描述
选择settings。
然后,允许Postman读取外部文件,如下图:
在这里插入图片描述
最后,将需要上传的文件放在D:\Users\DELL\Postaman\files目录中。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值