前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Postman变量与断言

Postman变量与断言

作者头像
清风穆云
发布2021-08-09 11:19:11
8370
发布2021-08-09 11:19:11
举报
文章被收录于专栏:QA一隅

问题思考

在开发不同阶段可能存在不同的环境,比如测试环境和生产环境。

测试环境API如下:

代码语言:javascript
复制
https://dev.postman.com/get
https://dev.postman.com/post
https://dev.postman.com/put

生产环境API如下:

代码语言:javascript
复制
https://postman-echo.com/get
https://postman-echo.com/post
https://postman-echo.com/put

在这么情况下,按照常规思路要么你需要维护两套环境的API,要么每次都手动一个个去修改URL,不管哪种选择都比较麻烦且低效,那么有没有比较的好的方法来解决这个问题呢?

Postman变量类型

通过比较我们可以发现,以上两组API主要是除了host不同之外其他都一样,其实把Host用变量替换,这样就可以灵活切换环境。

Postman提供了变量设置,有4种变量类型。

  • 本地变量(LocalVariable )
  • 全局变量(Global Variable)
  • 环境变量(Environment Variable)
  • 数据变量(Data Variable)
环境变量

环境变量指在不同环境,同一个变量值随着环境不同而变化,比如我们上面举例场景就可以使用环境变量,当在测试环境时,host值为: dev.postman.com ,当切换到生产环境时,host值变为:postman-echo.com 。

环境变量设置:在postman界面点击右上角眼睛图标,即可开始设置环境变量和全局变量。环境变量设置过程如下图所示:我们可以设置两种环境 devrelease,dev是开发测试环境; release是正式的生产环境。host环境变量,根据不同的环境值不一样。

变量引用格式为{{varname}},如下图所示:

详细过程见视频演示。

本地变量

本地变量主要是针对单个URL请求设置的变量,作用域只是局限在请求范围内。如请求URL如下,设置两个本地变量(user,passwd)作为参数。请求方式为POST

代码语言:javascript
复制
https://postman-echo.com/post

从上图中我们可以看到变量设置的格式为{{variable_name}}

变量设置好之后需要赋值,在Pre-request-Script里面编写如下代码:

代码语言:javascript
复制
pm.variables.set("user","51zxw");
pm.variables.set("passwd","66666");

点击send执行之后的返回值如下,可以看到我们定义的变量已经发送。

代码语言:javascript
复制
{
    "args": {},
    "data": "",
    "files": {},
    "form": {
        "user": "51zxw",
        "passwd": "6666"
    },
    "headers": {
        "host": "postman-echo.com",
        "content-length": "24",
        "accept": "*/*",
        "accept-encoding": "gzip, deflate",
        "cache-control": "no-cache",
        "content-type": "application/x-www-form-urlencoded",
        "cookie": "sails.sid=s%3ARNfROdcmaqrU3ZqglMdbnqU4tI3_BHTE.WUBtzhacnJT44oLzytikWtVmg7wfkD7tDNb%2FPtVBRnM",
        "postman-token": "9367ea9b-b349-4bc4-85d4-5638b5ff30e1",
        "user-agent": "PostmanRuntime/7.1.5",
        "x-forwarded-port": "443",
        "x-forwarded-proto": "https"
    },
    "json": {
        "user": "sutune",
        "passwd": "12345"
    },
    "url": "https://postman-echo.com/post"
}
全局变量

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

全局变量设置有两种方式:

  • 点击界面里设置
  • 在脚本里设置

界面设置

点击眼睛图标后,在Global选项菜单点击Edit菜单即可设置全局变量,如下图所示。全局变量的引用格式和环境变量一样,

注意:当环境变量和全局变量名称一样时,切换到某个环境时,环境变量会覆盖全局变量。

脚本设置

使用如下脚本可以设置全局变量:variable_key表示变量名称, variable_value 表示变量值。

代码语言:javascript
复制
pm.globals.set("variable_key", "variable_value");

实践案例

