postman之pm对象详解

Posted 小情绪1999

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了postman之pm对象详解相关的知识,希望对你有一定的参考价值。

一、pm.info对象

方法 描述 结果类型
pm.info.eventName 输出脚本是在哪个脚本栏中执行的 字符串类型
pm.info.iteration 输出当前运行迭代的次数(从0开始,请求第几次执行) 数值类型
pm.info.iterationCount 输出计划运行的迭代总数(每个请求迭代执行的次数) 数值类型
pm.info.requestName  返回请求名 字符串类型
pm.info.requestId  返回请求ID  字符串类型

  例:console.log(pm.info.eventName);:用于返回输出脚本是在哪个脚本栏中执行的(可以写法Tests栏下也可以写在Pre-request Script栏下)

  在console输出脚本执行栏的名称

  

二、pm.sendRequest对象

  pm.sendRequest对象允许异步发送HTTP/HTTPS请求。简单的来说就是:用户有一个繁重的计算任务或需要发送多个请求,那么现在可以在后台执行该逻辑。用户可以指定一个回调函数,并在底层操作完成时得到通知,而不是等待调用来完成(因为这会阻碍任何下一个请求)

  pm.sendRequest()方法接收两个参数,一个URL(请求信息)和一个函数;函数又接收两个参数:第一个URL参数的响应(错误和正确响应),Postman内部将第一个URL参数的响应赋值给两个变量err,res(即err,res就是脚本请求的错误响应或正确响应,如果要对脚本请求的响应进行处理的话,就可以使用err,res来处理)

  1、发送get请求

  pm.sendRequest("https://postman-echo.com/get?name=mouse",function(err,res)

       if (err)

               console.log(err);

       else

          name = res.json()["args"]["name"];//name = res.json().args.name;也可以这么写

          pm.environment.set("name",name); 

           

  );

  

 实例:

  • 查询接口返回的body信息
 
 
     "msg": "操作成功",
 
     "code": 200,
 
     "data": 
 
         "records": [
 
             
 
                 "id": "ff0a06e41e2043b798d445afb3243d5d",
 
                 "creator": "666666",
 
                 "creatorName": "系统管理员",
 
                 "createTime": "2021-09-14 14:33:32",
 
                 "modifiedTime": "2021-09-15 14:56:27",
 
                 "status": 1,
 
                 "title": "测试12",
 
                 "intro": "11",
 
                 "content": null,
 
                 "link": 1,
 
                 "url": "www.baidu.com",
 
                 "time": "2021-09-14",
 
                 "isTop": 0,
 
                 "viewCount": 0
 
             ,
 
             
 
                 "id": "26bafa7b390e467da6b8b9831efb5f34",
 
                 "creator": "666666",
 
                 "creatorName": "系统管理员",
 
                 "createTime": "2021-09-13 15:00:23",
 
                 "modifiedTime": "2021-09-15 14:56:32",
 
                 "status": 1,
 
                 "title": "测试21",
 
                 "intro": "11",
 
                 "content": null,
 
                 "link": 1,
 
                 "url": "www.baidu.com",
 
                 "time": "2021-09-14",
 
                 "isTop": 0,
 
                 "viewCount": 0
 
             ,
 
             
 
                 "id": "b6420cb7bc804cd883d2bc7bd2628bf3",
 
                 "creator": "666666",
 
                 "creatorName": "系统管理员",
 
                 "createTime": "2021-09-14 09:59:35",
 
                 "modifiedTime": "2021-09-15 14:56:37",
 
                 "status": 1,
 
                 "title": "测试22",
 
                 "intro": "11",
 
                 "content": null,
 
                 "link": 1,
 
                 "url": "www.baidu.com",
 
                 "time": "2021-09-14",
 
                 "isTop": 0,
 
                 "viewCount": 0
 
             
 
         ],
 
         "total": 3,
 
         "size": 10,
 
         "current": 1,
 
         "pages": 1
 
     
 
 
  • 在编辑新闻接口中,写断言脚本:执行查询新闻接口,修改查询到的第一个新闻的名称

  //http://192.168.10.206:8099/rest/news/list.page?sortType=1&title=%E6%B5%8B%E8%AF%95&pageNum=1&pageSize=10&status=1是查询的接口,返回新闻名称包含“测试”的数据

  //将查询的响应赋值给function函数的参数,没报错就执行else语句

pm.sendRequest("http://192.168.10.206:8099/rest/news/list.page?sortType=1&title=%E6%B5%8B%E8%AF%95&pageNum=1&pageSize=10&status=1",function(err,res)
    if(err)
        console.log(err);
    else
        id=res.json().data.records[0].id;  //这句话是获取查询新闻接口返回的body->data->records数据的第一个元素的id值
        pm.environment.set("id",id);  //将获取到的id的值设置为全局变量,方便在编辑新闻接口的body中使用
    
)
console.log(pm.environment.get("id"));  //输出设置的全局变量的值,检验是否正确

  //修改查询到的第一个新闻名称

  在body中使用全局变量:id

  

  这样在执行编辑新闻接口的时候,就会执行查询接口,将查询接口返回的信息作为编辑接口的参数,实现接口之间的调用

  执行结果:

  

   

   2、发送get请求并断言

