学习笔记 — 接口测试工具Postman

一、简介

        是一款chrome插件,可以进行功能强大的网页调试和模拟发送HTTP请求,并且支持几乎所有类型的HTTP请求,操作简单且方便

二、安装

  • chrome应用商店搜索postman安装“(翻墙) 
  • 客户端安装 官网地址:https://www.postman.com/downloads/

三、注册与登录

四、界面介绍

1、主界面
  • Home —— 主页
  • Workspaces —— 工作空间
    • Collections —— 项目集合
    • APIs —— api文档
    • Environment —— 环境变量、全局变量
    • Mock Servers —— 虚拟服务器
    • Monitors —— 监听器
    • History —— 历史记录
2、请求页签
  • Params —— get请求传参
  • Authorization —— 鉴权
  • Header —— 请求头
  • Body —— post请求传参
    • none —— 没有参数、/
    • form-data —— 既可以传键值对,也可以传文件
    • x-wwww-form-urlencoded —— 只能够传键值对
    • raw —— Text、JavaScript、JSON、HTML、XML
    • binary —— 把文件以二进制的方式传参
    • GraphQL —— /
  • Pre-request Script —— 请求之前的脚本
  • Tests —— 请求之后的断言
  • Settings —— 设置
  • cookies —— 由于管理cookie信息
3、响应页签
  • Body —— 接口返回的数据
    • Pretty —— 以JSON、XML、HTML、Text...不同的格式查看返回的数据
    • Raw —— 以文本的方式查看返回的数据
    • Preview —— 以网页的方式查看返回的数据
    • Visualize —— /
  • Cookies —— 响应的cookie信息
  • Headers —— 响应头
  • Test Results —— 断言的结果
  • 状态码 —— 200
  • 状态信息 —— OK
  • 响应的时间 —— 681MS
  • 响应的字节数 —— 343B

五、问题与解决方案

1、面试题:Get请求和Post请求的区别?

答:get请求一般是获取数据,post请求一般是提交数据;post请求比get请求安全。

本质区别 —— 传参的方式不一样:

  • get请求在地址栏后面以?传参,多个参数之间用&分隔;
  • post请求在body以表单的方式传参

2、多种环境:开发环境、测试环境、生产环境 如何配置?

答:解决方案 —— 环境变量&全局变量

  • 环境变量:就是全局变量
  • 全局变量:是能够在任何接口里面访问的变量
  • 获取值的方式:{{变量名}}

3、如何接口关联:需要手动关联各个接口?

答:解决方案 —— 接口关联

  • 方式1 使用json提取器实现

第一个接口: Tests内容           

// 把返回的字符串格式的数据转换成对象的形式
var result = JSON.parse(responseBody);

// 把xxx设置为全局变量
pm.globals.set("xxx", result.xxx);

第二个接口:     

// {{xxx}}
  • 方式2 使用正则表达式提取器实现

第一个接口:Tests内容           

// 把返回的字符串格式的数据转换成对象的形式
var result = responseBody.match(new RegExp('"xxx":"(.*?)"'));

// 把xxx设置为全局变量
pm.globals.set("xxx", result[1]);

第二个接口:

// {{xxx}}
  • 方式3 使用cookie提取器实现

第一个接口:Tests内容           

// 获取cookie指定对象
var result = postman.getResponseCookie("xxx");

// 把xxx设置为全局变量
pm.globals.set("xxx", result.value);

 第二个接口:

// {{xxx}}

4、如何修改参数:参数需要手动修改?

答:解决方案 —— 动态参数&自定义的动态参数

  • 内置动态参数:

        {{$timestamp}} —— 生成当前时间的时间戳*

        {{$randomInt}} —— 生成0-1000之间的随机数

        {{$guid}} —— 生成速记GUID字符串

  • 自定义动态参数:Pre-request Script内容
 // 手动获取时间戳
var times = Date.now();

// 设置为全局变量
pm.globals.set("times", times);

// 使用
{{times}}

5、在断言Tests里,获取自定义动态参数(全局变量)的方式:
  • pm.globals.get("xxx")
  • globals["xxx"]
  • globals.xxx

六、八种断言方式

  • 1、Status code:Code is 200 —— 检查返回状态码是否未200** (状态断言)
// 1、检查返回状态码是否未200*
pm.test("检查返回状态码为200", function(){
    pm.response.to.have.status(200);
});
  • 2、Response body:Contain string —— 检查响应中包括指定字符串** (业务断言)
// 2、检查响应中包括指定字符串*
pm.test("检查响应中包含xxx", function(){
    pm.expect(pm.response.text()).to.include("xxx");
});
  • 3、Response body:JSON value check —— 检查响应中其中json的值** (业务断言)
