接口测试—Postman
Postman工作原理
1.发请求
2.接受请求返回想要
3.接受响应显示到界面
接口测试要点--面试必问
====================功能上的质量====================
- 接口逻辑的正确,准确性
输入不同组合(等价类、边界值),验证返回正确(不同的响应状态码),逻辑正确,精度正确
可按照响应状态码写测试用例
- 接口的关联性
依赖有无,正确,其他,时间,顺序关联
业务逻辑,在UI层面上(购物车->订单)
====================效率====================
- 接口的异常健壮性
- 空,
- 不符合需求(业务不符合)
- 功能不符合(参数个数(与功能测试不同的地方),类型,缺失,左右边界,上下溢出,优先级,逻辑,文件各种问题--打开/关闭)---- json串返回无顺序
上下溢出:数字的上下边界,超长数据;操作系统的边界
====================安全====================
- 接口的安全性
输入的内容对域,对访问控制,权限,数据库sql注入 (在功能层面都能做)
易用性、功能性、性能、兼容性、安全性 五大部分
第三方调用接口 要注意异常健壮性
面试时有逻辑,举实际项目例子
操练:使用代理工具抓包查看协议内容
返回结果,响应
http协议由什么组成,内容里面有什么
请求类型get与post区别
表面:
1.形式上:
Get请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分隔URL传输数据,参数之间以&相连
Post把提交的数据则放置在是HTTP包的包体中(可在地址栏添加请求数据)
2.长度上:
get后面参数数据的长度无限制,但地址栏,和操作系统又长度限制
post长度没限制
3.post的数据安全性要比get的安全性高
*****原理:
根据HTTP规范,get用于信息获取,而且应该是安全的(对于服务器来说)和幂等(每次请求的返回都一样,不会修改服务器)的。
根据HTTP规范,post表示可能修改变服务器上的资源的请求
restful风格接口基于HTTP协议,增加规范(趋势从HTTP改为restful)
restful协议规范
Postman使用
Chrome插件
pc端
添加断言
业务层断言
性能断言
协议层断言
不同请求方法和数据类型
1.get请求
https://postman-echo.com/get?foo1=bar1&foo2=bar2
修改请求内容
2.post url传参
https://postman-echo.com/post?date=hello postman
post请求在地址栏添加参数
3.post form-data传参
https://postman-echo.com/post,参数自己随意
4.post x-www=form-urlencoded传参
参数自己随意
Tests
var reponseJSON;
try {
responseJSON = JSON.parse(responseBody);
tests['response is valid JSON'] = true;
}
catch(e){
responseJSON = {}
tests['response is valid JSON'] = false;
}
tests['respose has post data'] = _.has(responseJSON,'form');
tests['respose matches the data posted'] = (responseJSON.form && responseJSON.form.strange === 'boom');
最后一行 form strange传值 boom
5.post raw方式 - json/xml/txt传参
https://postman-echo.com/post
Text类型
JSON类型 (用得较多)
var reponseJSON;
try {
responseJSON = JSON.parse(responseBody);
tests['response is valid JSON'] = true;
}
catch(e){
responseJSON = {}
tests['response is valid JSON'] = false;
}
tests['respose has post data'] = _.has(responseJSON,'data');
tests['content-type is application/json'] = (responseJSON.form && responseJSON.headers['contente-typse'] === 'application/json');
post请求 xml-soup (老企业)
http://www.webxml.com.cn/WebServices/WeatherWS.asmx?op=getSupportCityString
粘贴至postman,修改theRegionCode为3113(返回结果为黑龙江省的市)
6.post binary 上传txt文件,图片
7.注意不同的头信息
8.Authentication Method 权限认证方法
https://postman-echo.com/basic-auth
接口需要输入用户名密码才能进入
Content-type
Content-type用于指定内容类型,一般是指网页中存在的Content-type,Content-type属性指定请求和想要的HTTP内容类型。如果未指定ContentType,默认为text/html。
常见的Content-type:
- HTML文档标记:text/html;
- 普通ASCII文档标记:text/html;
- JPEG图片标记:image/jpeg;
- GIF图片标记:image/gif;
- js文档标记:application/javascript;
- xml文件标记:application/xml;
- text/plain
- text/css
- application/x-www-form-urlencoded
- multipart/form-data
- application/json
1.application/x-www-form-urlencoded 是常用的表单发包方式,普通的表单提交,或者js发包,默认都是通过这种方式
2.multipart/form-data 用在发送文件的post包
boundary用于分割数据
当文件太长,HTTP无法在一个包之内发送完毕,就需要分割数据,分割成一个个chunk发送给服务端,--用于区分数据块,而后面的数据6333就是表示区分包作用
postman包含简单的断言
实例:
baidu搜索
1.百度搜索接口需求:URL,请求类型,请求参数
2.搜索postman,验证返回响应正确,并包含postman的信息
3.搜索不同关键字,验证是否正确。(参数化)
- 搜索postman
http://www.baidu.com/s?wd=postman
断言
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(500);
});
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("postman");
});
- 使用csv参数化的方式搜索多个关键词,全部执行
断言
pm.test("status code is 200",function(){
pm.response.to.have.status(200);
});
soso= pm.varibales.get("keyword")
pm.test("响应有搜索的关键词",function(){
pm.expect(pm.response.text().to.include(soso);
});
pu.test("响应时间小于500ms",function(){
pm.expect(pm.response.responseTime).to.be.below(500);
});
运行测试集
点击preview可预览
Run预览
微信公众号平台接口测试接口
https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
- 全局返回码
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433747234
可根据全局返回码写测试用例
获取权限access_token
postman测试
appid和secret在登录成功后的首页显示
返回信息 与文档一致
保存access_token接口信息(登录凭证)
断言
//将数据解析为json格式
var data = JSON.parse(responseBody);
//获取access_token的值
var access_token = data.access_token;
//吧这个变量保存到环境变量中,这样大家都能用了
pm.environment.set("access_token", access_token);
微信公众号tag接口测试
51:00
1.接口地址
2.理解接口文档-tag
3.设计测试用例
4.调试与测试接口
5.access_token接口获得token,所有接口请求都要有token
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837
6.Create tag 接口添加标签 --- 从access_token接口返回值获得token后请求,验证添加成功(接口依赖)
7.get tag 接口查询标签
8.update tag 接口更新标签
9.delete tag接口删除标签
10.添加多个标签进行正确性等验证
Cookie与token
Cookie是缓存(文本文件,保存一些信息),cookie数据保存在客户端(可以是浏览器)
Session是会话(类似通行证,想知道你是谁,保存状态),session数据保存在服务端
token是令牌(比session安全方面好点,类似身份验证,包括uid,时间戳,签名sign)
加密的接口需要加密来测,数据加在代码里加密后测试,解密的方法
公钥解密 jmeter
1:00:00
- access_token接口将返回token放到变量中,并加断言
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(500);
});
//将数据解析为json格式
var data = JSON.parse(responseBody);
//获取access_token的值
var access_token = data.access_token;
//吧这个变量保存到环境变量中,这样大家都能用了
pm.environment.set("access_token", access_token);
pm.test("Response time is less than 200ms", function () {
var jsonData = pm.response.json();
pm.expect(pm.response.responseTime).to.be.below(500);
});
不确定
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("access_token");
});
1:00:55
A:两个接口独立执行
将access_token接口返回值粘贴至create_tag接口access_token信息中
B.将access_token改为变量,执行测试集
创建的tag与断言中tag名称一致
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.tag.name).to.eql("postman95");
});
测试集运行结果
Create tag 发送请求,修改使用变量取值
断言
data = pm.globals.get("keyword");
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include(data);
});
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
pm.test("Response time is less than 500ms", function () {
pm.expect(pm.response.responseTime).to.be.below(500);
});
接口层,协议必问
加密
传输不同形式的数据
数据关联、依赖
接口代码---更多
在浏览器的地址栏发送请求发生了什么
路由 dns tcp ip 原理
发了几个包
上一篇: 菜鸟学IT之四则运算升级版
下一篇: Requests接口测试