在实际接口测试过程中,接口经常会有关联。比如需要取上一个接口的某个返回值,然后作为参数传递到下一个接口作为参数。假设我们要获取A接口返回的userid值作为B接口的请求参数。

A接口请求URL如下:

代码语言:javascript
复制

https://postman-echo.com/post

  • 请求方式为Post
  • 请求参数:userid(这里自己定义,接口会返回对应的id值)

返回值

代码语言:javascript
复制
{
    "args": {},
    "data": "",
    "files": {},
    "form": {
        "userid": "123456"
    },
    "headers": {
        "host": "postman-echo.com",
        "content-length": "13",
        "accept": "*/*",
        "accept-encoding": "gzip, deflate",
        "cache-control": "no-cache",
        "content-type": "application/x-www-form-urlencoded",
        "cookie": "sails.sid=s%3AxZeg8NHeQGGFv2AUFblww7xF5HeP-4pi.sYxwR13VMFrUqvpJ%2Be8scGNnjgQAdOP3EeL6DSZqNQo",
        "postman-token": "7890d763-2bb1-4e88-aa1c-ad0bfc7db9b1",
        "user-agent": "PostmanRuntime/7.1.5",
        "x-forwarded-port": "443",
        "x-forwarded-proto": "https"
    },
    "json": {
        "userid": "123456"
    },
    "url": "https://postman-echo.com/post"
}

根据返回值我们需要从返回值中提取userid值。在Test标签栏下编写如下脚本获取userid

代码语言:javascript
复制
//获取返回的响应值然后转化为json格式
var jsonData = pm.response.json();

//获取返回的userid值
userid=jsonData.json['userid'];

//控制台日志查看
console.log(userid);

//将获取的变量设置全局变量
pm.globals.set("userid", userid);

B接口请求URL如下:请求方式为GET

代码语言:javascript
复制
postman-echo.com/get?userid={{userid}}

先执行A接口的,然后在执行B接口,此时B接口通过全局变量userid可以获得A接口的返回值。

数据变量

数据变量是通过导入外部数据文件(json文件或者csv文件),来获取变量数据。我们可以创建一个如下内容的json文件:

data.json

代码语言:javascript
复制
[{
  "username": "jack",
  "passwd": "6666"
},{
  "username": "Bob",
  "passwd": "5555"
}, {
 "username": "Marry",
  "passwd": "8888"
}]

稍后我们会结合运行Collection来讲解如何导入该数据文件。

断言

简介

一般来说执行完测试,我们需要对测试结果来进行校验,判断结果是是否符合我们的预期,也就是断言。在接口测试中一般会根据响应状态码或者响应返回的数据来进行断言。

Postman提供一个测试沙箱(Postman Sandbox) 测试沙箱是一个JavaScript执行环境,可以通过JS脚本来编写pre-request Script和test Script。

  • pre-request Script(预置脚本)可以用来修改一些默认参数,在请求发送之前执行。有点类似于unittest里面的setUp()方法。
  • test Script(测试脚本)当接收到响应之后,再执行测试脚本。

案例

接口请求URL如下:请求方式为POST

代码语言:javascript
复制
postman-echo.com/post

断言规则

  • 响应状态码:200
  • 响应内容:返回的user参数值与定义的一致
  • 响应时间:小于0.5s

测试脚本

pre-request Script定义变量user

代码语言:javascript
复制
pm.variables.set("user",'zxw');

Test栏下面编写如下脚本

代码语言:javascript
复制
//判断响应状态码
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

//获取发送的参数值
username=pm.variables.get("user");
console.log(username);

//校验响应内容是否和请求的一致
pm.test("Check username", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.json['user']).to.eql(username);
});

//检测响应时间是否小于0.5s
pm.test("Response time is less than 500ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(500);
});

断言结果

扩展资料:Postman测试脚本官方文档

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 QA一隅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题思考
  • Postman变量类型
    • 环境变量
      • 本地变量
        • 全局变量
          • 数据变量
          • 断言
            • 简介
              • 案例
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档