当前位置:首页 > 科技  > 软件

Postman 脚本的奥秘:JavaScript 的内置对象和方法

来源: 责编: 时间:2023-10-13 14:37:22 361观看
导读Postman 的前后置脚本中是完全支持 JavaScript 编写代码,JavaScript 有很多内置的对象和方法,可以帮助我们完成各种任务,比如生成随机数和测试响应数据。一、生成随机数使用Math.random()方法来生成一个 0 到 1 之间的随

Postman 的前后置脚本中是完全支持 JavaScript 编写代码,JavaScript 有很多内置的对象和方法,可以帮助我们完成各种任务,比如生成随机数和测试响应数据。ZUJ28资讯网——每日最新资讯28at.com

ZUJ28资讯网——每日最新资讯28at.com

一、生成随机数

使用Math.random()方法来生成一个 0 到 1 之间的随机小数,比如:ZUJ28资讯网——每日最新资讯28at.com

Math.random() // 0.0-1.0之间的数字,小数 0.465413246541

生成一个指定范围内的随机数:ZUJ28资讯网——每日最新资讯28at.com

Math.random()*10  // 0.0-10.0之间的数字,小数 9.465413246541

生成一个整数,可以使用Math.floor()、Math.ceil()或者Math.round()方法来对小数进行取整:ZUJ28资讯网——每日最新资讯28at.com

Math.floor(Math.random()*10)  // 直接舍弃小数部分 0,1,2,3,4,5,6,7,8,9Math.floor(9.232323123313213)=9 // 直接舍弃小数部分 9Math.ceil(Math.random()*10)  // 进1法,整数部分加1, 1,2,3,4,5,6,7,8,9,10Math.ceil(9.232323233231121)=10 // 进1法,整数部分加1, 10Math.round(Math.random()*10) // 四舍五入法,最接近的整数 0,1,2,3,4,5,6,7,8,9,10Math.round(9.232323233231121)=9 // 四舍五入法,最接近的整数 9

场景 1:随机生成一个用户名

生成一个用户名,规定格式为 kira001,kira002,jkira003。ZUJ28资讯网——每日最新资讯28at.com

var num="";// 循环生成3位数for(var i=0;i<3;i++){    num +=Math.floor(Math.random()*10);}// 拼接用户名var username = "kira" + num;// 打印用户名console.log(username) // kira456

场景 2:随机生成一个电话号码

生成一个电话号码,规定前三位为 135,138,156,181,199。ZUJ28资讯网——每日最新资讯28at.com

// 定义前三位列表var list=["135","138","156","181","199"];// 随机获取一个下标var index= Math.floor(Math.random()*list.length)// 获取前三位var pre_phone3=list[index];// 定义后八位为空字符串var back_phone8 ="";// 循环生成后八位数字for(var i=0;i<8;i++){    back_phone8 +=Math.floor(Math.random()*10);}// 拼接电话号码var phonenum = pre_phone3+back_phone8;// 打印电话号码console.log(phonenum) // 15612345678// 设置为临时变量,请求直接{{phonenum}}调用pm.variables.set('phonenum',phonenum);

二、请求数据或响应数据处理

接口测试的时候,我们需要对请求数据或者响应数据进行一些逻辑处理和断言,以确保数据的正确性和完整性。ZUJ28资讯网——每日最新资讯28at.com

方法 1:pm 对象

pm 对象是一个全局对象,它提供了一些属性和方法来访问请求和响应的信息。ZUJ28资讯网——每日最新资讯28at.com

console.log(pm.response.code)   // 提取状态码 200console.log(pm.response.reason())  // 提取响应信息 OKconsole.log(pm.response.headers)  // 提取响应头console.log(pm.response.responseTime)  // 提取响应时间console.log(pm.response.text())  // 提取响应体,不管body是什么格式的,都可以采用这个函数来提取console.log(pm.response.json())  // 提取json格式的响应数据,并转化为json对象(即python字典)

方法 2:responseCode、responseTime 等对象

responseCode、responseTime 等对象是一些全局对象,它们也可以用来访问请求和响应的信息。ZUJ28资讯网——每日最新资讯28at.com

var code=responseCode.code;       // 获取响应中的状态码200var codename=responseCode.name;   // 提取响应信息 OKvar time=responseTime;            // 提取响应时间var headers=postman.getResponseHeader('Content-Type');  // 提取响应头中的Content-Typevar cookies=postman.getResponseCookie('name').value;    // 获取响应cookies中的value值,括号中填写cookies的name值var body=getResponseBody;        // 获取响应正文(是字符串,如果是json格式,那就是json字符串)var jsonData= JSON.parse(body)   // 将json字符串转化为json对象(字典)

三、断言响应信息

pm.test()是一个全局函数,用来定义一个测试用例,接受一个回调函数作为参数。ZUJ28资讯网——每日最新资讯28at.com

断言状态码

状态码是指服务器对请求的处理结果的一种表示,如: 200 表示成功,404 表示未找到,500 表示服务器错误等等。ZUJ28资讯网——每日最新资讯28at.com

(1) 方法 1:pm.response.to.have.status()ZUJ28资讯网——每日最新资讯28at.com

pm.response.to.have.status()用来判断响应的状态码。ZUJ28资讯网——每日最新资讯28at.com

pm.test("Status code is 200", function () {     pm.response.to.have.status(200);});

(2) 方法 2:pm.expect()ZUJ28资讯网——每日最新资讯28at.com