pm.sendRequest("https://postman-echo.com/get?name=mouse",function(err,res)

    if (err)

        console.log(err);

    else

   //pm.test只能在test选项卡下面使用

   //断言

           pm.test("测试描述",function()

             pm.expect(err).to.equal(null);  //错误信息为空

             pm.expect(res).to.have.property("code",200);  //返回信息中,code值为200

             pm.expect(res).to.have.property("status","OK");

        );

    

);

 三、pm.global对象

  global:全局变量,在postman中引用变量的形式必须为Variables的形式进行引用;

  environment:环境变量

方法  描述
pm.globals.has("variableName") 验证是否存在该全局变量
pm.globals.get("variableName")  获取执行全局变量的值
pm.globals.set("variableName","variableValue")  设置全局变量
pm.globals.unset("variableName")  清除指定的全局变量
pm.globals.clear() 清除全部全局变量
pm.globals.toObject() 将全局变量以一个对象的方式全部输出

  

 四、pm.environment对象

方法 描述
pm.environment.has("variableName") 检测环境变量是否包含某个变量
pm.environment.get("variableName") 获取环境变量中的某个值
pm.environment.set("variableName","variableValue") 为某个环境变量设置值
pm.environment.unset("variableName") 清除某个环境变量
pm.environment.clear() 清除全部环境变量
pm.environment.toObject()  将环境变量以一个对象的方式全部输出

五、pm.variables对象

  1、在Postman中,所有的变量都符合特定的层次结构。在当前迭代中定义的所有变量优先于当前环境中定义的变量,这些变量覆盖全局范围内定义的变量,即迭代数据<环境变量<全局变量

  2、调用:pm.variables.get("variableName") 获取变量中的某个值,全局变量和环境变量都可以获取到

六、pm.request对象

  1、pm.request对象用来获取请求对象。但request中的参数只可读

  2、在"Pre-request Script"选项卡下,pm.request对象表示:将要发送的请求

  3、在"Tests"选项卡下,pm.request对象表示:上一个发送的请求(与在"Pre-request Script"选项卡下感觉没什么区别:都是同一个请求)

  4、pm.request对象包含以下方法可供调用

方法 描述
pm.request  获取当前发起请求的全部headers
pm.request.url 获取当前发起请求的url
pm.request.headers  数组的方式返回当前请求中的header信息

  

 七、pm.response对象

  pm.response对象包含响应有关的所有信息

方法 描述
pm.response.code 获取当前请求返回的状态码如200,404,500等
pm.response.reason()  当前请求成功返回OK
pm.response.headers 以数组的形式返回当前请求成功后的response的headers
pm.response.responseTime 获取执行此次请求的时间单位为ms
pm.response.text() 以文本的方式获取响应里面的body的内容
pm.response.json()  将body里面的内容解析为一个json对象
  console.log(pm.response);   //请求响应体
  console.log(pm.response.id);    //返回的响应体中的id
  console.log(pm.response.code);  //请求返回的状态码
  console.log(pm.response.reason());  //当请求成功返回ok
  console.log(pm.response.headers);   //以数组的形式返回当前请求成功后的response的headers
  console.log(pm.response.responseTime);   //获取请求的时间
  console.log(pm.response.text());    //以文本的方式获取响应的body的内容
  console.log(pm.response.json());    //将body里面的内容解析为一个json对象
  console.log(pm.response.json().code);
  //获取响应头的某个具体的值
  console.log(postman.getResponseHeader("Content-Type"));
  

   响应内容格式相互转换

  • JSON.parse():从一个字符串中解析出json对象
  • JSON.stringify():从一个对象中解析出字符串
  console.log(JSON.parse(pm.response.text()));    //从一个字符串解析出json格式
  console.log(JSON.stringify(pm.response.json()));    //从json格式转换为字符串

八、pm.cookies对象

方法 描述
pm.cookies.has("cookieName") 检查请求的url站点是否存在cookie,返回值Boolean
pm.cookies.get("cookieName") 获取存在的cookie的值
pm.cookies.toObject 将请求的url站点中获取到的所有存在的cookie输出到一个对象中去
  console.log(pm.cookies.has("cid"));     //判断cookies是否存在cid
  console.log(pm.cookies.get("SESSION"));     //获取cookies
  console.log(pm.cookies.toObject());       //将所有的cookies存在一个对象中
  //在该请求域下以对象的形式返回Cookies的键值对
  console.log(pm.cookies.toObject().cid);
 
  

 

 九、pm.iterationData对象

方法 描述
pm.iterationData.get("variable")  获取指定变量的值
pm.iterationData.toObject  将数据文件集转化成一个对象

十、pm.response.to.be对象

  也可以用pm.response.not.be对象
