postman做接口自动化

参照:https://zhuanlan.zhihu.com/p/401385193

综述:

postman可以将多个接口设置在集合中,通过设置变量(共3类)、调用or获取变量,达到自动化的目的。

7. 变量(全局/集合/环境)

变量可以使我们在请求或脚本中存储和重复使用其值,通过将值保存在变量中,可以在集合,环境或请求中引用。

对我们做接口测试来说,又是一个非常重要的功能 。

在postman常用的三种变量分别是全局变量,环境变量,集合变量 。

  • 全局变量:一旦申明了全局变量,全局有效,也就是说postman中的任何集合,任何请求中都可以使用这个变量。它的作用域是最大的 。
  • 环境变量:要申明环境变量,首先的创建环境,然后在环境中才能创建变量 。如果要想使用环境变量,必须先选择(导入)这个环境,这样就可以使用这个环境下的变量了 。需要说明的是环境也可以创建多个 。每个环境下又可以有多个变量 。
  • 集合变量:集合变量是针对集合的,也就是说申明的变量必须基于某个集合,它的使用范围也只是针对这个集合有效 。

其中,他们的作用域范围依次从大到小:全局变量>集合变量>环境变量 。当在几个不同的范围内都申明了相同的变量时,则会优先使用范围最小的变量使。

想要使用变量中的值只需俩个步骤,分别是定义变量和获取变量 。

  1. 定义变量(设置变量)
  2. 获取变量(访问变量)

定义变量

定义全局变量和环境变量,点击右上角的小齿轮,弹出如下界面,就可以根据需求定义全局变量或者环境变量了。

已经定义的全局变量和环境变量,可以进行快速查看:

定义集合变量

选择一个集合,打开查看更多动作(...)菜单,然后点击编辑 。选择“变量”选项卡以编辑或添加到集合变量。

定义变量除了以上方式,还有另外一种方式 。但是这种方式在不同的位置定义,编写不一样。

在URL,Params , Authorization , Headers , Body中定义:

1. 手工方式创建一个空的变量名

2. 在以上的位置把想要的值选中右击,选中Set:环境|全局 ,选中一个变量名,点击后就会保存到这个变量中

在Tests,Pre-requests Script:

  • 定义全局变量:pm.collectionVariables.set("变量名",变量值)
  • 定义环境变量:pm.environment.set("变量名",变量值)
  • 定义集合变量:pm.variables.set("变量名",变量值)

获取变量

定义好变量,接下来就可以使用变量了 。需要注意的是,在不同的位置获取变量,编写的规则也是不一样的 。

如果在请求参数中获取变量,无论是获取全局变量,还是环境变量,还是集合变量,获取的方式都是一样的编写规则:{{变量名}} 。

  • 请求参数指的是:URL,Params , Authorization , Headers , Body

如果是在编写代码的位置(Tests,Pre-requests Script)获取变量,获取不同类型的变量,编写的代码都不相同,具体如下:

  • 获取环境变量:pm.environment.get(‘变量名’)
  • 获取全局变量:pm.globals.get('变量名')
  • 获取集合变量:pm.pm.collectionVariables.get.get('变量名')

变量的使用场景非常广泛,比如我们后面要提到的接口关联,请求前置脚本都会使用到变量 。

8. 请求前置脚本

前置脚本其实就是在Pre-requests Script中编写的JavaScript脚本,想要了解这个功能,需要先了解它的执行顺序。那么下面就来看下它的执行顺序 。

可以看出,一个请求在发送之前,会先去执行Pre Request Script(前置脚本)中的代码 。那么这个功能在实际工作中有什么作用呢 ?

主要场景:一般情况下,在发送请求前需要对接口的数据做进一步处理,就都可以使用这个功能,比如说,登录接口的密码,在发送前需要做加密处理,那么就可以在前置脚本中做加密处理,再比如说,有的接口的输入参数有一些随机数,每请求一次接口参数值都会发送变化,就可以在前置脚本中编写生成随机数的代码 。

总体来说,就是在请求接口之前对我们的请求数据进行进一步加工处理的都可以使用前置脚本这个功能。

