接口测试

 一、什么是接口

接口测试:

安卓 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书写方式:

{
    "name":"blog",
    "grade":"一年级",
    "phone":"13555768988",
    "sex":"男",
    "age":19,
    "addr":"广州"

 

 (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字段)

pm.test("判断是否登录成功", function () {
    pm.expect(pm.response.text()).to.include("userId");
});

 

 

第三类:response body:json value check判断相应数据中某个字段是否等于某个值,例如:判断userid是否等于某个字段,userid在login_info里面 为字典格式 所以引用为login_inf.userId

pm.test("判断userid是否正确", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.login_info.userId).to.eql(63);
});//判断登录接口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请求没有、

 

 

posted @ 2021-08-28 16:34  王王的王  阅读(427)  评论(0)    收藏  举报