接口测试
接口理论:
什么是接口?
接口就是前台和后台交互,接口返回一种通用的数据类型,所有的语言都认识(返回的类型为json)
做接口的目的
测试接口的逻辑正确性和稳定性
测试在前端页面上发现不了的bug
接口测试文档的组成 (下图):
接口说明
url
请求方法
请求的参数,参数类型,
返回的数据
1)url的组成
域名+接口地址
2)常用请求方式:
get,post(一般文档会写,即使没有些抓包也可以抓到)
get 请求不需要介入工具,在浏览器就可以调用接口
在域名后 +?传的参数(用&链接下一个参数)
已百度为例,括号中的为参数,复制的数据会进行url编码并不是乱码
post请求需要用到接口工具
postman 工具使用
请求get:
将url填写,请求方式为get
在params中填写key 和 value,value的数据会自动填写到url中
key填写传参的字段,value 填写参数,get没有请求体
请求post:
将url填写,请求方式为post
切换到body -form-data 填写数据
如果传参为json 类型,格式需要改为raw ,类型修改为json (注意格式一定要写对),返回数据未登录请忽律,因为我token没有传
上传文件图片:
body>horm-data,类型改为file
cookie:
存在客户端的键值对
session:
存在服务端的键值对
区别在于
Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。
PC端查看返回的接口数据
如果没有接口文档,可以抓包看到返回的接口数据
1.进入任意一个浏览器,点击右键>检查>Network>xhr(后端的接口)
可以查看请求的数据
常见返回状态码:
200--返回成功
300--请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端
400--客户端问题(404:访问的url不存在)
500--服务端问题(有可能传参错误)
参数化:
首先要全局变量,说下为什么要全局变量
如果查询一个学校的所有学生,如果不给变量的话,只能一个一个查询,若果全局变量,就可以查询这个学校的所有人
如何添加变量:
首先要创建一个集合,
创建一个文件比如txt,在文件中先写要测试的数据,文件中第一行填写标题名称,单个多个多个,用,隔开
在进入postman中,将保存好的字段名称放入value中 ,变量名用{{}}表示,切记变量名一定要一致
点击runner>选择要测试的集合>iteration(运行几条数据就填写几),delay(间隔几秒运行),data选择刚才创建好的文件,data file type >选择text/CSV ,一定点击previce 要检查下测试的数据,如果出现中文乱码,将文件名另存为为UTF-8,>run
postman添加检查点:
目的来验证接口是否通过
有时候需要系统自动去检测下所获取到的响应结果是否为自己期望的内容
所以可以在postman里面设置期望结果的数据
之后系统会针对所获取的响应结果与期望结果就行比对
如果响应结果中有期望结果的数据,就会提示pass,否则显示fail
静态检查点使用方法:
点击tests, 右侧 response body:contains string (是否包含某一个字符串)
body matches string 写检查的名字,随便写 ; string_you_want_search (检查的字符串) //注释 快捷键"ctrl+?"
动态检查点:
检查多个字字段
要检查多个字段,在文件中添加多个字段,用","隔开
点击tests, 右侧 get a variable (每次运行的时候,可以从文件中取到某个字段)
pm.globals.get("variable_key"); 将"variable_key"换成要检查的变量名名称
然后在将整句话复制到
pm.test("名称是不是正确", function () {
pm.expect(pm.response.text()).to.include(pm.variables.get("变量名"));
});
在run一下就可以啦
精准匹配:
只想要id=1的数值
点击respone body :json value check (匹配到某一个字段的某一个值)
pm.test("Your test name", function () { //“Your test name”(变量名,随便起)
var jsonData = pm.response.json(); //“var jsonData = pm.response.json(); "返回这个接口的数据
pm.expect(jsonData.value).to.eql(100); //“value” 要取的字段 ,‘(100)’预期的结果
});
在url中 查询呀查询的字段,点击send
text resultrs 中查看看结果