pm.expect()是一个全局函数,用来创建一个期望值,并接受一个实际值作为参数。`pm.expect()还提供了一些链式方法,可以用来进行各种断言。ZUJ28资讯网——每日最新资讯28at.com

var code=pm.response.code;pm.test("链式断言简单示例",function(){    pm.expect(code).to.equal(200);    pm.expect({a: 1}).to.deep.equal({a: 1});    pm.expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]');    pm.expect({'.a': {'[b]': 'x'}}).to.nested.include({'//.a.//[b//]': 'x'});    pm.expect({a: 1}).to.have.own.property('a');    pm.expect({a: 1, b: 2}).to.not.have.any.keys('c', 'd');    pm.expect({a: 1, b: 2}).to.have.all.keys('a', 'b');    pm.expect([]).to.be.an('array').that.is.empty;});

pm.expect()有非常多的链式方法,具体参考链接:https://www.chaijs.com/api/bdd/ZUJ28资讯网——每日最新资讯28at.com

(3) 方法 3:if 语句和 tests 对象ZUJ28资讯网——每日最新资讯28at.com

tests 是一个全局对象,用来存储测试结果,接受一个布尔值作为参数。ZUJ28资讯网——每日最新资讯28at.com

var code =pm.response.code;if(code==200){    tests['状态码一致!']=true;}else{    tests['状态码不一致']=false;}

(4) 方法 4:tests 对象和比较运算符ZUJ28资讯网——每日最新资讯28at.com

比较运算符是一种运算符,用来比较两个值的大小或相等性,并返回一个布尔值。ZUJ28资讯网——每日最新资讯28at.com

tests['状态码的检验']=pm.response.code===200;

断言响应体

响应体是指服务器返回给客户端的数据,它可以是文本、图片、音频、视频等等。ZUJ28资讯网——每日最新资讯28at.com

(1) 方法 1:pm.expect()ZUJ28资讯网——每日最新资讯28at.com

全量匹配或者部分匹配:ZUJ28资讯网——每日最新资讯28at.com

pm.test("全量匹配或者部分匹配", function () {     var body =pm.response.text();     pm.expect(body).to.equal('{"status":2,"msg":"请求成功"}');// 全量匹配     pm.expect(body).to.include('请求成功');// 部分匹配});

响应的具体内容不固定,但它的格式和结构固定,则可以结构匹配或者键值匹配:ZUJ28资讯网——每日最新资讯28at.com

pm.test("响应结构匹配", function () {     var jsonData = pm.response.json();     // 结构匹配     pm.expect(jsonData).to.eql({          "errcode": 0,          "data": { "user_id": 1 }     });     // 键值匹配     pm.expect(jsonData.status).to.equal(2);     pm.expect(jsonData.msg).to.equal("请求成功");});

(2) 方法 2:pm.response.to.have.jsonBody()ZUJ28资讯网——每日最新资讯28at.com

pm.test("Body is json", function () {  //检查响应体是否为 json 格式。  pm.response.to.have.jsonBody();  //检查响应体中是否存在某个键或者某个值。    pm.response.to.have.jsonBody('status');// 检查键是否存在  pm.response.to.have.jsonBody(2);// 检查值是否存在});

(3) 方法 3:pm.response.to.have.jsonSchema()ZUJ28资讯网——每日最新资讯28at.com

检查响应体是否符合某个 json 模式(schema),包含两个必需的属性 errcode(数字) 和 errmsg(字符串)。ZUJ28资讯网——每日最新资讯28at.com

pm.test("Body matches schema", function () {  var schema = {     "type": "object", // 对象     "properties": {          "errcode": {               "type": "number" // 数字类型          },          "errmsg": {               "type": "string" // 字符串类型          }     },     "required": ["errcode", "errmsg"]  // 必须};  pm.response.to.have.jsonSchema(schema);});

常见特殊场景断言思路分析

(1) 场景 1:响应体 json 格式的数量比较大,不能全量匹配整个 json 格式,如何断言?ZUJ28资讯网——每日最新资讯28at.com

只检查响应体中的一些关键的键或者值ZUJ28资讯网——每日最新资讯28at.com

(2) 场景 2:返回的 json 格式的数据是变化的,如何断言?ZUJ28资讯网——每日最新资讯28at.com

这种情况下,使用 json 模式来检查响应体的结构和约束,而不是具体的内容。ZUJ28资讯网——每日最新资讯28at.com

(3) 场景 3:如果返回的 json 格式的 Body 数据是动态变化的怎么办?ZUJ28资讯网——每日最新资讯28at.com

  • 首先检查是否为 json 格式
  • 可以只检查 body 中是否存在期望的键,主要检查哪些核心的键
  • 可以检查返回 json 结构是否正确

本文链接:http://www.28at.com/showinfo-26-13563-0.htmlPostman 脚本的奥秘:JavaScript 的内置对象和方法

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 在 IDEA 中的各种调试技巧,轻松定位 Bug(超级全面)

下一篇: 性能工程实践

标签:
  • 热门焦点
  • 印度登月最关键一步!月船三号今晚进入环月轨道

    8月5日消息,据印度官方消息,月船三号将于北京时间今晚21时30分左右开始近月制动进入环月轨道。这是该探测器能够成功的最关键步骤之一,如果成功将开始围
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    今天这篇文章跟大家分享18个JS单行代码,你只需花几分钟时间,即可帮助您了解一些您可能不知道的 JS 知识,如果您已经知道了,就当作复习一下,古人云,温故而知新嘛。现在,我们就开始今
  • 一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之&ldquo;想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!&rdquo;曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己&ldquo;当家&rdquo;的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • 3699元!iQOO Neo8 Pro顶配版今日首销:1TB UFS 4.0同价位唯一

    5月23日,iQOO推出了全新的iQOO Neo8系列,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更是首发搭载了联发科天玑9200+旗舰
Top