欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

接口测试—Postman

程序员文章站 2024-03-21 23:10:22
...

Postman工作原理

 

接口测试—Postman

1.发请求

2.接受请求返回想要

3.接受响应显示到界面

 

 

接口测试要点--面试必问

====================功能上的质量====================

 

  • 接口逻辑的正确,准确性

输入不同组合(等价类、边界值),验证返回正确(不同的响应状态码),逻辑正确,精度正确

可按照响应状态码写测试用例

  • 接口的关联性

依赖有无,正确,其他,时间,顺序关联

业务逻辑,在UI层面上(购物车->订单)

====================效率====================

  • 接口的异常健壮性
    • 空,
    • 不符合需求(业务不符合)
    • 功能不符合(参数个数(与功能测试不同的地方),类型,缺失,左右边界,上下溢出,优先级,逻辑,文件各种问题--打开/关闭)---- json串返回无顺序

上下溢出:数字的上下边界,超长数据;操作系统的边界

====================安全====================

  • 接口的安全性

输入的内容对域,对访问控制,权限,数据库sql注入 (在功能层面都能做)

 

易用性、功能性、性能、兼容性、安全性 五大部分

第三方调用接口 要注意异常健壮性

面试时有逻辑,举实际项目例子

 

操练:使用代理工具抓包查看协议内容

接口测试—Postman

 

返回结果,响应

接口测试—Postman

http协议由什么组成,内容里面有什么

 

接口测试—Postman

 

 

 

请求类型get与post区别

接口测试—Postman

 

表面:

1.形式上

Get请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分隔URL传输数据,参数之间以&相连

Post把提交的数据则放置在是HTTP包的包体中(可在地址栏添加请求数据)

2.长度上

get后面参数数据的长度无限制,但地址栏,和操作系统又长度限制

post长度没限制

3.post的数据安全性要比get的安全性

 

*****原理

根据HTTP规范,get用于信息获取,而且应该是安全的(对于服务器来说)和幂等(每次请求的返回都一样,不会修改服务器)的。

根据HTTP规范,post表示可能修改变服务器上的资源的请求

 

restful风格接口基于HTTP协议,增加规范(趋势从HTTP改为restful)

restful协议规范

 

 

 

Postman使用

Chrome插件

接口测试—Postman

 

pc端

接口测试—Postman

添加断言

接口测试—Postman

业务层断言

性能断言

协议层断言

 

 

不同请求方法和数据类型

1.get请求

https://postman-echo.com/get?foo1=bar1&foo2=bar2

接口测试—Postman

修改请求内容

接口测试—Postman

 

 

 

2.post url传参

https://postman-echo.com/post?date=hello postman

post请求在地址栏添加参数

接口测试—Postman

 

3.post form-data传参

https://postman-echo.com/post,参数自己随意

接口测试—Postman

 

 

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

接口测试—Postman

 

 

接口测试—Postman

 

5.post raw方式  - json/xml/txt传参

https://postman-echo.com/post

Text类型

接口测试—Postman

 

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');

接口测试—Postman

 

post请求 xml-soup (老企业)

http://www.webxml.com.cn/WebServices/WeatherWS.asmx?op=getSupportCityString

接口测试—Postman

 

粘贴至postman,修改theRegionCode为3113(返回结果为黑龙江省的市)

接口测试—Postman

 

6.post binary 上传txt文件,图片

https://postman-echo.com/post

 

 

接口测试—Postman

 

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

接口测试—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);
});

运行测试集

接口测试—Postman

 

接口测试—Postman

 

点击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

接口测试—Postman

可根据全局返回码写测试用例

 

 

获取权限access_token

接口测试—Postman

postman测试

接口测试—Postman

 

 

 

 

接口测试—Postman

appid和secret在登录成功后的首页显示

 

接口测试—Postman

 

接口测试—Postman

 

 

返回信息 与文档一致

接口测试—Postman

保存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信息中

 

接口测试—Postman

接口测试—Postman

 

接口测试—Postman

 

B.将access_token改为变量,执行测试集

创建的tag与断言中tag名称一致

pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.tag.name).to.eql("postman95");
});

 

 

接口测试—Postman

 

测试集运行结果

接口测试—Postman

 

Create tag 发送请求,修改使用变量取值

接口测试—Postman

接口测试—Postman

断言

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 原理

发了几个包