接下来通过一个案例来看下该功能是如何使用 ?

案例:

  • 请求的登录接口URL,参数t的值要求的规则是每次请求都必须是一个随机数。
  • 接口地址:http://localhost/index.php?m=Home&c=User&a=do_login&t=0.7102045930338428

实现步骤:

  1. 在前置脚本中编写生成随机数
  2. 将这个值保存成环境变量
  3. 将参数t的值替换成环境变量的值 。

总之,这个前置脚本对我们做接口测试也非常有用,对一些复杂的场景,都可以使用前置脚本进行处理后再请求接口 。

9. 接口关联

在我们测试的接口中,经常出现这种情况 。上一个接口的返回数据是下一个接口的输入参数 ,那么这俩个接口就产生了关联。这种关联在做接口测试时非常常见,那么在postman中,如何实现这种关联关系呢 ?

实现思路:

  1. 提取上一个接口的返回数据值,
  2. 将这个数据值保存到环境变量或全局变量中
  3. 在下一个接口获取环境变量或全局变量

案例:

  • 用户上传头像功能,需要用户先上传一张图片,然后会自动预览 。那么在这个过程中,会调用到俩个接口 ,第一个上传头像接口,第二个预览图像接口 。
  • 其中调用上传头像接口成功后会返回如下信息:
{  
    "url": "/public/upload/user//head_pic//ba51d1c2f7f7b98dfb5cad90846e2d79.jpg",  
    "title": "banner",  
    "original": "",  
    "state": "SUCCESS",  
    "path": "images"  
}

而图像预览接口URL为:

http://localhost/public/upload/user//head_pic//ba51d1c2f7f7b98dfb5cad90846e2d79.jpg 。可以看出这个接口的URL后半部分其实是上一个接口返回的url的值 。那么这俩个接口就产生了关联。那么在postman 可以通过以下三步完成这俩个接口的关联实现 。

实现步骤:

  1. 获取上传头像接口返回url的值
  2. 将这个值保存成全局变量(环境变量也可以)
  3. 在图像预览中使用全局变量

可以看出,接口的关联的解决方案都是用的是变量中的知识,也就是说只要你明确了要提取的值,后面就是保存该值,然后在其他接口使用该值就可以了。

10.常见返回值获取

在做接口测试时,请求接口返回的数据都是很复杂的json数据,有着多层嵌套,这样的数据层级在postman怎么获取呢 ?

案例1:多层json嵌套, 获取user_id的值

{  
    "code": 0,  
    "message": "请求成功!",  
    "data": {  
        "user_id": "1252163151781167104"  
    }  
}

//获取json体数据  
var jsonData = pm.response.json()  
// 获取user_id的值,通过.获取  
var user_id = jsonData.data.user_id

案例2:json中存在列表,获取points中的第二个元素

{  
    "code": 0,  
    "message": "请求成功!",  
    "data": {  
        "roles": {  
            "api": [  
                "API-USER-DELETE"  
            ],  
            "points": [  
                "point-user-delete",  
                "POINT-USER-UPDATE",  
                "POINT-USER-ADD"  
            ]  
        },  
        "authCache": null  
    }  
}

//获取json体数据  
var jsonData = pm.response.json()  
// 获取user_id的值,通过下标获取列表中某个元素  
var user_id = jsonData.data.roles.points[1]

案例3:列表中取最后一个元素

{  
    "code": 0,  
    "message": "请求成功!",  
    "data": {  
        "total": 24,  
        "rows": [  
             
            {  
                "id": "1066370498633486336",  
                "mobile": "15812340003",  
                "username": "zbz"  
            },  
            {  
                "id": "1071632760222810112",  
                "mobile": "16612094236",  
                "username": "llx"  
            },  
            ...  
            {  
                "id": "1075383133106425856",  
                "mobile": "13523679872",  
                "username": "test001",  
         
            },

//获取json体数据  
var jsonData = pm.response.json()  
// 获取id的值,通过slice(-1)获取列表中最后一个元素。  
var id = jsonData.data.rows.slice(-1)[0]
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值