文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-11-30 07:16

关注

一、生成随机数

使用Math.random()方法来生成一个 0 到 1 之间的随机小数,比如:

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

生成一个指定范围内的随机数:

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

生成一个整数,可以使用Math.floor()、Math.ceil()或者Math.round()方法来对小数进行取整:

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

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

生成一个用户名,规定格式为 kira001,kira002,jkira003。

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。

// 定义前三位列表
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);

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

接口测试的时候,我们需要对请求数据或者响应数据进行一些逻辑处理和断言,以确保数据的正确性和完整性。

方法 1:pm 对象

pm 对象是一个全局对象,它提供了一些属性和方法来访问请求和响应的信息。

console.log(pm.response.code)   // 提取状态码 200
console.log(pm.response.reason())  // 提取响应信息 OK
console.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 等对象是一些全局对象,它们也可以用来访问请求和响应的信息。

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

三、断言响应信息

pm.test()是一个全局函数,用来定义一个测试用例,接受一个回调函数作为参数。

断言状态码

状态码是指服务器对请求的处理结果的一种表示,如: 200 表示成功,404 表示未找到,500 表示服务器错误等等。

(1) 方法 1:pm.response.to.have.status()

pm.response.to.have.status()用来判断响应的状态码。

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

(2) 方法 2:pm.expect()

pm.expect()是一个全局函数,用来创建一个期望值,并接受一个实际值作为参数。`pm.expect()还提供了一些链式方法,可以用来进行各种断言。

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/

(3) 方法 3:if 语句和 tests 对象

tests 是一个全局对象,用来存储测试结果,接受一个布尔值作为参数。

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

(4) 方法 4:tests 对象和比较运算符

比较运算符是一种运算符,用来比较两个值的大小或相等性,并返回一个布尔值。

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

断言响应体

响应体是指服务器返回给客户端的数据,它可以是文本、图片、音频、视频等等。

(1) 方法 1:pm.expect()

全量匹配或者部分匹配:

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

响应的具体内容不固定,但它的格式和结构固定,则可以结构匹配或者键值匹配:

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()

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()

检查响应体是否符合某个 json 模式(schema),包含两个必需的属性 errcode(数字) 和 errmsg(字符串)。

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 格式,如何断言?

只检查响应体中的一些关键的键或者值

(2) 场景 2:返回的 json 格式的数据是变化的,如何断言?

这种情况下,使用 json 模式来检查响应体的结构和约束,而不是具体的内容。

(3) 场景 3:如果返回的 json 格式的 Body 数据是动态变化的怎么办?

来源:测试玩家勇哥内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