// 3、检查响应中其中json的值*
pm.test("检查响应json中包含字段xxx值为0", function(){
    var jsonData = pm.response.json();
    pm.expect(jsonData.xxx).to.eql(0);
});
  • 4、Response body:Is equal to a string —— 检查响应等于一个字符串** (业务断言)
// 4、检查响应等于一个字符,用在结果比较少的时候*
pm.test("Body is corrent", function(){
    pm.response.to.have.body('{"xxx1":0, "xxx2":"ok"}');
});
  • 5、Response header:Content-Type header check —— 检查是否包含响应头Content-Type
// 5、检查是否包含响应头Content-Type
pm.test("Content-Type is present", function(){
    pm.response.to.have.header("Context-Type");
});
  • 6、Response time is less than 200ms —— 检查请求耗时小于200ms** (性能断言)
 // 6、检查请求耗时小于200ms*
pm.test("Response time is less than 200ms", function(){
    pm.expect(pm.response.responseTime).to.be.below(200);
});
  • 7、Status code:Successful POST request —— 检查post请求的返回码是否在指定的范围里
// 7、检查post请求的返回码是否在指定的范围里
pm.test("Successful POST request", function(){
    pm.expect(pm.response.code).to.be.oneOf([200, 201]);
});
  • 8、Status code:Code name has string —— 检查返回的状态码信息中包含指定字符串
// 8、检查返回的状态码信息中包含指定字符串
pm.test("Status code name has string", function(){
    pm.response.to.have.status("ok");
});
  • 精确断言:可使用自定义动态参数方式实现
  • 全局断言配置:项目 —— Edit —— Tests —— 写上需要的全局断言,如:断言1

七、批量运行测试用例

  • 步骤:项目 —— Run collection —— Iterations迭代次数、Delay延迟执行时间 —— Run

  • 文件批量上传:Settings —— General —— Allow reading files outside working 打开 —— 复制文件到Location工作路径下

八、数据驱动CSV文件或JSON文件的处理

  • 新建一个.csv或.json文件,填写字段、字段值及断言值,列出正例和所有反例可能情况数据

  • 通过{{字段名}}获取文件中的数据值

Tests断言:

pm.test("检查响应中包含xxx", function(){
    pm.expect(pm.response.text()).to.include(data.assert_value断言值命名);
});

// 判断当返回结果包含有xxx值时,才通过正则表达式去取值
if(responseBody.search("xxx") != -1){
    var result = responseBody.match(new RegExp('"xxx":"(.*?)"'));
    pm.globals.set("xxx", result[1]);
}
  • 项目 —— Run collection —— Iterations迭代次数、Delay延迟执行时间、Data选择需执行的数据文件 —— Run

九、请求头

  • 必须带请求头的接口如,https网页链接打开需要关闭如下步骤:Settings —— General —— SSL certificate verification 关闭 —— Fiddler查看并获取Client请求头信息 —— 粘贴到Headers —— 执行
  • 常见的请求头:
    • 请求的主机地址**
    • Connection —— 连接方式
    • Accept —— 客户端接收到的数据格式
    • X-Requested-With —— 异步请求**
    • User-Agent —— 客户端的用户类型**
    • Referer —— 来源
    • Cookie —— Cookie信息**
    • Context-Type —— 请求内容的格式
    • Accept-Encoding —— 压缩方式

十、Mock Servier服务器

  • 作用:后端的接口还没有开发完,前端的业务需要调用后端的接口
  • 浏览器可访问mock URL
  •  body格式内容可为:{"code":0,msg:"成功",data:[]}
  • 步骤:Mock Servers —— Create —— 填写信息 —— Copy Mock URL —— Collections —— 修改项目Default下Body内容及格式 —— send

十一、Cookie鉴权

  • 说明:cookie是一小段文本,格式key=value
  • cookie鉴权原理:
    • 当客户端第一次访问服务器的时候,服务器就会生成cookie信息,并且在响应头的set-cookie里面把生成的cookie信息发送给客户端
    • 当客户端第二次访问服务器的时候,客户端就会在请求头的cookie带上cookie信息,从而实现鉴权
  • 分类
    • 会话cookie(显示为session):保存至内存,当浏览器关闭之后就会自动化清除cookie
    • 持久cookie(显示为具体时间):保存至硬盘,浏览器关闭后之后不会清除,只有当失效时间到了才会自动清除
  • Token鉴权:如五-3关联接口的方式2

十二、实现接口的加密解密

  • 目前加密方式有:
    • 对称加密 —— DES、AES、Base64加密算法
    • 非对称加密 —— 双钥(公钥、私钥、公钥加密私钥解密、私钥加密公钥界面)加密、RSA加密算法
    • 不考虑解密 —— MD5、SHA1、SHA3
  • Postman如何实现? —— MD5最广泛

