接口测试
一、什么是接口
接口测试:
安卓 andriod
ios object-c
通过接口来交互(分端口)
接口文档地址:
简要描述 URL 请求方式 参数 返回值
1.什么是接口,接口的作用
接口用于进行前后端通信,前端使用html,css js语言 ,ios使用object-c语言,安卓使用java语言,后端使用java python,php等语言,使用接口可以进行前端与后台通信
2.接口测试:
接口测试需要有接口文档接口文档定义请求路径,请求参数,返回参数说明 入参格式,请求方式等
3.接口测试用例设计:
项目,模块,用例标题,url,请求方式,请求参数,检查点,返回结果,用例状态,测试人员
4.接口签名:
接口签名用于保证接口不能随便被调用,例如参数中sign 使用一定的格式进行加密,传输给后端 后端进行比对后,判断是否可以调用
二、http请求以及post与get请求
1.http请求组成:
ip地址,路径
url:代表能找到的路径
请求头:额外的信息 例如支持什么浏览器(user-agent)请求从什么地方过来,请求参数类型(form-json)
请求体:一些具体的请求
2.状态码解析:
200:成功,调通状态
3xx:重定向
4xx(404):找不到地址, 4开头都是客户端问题(参数传错 地址写错)
500:服务端问题
3.post请求与get请求的区别
post请求有get请求最大的区别是 get请求没有请求体 ,所以不能上传文件等接口 不能使用get请求
GET请求:不需要借助工具,直接访问就可以了 参数+加?=什么(如果是多个加and) 返回的一般都是json(是通用的数据类型,所有的语言都识别)
4.cookie与session:
cookie:存在本地的一对键值对,用于存储用户信息,可以设置失效时间,失效后 用户信息失效,需要重新登录等操作
session:存在服务端的一堆键值对,功能与cookie相似
工作原理:当前后端进行通信时,前端请求会携带cookie与服务端session进行对比,校验一致 才可进行下一步请求,当存在一方失效时,需要重新登录授权
cookie(存在客户端的键值对) session(存在服务端的一个键值对) 一般针对登录来说

三、接口测试之postman使用
1.get请求类测试
get请求可以直接通过浏览器进行,直接是url拼接?k=即可 也可通过postman 一样的方式
(1)浏览器请求:
在浏览器http://api.nnzhp.cn/api/user/stu_info?stu_name=xiaohei,其中 http://api.nnzhp.cn为接口域名,/api/user/stu_info为接口地址,stu_name为接口参数,且必传 所以使用?(英文问号)拼接在接口地址后面,结果如下:

(2)使用postman测试,注意get请求传参是在params下

2、post 请求类测试
(1)键值对传参:post类请求不能直接在浏览器进行请求,需要借助postman。键值对类传参形式,是在body-form-data里面进行传参,输入参数名称以及对应的参数值(见图)
post请求-Body-from-date 按照接口文档输入参数传参

(2)json传参,当为json传参形式时,传参位置在body-raw ,最后面类型选为json形式,json书写方式:

(3)上传文件,传参位置在body-form-data里面 注意将key的类型选择为file形式,value就可以上传本地文件,这也是form-data与x-wwwurlcoded的主要区别,x-www-urlcoded无法上传文件

(4)需要cookie类请求(qq群抓包获取群列表)
在qun.qq.com 找到群管理 选择一个群 通过f12找到群成员接口,使用抓取到的数据进行测试发现无法请求到成员列表,这种情况下查看f12里面数据 是需要有登录信息,但是该接口没有需要输入账号密码的字段 所以需要传cookie,所以需要在headder里面传cookie 复制抓取到的cookie



3.接口保存与定义变量
(1)接口保存:当同一个项目需要讲接口保存在同一目录下面,方便下一次调用,可以选择保存接口,类似于本地创建文件夹

(2)定义变量
当存在多个接口使用同一个域名,或者多个接口使用同样的字段等情况,可以将通用部分提取出来定义为变量,然后进行引用
第一步:定义变量:将域名定义为变量


第二步:引用变量,格式为{{变量名称}}

3.批量运行接口
(1)批量运行接口:创建变量文件,选择接口 ,引用变量,批量运行接口
第一步:找到批量运行接口入口:如下图runner--选择接口文档--选择需要运行的接口

第二步:准备文档:例如添加学生接口,添加学生接口字段有name,grade,phone三个字段为必填,sex,age,addr三个字段选填,,首先创建文件用于保存接口参数值,可以创建txt文档或者csv文档,此处使用csv文档,如图,表头代表变量名称,用于引用

