当前位置: 首页 > article >正文

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、针对测试多库时不友好-只能连接一个数据库–适用于数据库单一的需求测试


http://www.kler.cn/a/466561.html

相关文章:

  • html中下拉选框的基本实现方式及JavaScript动态修改选项内容情况总结
  • 掌握 Dockerfile:格式、解析器指令、环境变量替换
  • 深度学习中的步数指的是什么
  • Spark是什么?Flink和Spark区别
  • java项目之校园管理系统的设计与实现(源码+文档)
  • 深入解析 Linux 设备树中的引脚控制(pinctrl)二
  • 一文读懂拟合法
  • 电脑cxcore100.dll丢失怎么办?
  • 华为ensp-BGP路由过滤
  • 【python】requests库发起HTTP请求
  • 职场常用Excel基础04-二维表转换
  • VS2015中使用boost库函数时报错问题解决error C4996 ‘std::_Copy_impl‘
  • 《探索机器人自主导航与路径规划技术的热点》
  • 常见的网络安全攻击技术
  • 如何在 ThinkPHP 中实现文件上传功能:实用示例
  • 网络安全:路由技术
  • HTML——63.普通按钮和隐藏域
  • word中编号统一格式
  • 青少年编程与数学 02-006 前端开发框架VUE 03课题、编写APP组件
  • ElasticSearch系列(一)
  • vue 基础参数增加多语言配置
  • 谷歌Willow芯片:量子计算为引擎加速人工智能在多领域的深度应用与变革
  • 人工智能之机器学习算法
  • 高阶数据结构----布隆过滤器和位图
  • 淘宝商品详情深度解析:利用JAVA爬虫获取item_get_pro接口
  • Git项目版本控制学习