postman在软件测试中的应用
postman工具概述
Postman 是一款功能强大的 API 开发和测试工具,在软件开发和测试领域应用广泛。开发阶段,可以通过工具进行mock数据测试,方便开发,联调;测试阶段,可以通过不同环境,不同数据进行接口测试和数据构造;回归阶段,可以通过场景自动化的方式进行接口串联测试,通过定时任务的方式生成测试报告等。
postman如何进行场景化接口自动化
postman数据处理
经常我们在接口测试过程中遇到以下问题:
测试/生产只是域名不同、token不一样,每次都需要写两个接口?或者说是改url,如果接口较多的情况下,如何快速处理呢?—如何做到一套接口多环境使用
postman可不可以连接数据库-进行一些获参和断言呢?
接口传参的时候,不同情况下,我要写多个case,就是多条用例,我能不能在一个接口里,通过条件判断,什么情况传什么参数呢?
我一个接口返回多组数据,我需要怎么遍历获取他们呢,再对他们进行处理呢?
接口传参中,有些值我想自定义随机生成或者按照一定规律生成,如何去生成呢?
我需要大量不同的数据时,或者说我需要批量修改/创建一些数据,如何去生成呢?
那么针对以上这些问题,postman工具应该怎么处理呢?
引入变量
postman变量类型
本地变量(Local Variable)
本地变量主要是针对单个url请求设置的变量,作用域只是局限在请求范围内。
//设置本地变量
pm.variables.set("key","value");
正常接口参数:
引用变量设置:
全局变量(Global Variable)
全局变量是指在所有的环境里面,变量值都是一样的,全局变量的作用域是所有请求。
//设置全局变量
pm.globals.set("key","value")
注意:当环境变量和全局变量名称一样时,切换到某个环境时,环境变量会覆盖全局变量
设置方式:
环境变量(Environment Variable)
环境变量指在不同环境,同一个变量值随着环境不同而变化。
//变量的引用格式为
{{varname}}
一个Java Script执行环境,可以通过JS脚本来编写Pre-request Script和Test Script。
Pre-request Script(预置脚本):可以用来修改一些默认参数,在请求发送之前执行;
Test Script(测试脚本):当接收到响应之后,再执行测试脚本
数据变量(Data Variable)
数据变量是通过导入外部数据文件(json文件或者csv文件),来获取变量数据。
数据处理方式
获取对应所需参数方法
接口返回值—获取所需参数
数据库查询—获取所需参数(xmysql)
Mock数据—构造所需参数
获取返回值信息
//获取返回的响应值然后转为json格式
var jsonData=pm.response.json();
//获取接口返回的值
tg_order_id=jsonData["data"][0]["order_id"]
或bpid=json.data.bpid
//控制台日志查看
console.log(tg_order_id);
//将获取的变量设置全局变量
pm.globals.set("tg_order_id",tg_order_id);
postman连接数据库
1、安装nodejs
2、安裝xmysql
3、连接数据库( xmysql -h test-XXX-af01.db.58dns.org -o 53200 -u 用户名 -p 密码 -d 数据库名)
(-h 输入连接数据库地址;-u -p 是要连接的数据库用户名密码;-d 是要连接的数据库中库名 )
4、获取数据库相关信息
在postman中通过 http://localhost:XXXX/api/ 访问 xmysql 自动生成的 Rest API
postman获取数据库信息常用操作语句
官方详细文档:https://github.com/o1lab/xmysql#api-overview
1、请求方式:
2、基本的数据库操作:
3、排序操作:
使用案例:
js脚本编写
经常我们为了方便多个接口串联使用,会需要对postman接口返回的结果进行处理,然后方便接口数据进行串联,这里就离不开js脚本编写
js基本用法
1、js调试
console.log()
console.warn()
console.info()
2、js数据类型
6种数据类型
值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、为空(Null)、未定义(Undefined)、Symbol。
引用数据类型:对象(Object)、数组(Array)、函数(Function)
查看数据类型(typeof)
使用 typeof 操作符来检测变量的数据类型。
注:如果对象是 JavaScript Array 或 JavaScript Date ,我们就无法通过 typeof 来判断他们的类型,因为都是 返回 object。
3、js类型转换
var obj = JSON.parse(text);(JSON 字符串转换为 JavaScript 对象)
javaScript 变量可以转换为新变量或其他数据类型:
通过使用 JavaScript 函数
Number() 转换为数字, String() 转换为字符串, Boolean() 转换为布尔值,Date() 日期转换为字符串。
通过 JavaScript 自身自动转换
当 JavaScript 尝试操作一个 "错误" 的数据类型时,会自动转换为 "正确" 的数据类型。
自动转换为字符串:输出一个对象或一个变量时 JavaScript 会自动调用变量的 toString() 方法:
4、JavaScript JSON
JSON 格式化后为 JavaScript 对象(JSON 格式在语法上与创建 JavaScript 对象代码是相同的)
JSON 数据 - 一个名称对应一个值/JSON 对象 /JSON 数组
JSON 字符串转换为 JavaScript 对象
JavaScript 值转换为 JSON 字符串
使用案例:
js条件语句
在写代码时,总是需要为不同的决定来执行不同的动作。故可以在代码中使用条件语句来完成该任务
在 JavaScript 中,我们可使用以下条件语句:
if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码
if…else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码
if…else if…else 语句- 使用该语句来选择多个代码块之一来执行
switch 语句 - 使用该语句来选择多个代码块之一来执行
案例使用:
js循环
Js循环语句
希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的。
JavaScript 支持不同类型的循环:
for - 循环代码块一定的次数
for/in - 循环遍历对象的属性
希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的。
JavaScript 支持不同类型的循环:
while - 当指定的条件为 true 时循环指定的代码块
do/while - 同样当指定的条件为 true 时循环指定的代码块
注意:忘记增加条件中所用变量的值,否则循环永远不会结束!
js函数和对象
js函数
函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
JavaScript 函数语法:
函数就是包裹在花括号中的代码块,前面使用了关键词 function,当调用该函数时,会执行函数内的代码。
function functionname()
{
// 执行代码
}
调用带参数的函数
function myFunction(var1,var2){代码}
带有返回值的函数
function myFunction(){ var x=5; return x;}
JS对象
1、数字方法(Numbere对象)
2、String对象
3、日期对象(Date对象)
4、Math 对象
5、Array对象
postman断言&运行
【1】校验接口响应的状态码
【2】检查从JSON响应中获取到某个字段,判断其是否与预期字段一致;
【3】判断实际响应时间是否与低于预期时间
【4】检查响应信息中是否包含某些指定的字符串(pm.test("Body matches string", function () { pm.expect(pm.response.text()).to.include("string_you_want_to_search"); }); )
【5】检查实际获取的响应体(即 Body 信息)与预期结果的响应体是否一致;(pm.test("Body is correct", function () { pm.response.to.have.body("response_body_string"); }); )
【6】检查响应中的头域信息(Headers)是否与预期一致(pm.test("Content-Type is present
", function () {pm.response.to.have.header("Content-Type"); }); )
【7】检查响应码是否与预期集合中的某个值一致(pm.test("Successful POST request", function () { pm.expect(pm.response.code).to.be.oneOf([201,202]); }); )
【8】检查响应信息中是否包含某个预期值(pm.test("Status code name has string", function () { pm.response.to.have.status("Created"); }); )
【9】转化XML格式的响应成JSON对象 var jsonObject = xml2Json(responseBody);
运行collection
数据data驱动测试
构建工作流
在使用Coolection Runner 时,集合中的请求执行顺序就是请求在Collection中的排列顺序。
如果需要执行依次执行1-5-2-3-4的请求则有2种方式:
1、需要手动调整顺序;
2、在Tests里指定下一个请求 postman.setNextRequest("requestname")
命令执行
newman测试报告
jenkins集成运行
总结
1、在自动化方面-postman -只能用于小规模,项目之间的自动化-不是很体系化,本地化偏重
2、生成测试报告-也不是很美观
3、针对测试多库时不友好-只能连接一个数据库–适用于数据库单一的需求测试