第三部:引用变量:原理同前面变量引用,使用{{变量名称}}引用到对应的字段,后记得保存

第四步:设置运行页面,选择要运行接口 上传准备好的文件,可以预览文件,然后点击运行

预览效果如下图:

结果页面:可以通过·查询学生接口验证是否添加成功

4.设置断言:
(1)什么是断言:
断言的作用是判断接口运行是否通过,通过上面的图片可以看到,通过和失败的接口数都是0 ,那是因为没有设置检查点,也就是断言,断言分为几种,主要是用于判断相应是否通过
(2)设置断言:在接口测试页面--点击test 既可以看到各种断言

(3)断言类型
第一类:status code:code is 200 用于判断相应状态码是否为200 ,点击后就会自动填写相应断言代码

第二类:response body:contains string:判断相应数据是否包含某个字段(见例子,判断相应数据是否包含userid字段)
第三类:response body:json value check判断相应数据中某个字段是否等于某个值,例如:判断userid是否等于某个字段,userid在login_info里面 为字典格式 所以引用为login_inf.userId
当批量运行接口时,userid的值不固定时,就需要利用参数化,这时就需要将userid值写活,同样需要用到参数化概念;具体操作如下
(1)在创建文件时,除去正常字段外另外加一个变量,用于引用判断,如下图新增user_id_check字段 用于判断相应获得userid是否与文件内id字段一致,一致即验证通过

(2)引用变量,get a variable 用于获取变量,get a global variable 用于获取刚刚在global里面设置的变量
变量引用: pm.variables.get("user_id_check"); 括号内填入 文件设置的字段名称 用作引用,然后进行批量运行函数1 即可得到结果


补充:相互关联型接口测试,例如金币重置接口需要在登录情况下 ,获取到登录的cookie, 登录的cookie在登录接口调用后返回,这时就需要获取到登录接口返回的数据,去到cookie(sign)然后定义为全局变量,供增加金币接口调用,具体如下:
先调用登录接口 在断言(tests)里面response body:json value chack 用于获取响应数据并进 行检查,代码第二行 var jsonData = pm.response.json(); 获取到返回的数据 然后去获取返回数据中对应的字段值 定义为sign :var sign=jsonData.login_info.sign;然后将sign定义为全局变量 get a global variable ::pm.globals.set("token", sign) 运行接口后 就可以在全局变量中看到该字段
然后再增加金币的接口即可引用该变量



举例:登录 从Aopl-cookie
wangshuai-ID11111 ---服务端server
wangshuai-ID11111----客户端client
aad_user:ID11111
1.Json请求-Body-iew-date
“name”:“王帅”,
“grade”=“天鹤座”,
“phone”=“15810920211” 备注:Headers?(主要看接口文档)
2.上传文件:Body-from-date选择H 选择文件 录入参数上传
3.接口签名:接口不想让别人随便登录 设置一个签名 sign=(根据请求参数排序在进行加密,每次传参后签名就变)
4.接口加密:请求加密返回值也是加密的(加密生成什么调用什么-解密)
i:开发人员提供产生签名的接口
ii:直接让开发把验签的逻辑去掉(测试环境)
iii:自己写产生签名的代码
i:开发人员提供加密、解密的接口
ii:直接让开发把加密解密的逻辑去掉(测试环境)
iii:自己写产生加密的逻辑
5.header
打开QQ群接口 qun.qq.com 群管理-登录-选择群-抓包-Nekwork-All所有的(图片等等)-XHR(调用接口的)-刷新一下(重新发送请求)-gu list-P-create(所有的群)-join(加入的群)-ma(我是管理员的群)
下边的list(获取我的好友),下边的 P-ners(群成员)里面会分页
请求头查看cookise
6.接口的幂等:上游和下游同一个单子的状态是一样的
购买--下单(交互下单的接口超时了)
重试3次
1次超时 30s(没有返回,证明没有成功) i其实单子已经成功
2次 成功啦
7.接口测试就是功能测试
8.数据落库、兜底(异常情况下考虑要不要做)、降级、限流
a10000
b5000---挂了
c20000
降级30000
兜底------
9.请求:URL、请求头、请求体
10.http状态码:200(是通的)、404(客户端请求有问题)、500(服务端出错)、304(重定向)
11.post请求
get请求
两者区别:没有请求体 只有URL和请求头、get参数长度有限制,每个浏览器不一样、post请求没有、


浙公网安备 33010602011771号