方法 描述
pm.response.to.be.info  检查响应码是否为1XX,如果是则断言为真,否则为假
pm.response.to.be.success  检查响应码是否为2XX,如果是则断言为真,否则为假
pm.response.to.be.redirection  检查响应码是否为3XX,如果是则断言为真,否则为假
pm.response.to.be.clientError  检查响应码是否为4XX,如果是则断言为真,否则为假
pm.response.to.be.serverError  检查响应码是否为5XX,如果是则断言为真,否则为假    
pm.response.to.be.error  检查响应码是否为4XX或5XX,如果是则断言为真,否则为假
pm.response.to.be.ok 检查响应码是否为200,如果是则断言为真,否则为假
pm.response.to.be.accepted 检查响应码是否为202,如果是则断言为真,否则为假
pm.response.to.be.badRequest 检查响应码是否为400,如果是则断言为真,否则为假
pm.response.to.be.unauthorised 检查响应码是否为401,如果是则断言为真,否则为假
pm.response.to.be.forbidden  检查响应码是否为403,如果是则断言为真,否则为假
pm.response.to.be.notFound 检查响应码是否为404,如果是则断言为真,否则为假
pm.response.to.be.rateLimited  检查响应码是否为429,如果是则断言为真,否则为假

十一、pm.response.to.have

方法  描述  
pm.response.to.have.status(code:Number)  根据状态码判断响应是否成功  
pm.test("code = 200",function()
    pm.response.to.have.status(200);//检查响应状态码是否是200
);
pm.response.to.have.status(reason:String) 根据返回的状态值判断响应是否成功  
pm.test("status = OK",function()
    pm.response.to.have.status("OK");//检查status是否是ok
);
pm.response.to.have.header(key:String) 根据response中的headers的key判断响应是否成功  
pm.test("key = Date",function()
    pm.response.to.have.header("Date");//根据response headers的key,判断响应是否成功,也就是key中是否有我们所写的脚本的值
);
pm.response.to.have.header(key:String, optionalValue:String) 对response中的header中的key和value校验,判断响应是否成功  
pm.test("header-Connection = keep-alive",function()
    pm.response.to.have.header("Connection","keep-alive");
);
pm.response.to.have.body() 获取响应返回的资源  
pm.response.to.have.body(optionalValue:String) 对响应返回的body内容校验,判断响应是否成功
pm.test("body is msg:操作成功,code:200",function()
    pm.response.to.have.body(\'"msg":"操作成功","code":200\');
);
pm.response.to.have.body(optionalValue:RegExp)  对响应返回的body进行正则校验,判断响应是否成功  
pm.response.to.have.body(optionalValue:RegExp)  判断响应返回的body是否是json,判断响应是否成功  
pm.response.to.have.jsonBody(optionalExpectEqual:Object) 判断响应返回的body是否是json,并对json内容进行校验
pm.test("body not have error",function()
    pm.response.to.not.have.jsonBody(\'error\');
)

十二、test对象

方法 描述
pm.test("testName", specFunction) 测试方法,第二个方法中填写测试内容
pm.expect(assertion:*) 断言

  pm.test()方法用于创建一个测试(告诉Postman这是测试)。其接受两个参数,一个是测试的相关描述,一个是一个函数:用于执行断言相关的语句

  pm.expect是一个通用的断言函数。这个是ChaiJS expect BDD库,使用这个库可以编写可读性很高的测试 。pm.expect用于处理来自响应或变量的数据断言

十三、测试脚本

      

脚本 描述
pm.test("响应中存在:操作成功",function()
    pm.expect(pm.response.text()).to.include("操作成功");
);
//检查response body中是否包含某个string
tests["测试响应是否含有某个字符串"]=responseBody.has("操作成功");
//检查response body中是否包含某个string
var data = JSON.parse(responseBody);    //将返回的body转换为json格式
tests["msg = 操作成功"]=data.msg === "操作成功";
//监测json中的某个值是否等于预期的值

 十四、request.data获取请求头

方法 描述
request.data 用于获取请求头的表单内容    
request.headers  用于获取请求头
request.method  用于获取请求的请求方法
request.url  用于获取请求的URL
  实例:
 
  
  console.log(postman.getResponseHeader("Server"));//获取响应头
  //console.log(postman.getRequestHeader("Content-Type"));postman.getRequestHeader is not a function没有这个函数
  console.log(request.data);  //获取请求头的表单内容
  console.log(request.headers);   //获取请求头的内容
  console.log(request.headers.host);  //获取请求头的某个字段数据
  console.log(request.method);    //获取请求的请求方法
  console.log(request.url);   //获取请求的url
  

以上是关于postman之pm对象详解的主要内容,如果未能解决你的问题,请参考以下文章

Postman pm 对象 - 测试相关功能

postman——集合——执行集合——测试脚本——pm对象简单示例02

postman——集合——执行集合——测试脚本——pm对象简单示例01

postman断言之常用函数

Postman / pm api sendRequest 命令:如何等到响应返回后再填充变量?

Postman接口测试之当多个接口都需要使用自定义的函数时解决方案