postman在软件测试中的应用

postman工具概述

Postman 是一款功能强大的 API 开发和测试工具,在软件开发和测试领域应用广泛。开发阶段,可以通过工具进行mock数据测试,方便开发,联调;测试阶段,可以通过不同环境,不同数据进行接口测试和数据构造;回归阶段,可以通过场景自动化的方式进行接口串联测试,通过定时任务的方式生成测试报告等。

postman如何进行场景化接口自动化

postman数据处理

经常我们在接口测试过程中遇到以下问题:

测试/生产只是域名不同、token不一样,每次都需要写两个接口?或者说是改url,如果接口较多的情况下,如何快速处理呢?---如何做到一套接口多环境使用

postman可不可以连接数据库-进行一些获参和断言呢?

接口传参的时候,不同情况下,我要写多个case,就是多条用例,我能不能在一个接口里,通过条件判断,什么情况传什么参数呢?

我一个接口返回多组数据,我需要怎么遍历获取他们呢,再对他们进行处理呢?

接口传参中,有些值我想自定义随机生成或者按照一定规律生成,如何去生成呢?

我需要大量不同的数据时,或者说我需要批量修改/创建一些数据,如何去生成呢?

那么针对以上这些问题,postman工具应该怎么处理呢?

引入变量

postman变量类型

本地变量(Local Variable)

本地变量主要是针对单个url请求设置的变量,作用域只是局限在请求范围内。

javascript 复制代码
//设置本地变量
pm.variables.set("key","value");

正常接口参数:

引用变量设置:

全局变量(Global Variable)

全局变量是指在所有的环境里面,变量值都是一样的,全局变量的作用域是所有请求。

javascript 复制代码
//设置全局变量
pm.globals.set("key","value")
注意:当环境变量和全局变量名称一样时,切换到某个环境时,环境变量会覆盖全局变量

设置方式:

环境变量(Environment Variable)

环境变量指在不同环境,同一个变量值随着环境不同而变化。

javascript 复制代码
//变量的引用格式为
{{varname}}

一个Java Script执行环境,可以通过JS脚本来编写Pre-request Script和Test Script。

Pre-request Script(预置脚本):可以用来修改一些默认参数,在请求发送之前执行;

Test Script(测试脚本):当接收到响应之后,再执行测试脚本

数据变量(Data Variable)

数据变量是通过导入外部数据文件(json文件或者csv文件),来获取变量数据。

数据处理方式

获取对应所需参数方法

接口返回值---获取所需参数

数据库查询---获取所需参数(xmysql)

Mock数据---构造所需参数

获取返回值信息

javascript 复制代码
//获取返回的响应值然后转为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连接数据库

javascript 复制代码
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基本用法

javascript 复制代码
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断言&运行

javascript 复制代码
【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驱动测试

构建工作流

javascript 复制代码
在使用Coolection Runner 时,集合中的请求执行顺序就是请求在Collection中的排列顺序。
如果需要执行依次执行1-5-2-3-4的请求则有2种方式:
1、需要手动调整顺序;
2、在Tests里指定下一个请求    postman.setNextRequest("requestname")

命令执行

newman测试报告


jenkins集成运行

总结

1、在自动化方面-postman -只能用于小规模,项目之间的自动化-不是很体系化,本地化偏重

2、生成测试报告-也不是很美观

3、针对测试多库时不友好-只能连接一个数据库--适用于数据库单一的需求测试

相关推荐
lichong95120 分钟前
【Flutter&Dart】 listView例子一(13 /100)
android·javascript·flutter·postman·smartapi·postapi·foxapi
cmgdxrz6 小时前
Postman接口测试04|批量运行测试用例、参数化、Mock Server、Cookie鉴权、Newman生成测试报告
测试工具·postman
A~taoker10 小时前
selenium+pyqt5自动化工具总结
selenium·测试工具·自动化
测试老哥12 小时前
Jmeter实战:编写博客标签模块增删改查自动化脚本和压测
自动化测试·软件测试·测试工具·jmeter·职场和发展·测试用例·压力测试
测试杂货铺14 小时前
基于selenium和python的UI自动化测试方案
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
謬熙14 小时前
【UI自动化测试】selenium操作补充
selenium·测试工具·ui
小张认为的测试18 小时前
Selenium 浏览器驱动代理 - 无需下载本地浏览器驱动镜像!(Java 版本!)
java·python·selenium·测试工具·浏览器
Feng.Lee18 小时前
adb使用及常用命令
功能测试·测试工具·adb·可用性测试
小馋喵知识杂货铺19 小时前
Selenium 特殊控件操作与 ActionChains 实践详解
selenium·测试工具