十三、Newman

1、命令及常用参数
  • 说明:postman是专门为接口测试而生,Newman是专门为postman而生;Newman可以让我们的postman脚本通过非GUI(命令行)的方式执行

  • 运行命令:

    newman run
  • 常用参数:

    -e —— 引用环境变量

    -g —— 引用全局变量

    -d —— 引用数据文件

    -n —— 指定测试用例迭代次数

    -r cli,html,json,junit --reporter-html-export —— 指定生成HTML的报告

  • 执行命令示例:

    newman run "testcase.json" -e "environment.json" -g "globals.json" -d "data.json" -r cli,html,json,junit --reporter-html-export "report.html"

2、Postman + Newman + Jenkins 实现接口测试持续集成

Jenkins操作步骤:

  • 新建一个项目 —— 新建Item-输入名称-Freestyle project-确定
  • 设置自定义工作空间 —— 项目-配置-General-高级-使用自定义工作空间-输入脚本所在目录
  • 执行windows的批处理命令 —— 构建-增加构建步骤-Execute Windows batch command-输入如上17、执行命令
  • 执行系统的Groovy脚本 —— 增加构建步骤-Execute system Groovy script-输入内容可避免默认html查看报告的样式丢失,命令:
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")
  • 生成HTML的报告集成到Jenkins —— 增加构建后操作步骤-Publish HTML reports-新增-输入报告生成位置、名称、标题、格式-保存
  • 构建 —— 项目-Build Now
  • 查看 —— 项目-HTML Report

十四、接口返回数据和JSON详解

  • 默认规则:三组数据

error_code —— 错误码,0成功

msg —— 对错误码地中文说明

data —— 真正的返回数据

  • json格式(80%):

{error_code:0, msg:"执行成功", data:[]}

 json就是一种数据类型,整型、小数、字符串

json由两组数据组成

map对象,键值对,{key:value, key:value}

数组对象,[value1, value2, value3]

工具网址:http://www.bejson.com/

  • html格式:
<html>
    <title></title>
    <body>
    <error_code>0</error_code>
    ...
    </body>
</html>
  • xml格式:
<?xml?version="1.0" encoding="utf-8">
    <error_code>0</error_code>
    ...
</xml>

十五、接口测试协议

1、webservice协议
  • 接口地址 http://........?wsdl
  • soap协议,wsdl
    • 例如,http://......../addUser|delUser|updateUser...
  • restful规则 —— get获取数据,post提交数据,put修改数据,delete删除数据
    • 例如,http://......../user

2、dubbo协议
  • 接口地址 dubbo://........
  • 适用于少量数据的传输,大并发

3、http协议
  • 接口地址(80%) http://........ | https://........
  • http —— 超文本传输协议,端口 443;https —— http+ssl安全传输协议,端口 80
  • 什么是HTTP协议? —— 超文本传输协议,主要是用于浏览器和服务器之间交互数据,交互有两个部分
  • 请求:get、post、put、delete
  • 请求包含:
    • 请求行:请求方式、请求地址、协议 POST http://...... HTTP/1.1
    • 请求头:
      • Host —— 请求的主机地址**
      • Connection —— 连接方式
      • Accept —— 客户端接收到的数据格式
      • X-Requested-With —— 异步请求**
      • User-Agent —— 客户端的用户类型**
      • Referer —— 来源
      • Cookie —— 请求Cookie信息**
      • Context-Type —— 请求内容的格式
      • Accept-Encoding —— 压缩方式
  • 响应:1xx 信息,2xx 成功,3xx 重定向(跳转不传值),4xx 客户端错误,5xx 服务器错误
  • 响应包括:
    • 响应行:协议、响应码、响应信息 HTTP/1.1 200 OK
    • 响应头:
      • Server —— 服务器
      • Date —— 响应时间
      • Content-Type —— 响应内容的格式
      • X-Powered-By —— 网站编写的语言或框架版本类型
      • Set-Cookie —— 响应Cookie信息**

十六、企业接口测试的流程和方案

  • 拿到api接口文档,熟悉接口业务,接口地址、鉴权、入参、出参、错误码
  • 接口计划和方案
  • 思路:
    • 正例:输入正常的入参,查看接口是否返回成功
    • 反例:
      •  鉴权反例 —— 鉴权为空、鉴权码错误、鉴权码已过期...
      • 参数反例 —— 参数空、参数类型异常、参数长度异常、错误码的覆盖...
      • 其它场景 —— 分页异常...
  • 编写用例和评审
  • 执行接口测试
  • 输出接口测试报告

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值