前言:
鉴于本人学完就忘的毛病,故将学习过程整理成笔记的形式供自己之后温故查阅。
一、下载地址
Download Postman | Get Started for Free
- 下载完成后直接安装,不需要注册登录
- 点击下方的“skip and go to the app ”进入应用
- 默认功能基本够用,不必要强求高级用法
二、官方学习文档
https://learning.postman.com/docs/getting-started/introduction/
postman可以支持如下场景:
- 快速的调用接口,方便调试;
- 通过不同的参数去测试接口的输出;
- 接口调用可以保存下来反复运行;
- 运行过程中支持断言,可以设置测试目的,将预期结果和实际结果进行比较
三、chrome APP 与native APP的区别
***chrome app目前已经不再维护了***
-
cookies
区别:native版本可以直接操作cookie,而chrome版本需要安装扩展
-
Built-in proxy
native版本自带proxy,可以用来抓包
-
Menu bar
native版本带有菜单栏,使用更方便
-
Restricted headers
有一些headers在chrome APP 上是受限的,比如 Origin and User-Agent
而native版本支持随意修改
-
Don't follow redirects option
native版本才有这个选项,可以测试3××之类的请求响应,支持更多的测试场景
-
Postman console
native版本自带,调试打印更方便
四、发送请求
发送一个简单的get请求
V2EX API 接口文档
https://www.v2ex.com/p/7v9TEc53
最热主题接口(非鉴权api)
https://www.v2ex.com/api/topics/hot.json
五、http消息
postman目前只支持http协议的接口
HTTP消息是服务器和客户端直接进行交互数据的方式
有两种类型的消息
- 请求:由客户端发送用来触发服务器上的动作
- 响应:来自服务器的应答
相关文档:
http请求的构成
起始行:POST / HTTP/1.1
- 一个HTTP方法,一个动词(像GET,PUT或者POST)或者一个名词(像HEAD或者OPTIONS),描述要执行的动作
- 请求目标(request target),通常是一个URL,或者协议、端口和域名的绝对路径,通常以请求的环境为特征
- HTTP版本(HTTP version),定义了剩余报文的结构,作为对期望响应版本的指示符;
Headers:一串由冒号分割的key:value构成的字符串,用于配置
- 来自请求的HTTP headers 遵循和HTTP header相同的基本结构:不区分大小写的字符串,紧跟着的冒号“:”和一个结构取决于header的值,整个header(包括值)由一行组成,这一行可以相当长
Body
- 不是所有的请求都有一个body,例如获取资源的请求,GET,HEAD,DELETE和OPTIONS,通常是不需要body的
- 有些请求将数据发送到服务器以便更新数据,常见的有POST请求(包含HTML表单数据)
http响应的构成
起始行 被称作 状态行
- HTTP协议版本,通常为 HTTP/1.1
- 状态码(status code),表明请求是成功还是失败。常见的状态码 是200(ok) 404(not found) 或者302
- 状态文本(status text),一个简短的、纯粹的信息,通过状态码的文本描述,帮助人们理解该http消息
Headers:一串由冒号分割的key:value构成的字符串,用于配置
- 响应的HTTP headers 遵循和任何其他header相同的基本结构:不区分大小写的字符串,紧跟着的冒号“:”和一个结构取决于header的值,整个header(包括值)表现为单行形式
- 可以设置客户端的cookie
Body
不是所有的响应都有一个body,例如获取资源的请求,具有状态码(如201或者204)的响应,通常不会有body
- 2-- 200成功,201请求一个资源并成功创建或更新
- 3-- 301 重定向到其他接口,包含具体重定向的接口 302
- 4-- 400 api中参数不正确或不合法 401需要鉴权的接口,未授权访问时 403 没有权限 404 没有找到该资源
- 5-- 500 服务器有错误,大多为bug 502 配置Nginx不正确,bug
六、增加断言
断言 预期与实际结果的比较
预期==实际 用例通过(PASS),写入报告
预期!==实际 用例失败(FAIL),写入报告
测试用例编写原则,3A原则
- Arrange:分配测试数据,初始化测试对象
- Act:通过不同的参数调用被测的功能,即测试步骤
- Assert: 断言,测试目的**
断言的位置 响应中 code body
写测试用例:postman的Test功能
如下图示,可以获取常用库信息
sandbox,可以执行js的隔离的环境,作用,引用公共库;操作环境变量和全局变量;动态变量;操作cookie;获取和查看请求及响应;读取数据文件
- 设置全局变量
- 设置环境变量
- 拿到并处理请求的响应
//chai的语法
pm.test("状态码应该是200", function () {
pm.response.to.have.status(200);
});
pm.test("必须返回10条数据", function () {
var res = pm.response.json();//将结果转换为json格式,赋值给变量res
console.log(res.length);//调试打印响应数据长度
pm.expect(res.length).to.eql(10);//获取响应长度并与10进行比较
});
- 定义测试检查点和断言
七、UI测试
思路
- 发请求拿到网站的响应 HTML
- 解析HTML标签,判断一些元素是否现显示
目的
快速检测ui是否正确
用到的库 cheerio
The industry standard for working with HTML in JavaScript | cheerio
使用示例
- 当前页面共有40门课程,利用class card-title定位页面上这些课程
- 设置断言
var cheerio = require('cheerio');//引入并加载cheerio
var cheerio = require('cheerio');
var $ = cheerio.load(responseBody);
//下方测试用例中含有两个断言,可以做页面的静态检测
pm.test("结果中必须包含40门课程",function(){
pm.response.to.be.success;//1.返回值是200
pm.expect($('.card-title').length === 40);//2.expect中的表达式为true,页面上必须有40个class=card-title
});
- 查看断言结果
总结
postman可以做ui功能测试
- 前台是使用者具有一定的javascript代码功底
- 熟悉类似于jquery的操作
postman做ui功能测试的局限
- 交互能力一般
- 无法处理ajax请求
- sandbox中无法使用更多的javascript库(可用库及用法参考Postman JavaScript reference | Postman Learning Center)
八、请求方法
RESTFUL风格:资源视角风格
- GET 获取资源,一组或一个
- POST 创建资源,一个或一组
- PUT update一个资源
- DELETE 删除一个方法
- PATCH update一个资源
Postman 8.0.5获取示例数据
创建用户后,搜索“Published Postman Templates”,会有很多示例数据参考
例如 Postman API 、Postman Echo中的Request Methods等,可以参考官方示例用法设置不同的请求
九、Cookie
Postman中可以直接添加cookie、查看响应中的cookie
cookie的获取
示例
console.log(pm.cookies.get('foo1'))
十、鉴权方式
basic authenticaion
https://postman-echo.com/basic-auth
不同的形式
Token设置
十一、Collection的作用
Collection是一个容器,作用如下:
- 组织业务逻辑 :每个collection是一个测试集合,每一个collection下可以定义文件夹,每个文件夹可以作为一个模块
- 导入导出
- 监控和mock server等高级功能,付费的
十二、变量
为什么要使用变量,api测试时根据不同场景更加灵活,引用形式:{{var_name}} 差值的方式
postman变量作用域
- Environment:环境变量,比如可以将测试域名设置为环境变量
- Global:全局变量,比如可以将错误提示信息设置为全局变量
- Local:本地变量,一般可以在sandbox中定义,只在当前运行有效
- Data:测试数据中导入的变量,也就是参数化
管理全局变量和环境变量
环境变量使用示例
https://www.v2ex.com/api/nodes/show.json?name=python
-
添加环境变量
-
环境变量配置
-
引用环境变量
-
设置不同的环境变量
全局变量使用示例
-
添加全局变量
-
全局变量配置
-
查看请求中变量,此时未选中环境变量,默认已经修改为全局变量
-
变量同名时,环境变量中的值可以覆盖掉全局变量中的值
将接口响应传递为下一个接口的入参
//将数据解析成json格式
var resdata=JSON.parse(responseBody);
//获取access_token值
var 变量名=resdata.响应字段key;
//设置成环境变量
pm.environment.set("变量名", 变量名);
十三、运行collection
保存数据到collocation
-
设置断言,获取环境变量并判断
nodename = pm.environment.get('nodename');//获取环境变量
pm.test("状态码应该是200", function () {
pm.response.to.have.status(200);
});
pm.test("返回值的name必须和参数中的name一致", function () {
var res = pm.response.json();
pm.expect(res.name).to.eql(nodename);//将响应中的结果数据和变量值进行比较
});
-
运行结果如下
-
保存请求到collocation
运行collection结合环境变量
-
运行配置
-
运行结果
运行collocation,通过数据驱动实现
-
通过数据驱动传参,构造三组测试数据
var obj = [{nodename:'php'},{nodename:'python'},{nodename:'qna'}]
JSON.stringify(obj)
将结果[{"nodename":"php"},{"nodename":"python"},{"nodename":"qna"}]复制到文件testdata.json并保存
-
在运行界面加载该文件
(注:若既有文件又有环境变量,运行时优先以testdata文件中的值为准)
-
配置说明
-
修改请求中的断言,保存
-
运行collocation,查看结果
从命令行中运行collocation
运行准备
-
导出collocation
-
安装nodejs和npm(Nodejs下的包管理器)
下载地址下载 | Node.js,下载安装后自带npm
-
安装newman
安装过程有点慢,安装完成后如下所示,newman -h查看具体用法
运行及生成测试报告
- CLI reporer
- JSON reporter
- HTML reporter
- Junit reporter
示例
newman run .\v2ex.postman_collection.json -d .\testdata.json -r html
报错解决方案
报错1、“newman : 无法加载文件 C:\Users\...\AppData\Roaming\npm\newman.ps1,因为在此系统上禁止运行脚本”
解决方法如下:
- 以管理员身份运行命令行cmd
- 更改策略,命令行输入set-ExecutionPolicy RemoteSigned,修改改权限为A,在输入 get-ExecutionPolicy 查看当前的状态
报错2、newman: could not find "html……
解决方法:npm install -g newman-reporter-html
十四、导出python脚本
导出不同语言的脚本
导出python requests框架的脚本
复制脚本如下
import requests
import unittest
class V2exAPTTestCase(unittest.TestCase):
def test_node_api(self):
url = "https://www.v2ex.com/api/nodes/show.json"
payload={"name":"php"}
headers = {}
for nodename in ['php','python','qna']:
response = requests.request("GET", url, headers=headers, params={'name':nodename}).json()
self.assertEqual(response['name'],nodename)
if __name__=='__main__':
unittest.main()
运行
python .\v2ex_api_test_case.py
十五、导出java代码
- 导出成java的OKhttp代码
- 使用Junit进行接口自动化测试
- 使用fastJSON解析json字符串
十六、其他设置
更新
postman默认是自动更新的。
打开设置 file-settings
界面说明
卸载重装
卸载后删除如下两个目录下的postman文件夹
- C:\Users\用户名\AppData\Roaming
- C:\Users\用户名\AppData\Local
删除完成后重新安装