Apifox环境变量

临时变量/全局变量

有两个请求,第一个请求如下:
在这里插入图片描述
如上图,是一个post请求,有一个id参数,该参数值在前置操作中赋值,如下:
在这里插入图片描述

发请请求,结果如下:
在这里插入图片描述
如上图,可以看到响应结果中正确的接收到了id参数。

然后我们在创建一个GET请求,看在另一个请求中是否可以读取到该id变量,如下:
在这里插入图片描述
如图所示,并没有访问到之前设置的值,这里看到乱码,是因为这里显示的是进行了urlenocde编码的,实际它是使用的是{{id}}字符串,通过响应结果可知,如下:
在这里插入图片描述

这说明一个请求设置的临时变量只能自己读取使用,另一个请求不能使用,只能在单个请求中单次使用,比如第一次请求时通过自定义脚本为临时变量赋值了,第一次请求时请求参数可以读取到该变量,第二次请求时,我们把自定义脚本删除,再次请求,这时就读取不到该变量了。

官方文档对临时变量的说明:

临时变量仅在单个接口或测试场景的运行期间有效,运行结束后会消失。它适用于临时覆盖其他类型的变量,并且不会在执行后保留值。

要想变量在多个请求中都可以共享使用,可以使用全局变量,点击右上角的管理环境按钮,如下图:
在这里插入图片描述
在这里插入图片描述
如上图,我们选择了项目内共享的全局变量,并添加了一个名为id的变量,且设置了远程值为56789,远程值的作用是,该值会与 Apifox 的服务器同步,并在你分享该参数时与团队成员共享。

此时我们在请求中使用该id,如下:
在这里插入图片描述
如上图,发现实际请求中id值为空,这是因为全局变量只使用本地值,但是我们并没有在全局变量中填入本地值,如果在本地值填入的值和远程值一样,这不就有点重复了吗?所以可以设置本地值使用远程值,点击 “跟随远程值” 按钮,如下:
在这里插入图片描述
点击后效果如下:
在这里插入图片描述
如上图所示,它有文字提示现在本地值是跟随远程值的。此时再发送请求就正常了,如下:
在这里插入图片描述
我们也可以给本地值设置一个不一样的值,这样就是请求时会使用本地值,而不会使用远程值。我们的本地值并不会同步到团队的其它成员中,所以其它人如果没设置本地值,他想使用远程值,则需要设置跟随远程值,以便使用远程值。

现在我们是在设置中写死了全局变量的值,也可以在代码中修改它的值,比如在自定义脚本中:

pm.globals.set('id', '123456')

也有对应的获取函数:

var id= pm.globals.get('id');

如果说一个参数没有默认值,则远程值和本地值都可以不填,后期通过请求服务器得到值后再用代码给全局变量赋值,注意,假如调用pm.globals.set('id', '123456')其实就是给本地值赋值,当你打开设置界面时会看到它的本地值变成了123456,当我们在设置中把本地值删除时,也相当于你调用代码把值设置为空一样的效果。

所以,简单总结全局变量,它其实就是持久化保存到本地了,所以你关闭软件再持打开,该变量还是存在的,所以它和我们平时写代码时的全局变量还不太一样,一般写代码时的全局变量是内存中的,只要程序一关闭就没了。

另外,在使用全局变量时,如果没有远程值,而且该变量的值不是写死的,要通过代码去设置,比如一个全局使用的access_token,在登录后服务器返回该值,则我们直接在代码中设置全局变量即可,不需要提前到设置中去创建该变量,也就是说,当在代码中调用pm.globals.set('id', '123456')时,如果设置里面没有id这个全局变量,则Apifox就会自动帮我们创建一个。 如果你有一个固定值,不需要用代码去设置,这种情况才需要到设置里手动设置变量。

全局参数

比如登录后会得到一个access_token,其它的请求都需要带上这个请求参数,有的会要求把该参数放到请求头,有的要求放到查询参数上。虽然我们可以把access_token保存到全局变量,但是每个请求都要手动添加使用这个变量,也是个无聊的重复操作,这种情况可以使用全局参数让Apifox自动帮我们添加这个参数,示例如下:

1、添加全局变量
在这里插入图片描述
如果你的参数值是一个固定值,这里就可以填入一个固定的本地值了,由于我的access_token是登录后服务器返回的,不是固定的,所以我这里就没有填,后期通过解析服务器返回值后用代码设置进来。

2、添加全局参数:全局参数的作用就是给项目中所有的请求自动添加的参数,参数可以是HeaderCookieQueryBody,我里我就以在HeaderQuery中添加access_token参数为例,如下:
在这里插入图片描述
在这里插入图片描述
发送一个请求,效果如下:
在这里插入图片描述
可以看到查询参数和请求头中都有该参数了,只是值为空。

有些请求可能并不需要这个access_token参数,因为这个参数代表登录后才能访问的接口,有些接口不登录就能访问的,这些接口就不需要这些参数,比如检查更新接口,在对应的参数中,可以看到全局参数,我们可以单独取消它,示例如下:
在这里插入图片描述
在这里插入图片描述
如上图所示,每个请求默认都会带上全局参数,如果我们确定某个请求不需要此参数,则把参数前面的勾取消即可。

解析响应结果并保存到全局变量

从响应结果中获取需要的数据,并保存到全局变量中,以便在别的请求中可以使用该数据。比如登录成功后有access_token,别的请求都需要用到此参数,还有一个userid,有的请求可能用到,有的请求用不到,只要是有可能用到的,我们都可以解析出来,保存到全局变量中,这样就可以在别的请求中使用了,假设登录成功后返回的响应数据是一个json结构,内容如下:

{
    "success": true,
    "code": "200",
    "msg": "登录成功",
    "obj": {
        "token": {
            "access_token": "cf2db89f-3d5c-4c74-8ea3-01e52120a224",
            "userid": "604"
        }
    }
}

添加后置操作 > 提取变量,如下:
在这里插入图片描述
在这里插入图片描述
这里的难点在于JSONPath表达式:$.obj.token.access_token,解释别的json就照我这个表达式的规律去修改就行了。这里指定了变量名称为 access_token,且指定该变量的类型为 全局变量,在解析数据时,Apifox就会自动帮我们创建一个全局变量access_token,并把解析到的值保存到access_token本地值中。所以我们并不需要在提前去全局设置那里声明全局变量,Apifox会自动帮我们生成,当然,我们提前自己设置了也没关系,反正设置有了就可以直接使用,没设置有Apifox就会帮我们生成一个。
还有一个userid参数需要解析,操作一样:
在这里插入图片描述
OK,只要登录请求一执行,access_token和userid就会保存到全局变量中,当需要使用的时候就访问该全局变量即可,前面我们已经在全局参数中使用了access_token变量。像userid只在某些请求上用到了,那就没必要添加到全局参数中了,在什么请求用到就单独在什么请求中添加即可,比如获取用户信息:
在这里插入图片描述
如上图,我们在获取用户信息请求的Query参数中添加了userid参数,并通过{{userid}}来使用全局变量userid中的值,而全局参数access_token会自动添加。

临时变量/全局变量/环境变量比较

如果临时变量和全局变量重名会怎样?实验如下:
在这里插入图片描述
如上图所示,请求中有一个name参数,参数值使用name变量中的值,我们在前置操作中给该变量赋值,如下:
在这里插入图片描述

执行请求,效果如下:
在这里插入图片描述

可以看到,请求中成功访问到了我们设置的变量值,该变量是临时变量,只有在请求期间生效,比如你在另一个请求中使用{{name}}是访问不到的。就算你在相同的请求中,如果你把自定义脚本删除,再访问该变量也是访问不到的,因为该变量是临时的。

如果我们又设置有同名的全局变量会怎样?示例如下:
在这里插入图片描述

注:我们并不需要到设置中去设置全局变量,只要代码中设置了,该变量就会自动保存到设置里面的全局变量里面去的。执行该请求,发现使用的name值还是Lilei,这也很容易理解,就我们平时写代码时一样,如果又有全局变量又有局部变量,使用时默认访问的是局部变量,如果我们把临时变量的代码删除,如下:
在这里插入图片描述
如上所示,这时就使用到了全局变量中的值了。

还有一个环境变量,它和全局变量很像,都是持久化保存到本地的,所以可以在不同的请求中共享使用,唯一不同的时,环境变量的作用范围只在指定的环境中生效。

当有同名的临时变量、环境变量、全局变量时,优先使用临时变量,然后是环境变量,然后是全局变量,示例如下:

在这里插入图片描述
如上所示,可以看到最终使用的变量是临时变量中的值,如果删除临时变量,则会使用环境变量中的值,如果再删除环境变量才会使用到全局变量的值。

需要注意的时,删除临时变量只要代码上删除即可,而环境变量和全局变量是持久化保存的,即使代码删除了,但是变量已经持久化到本地了,还需要到设置中一并删除才可以。pm.environment.set('name', 'lily') 这个代码创建了一个环境变量并设置值为'lily‘,环境变量只对指定环境生效,如上图,我们选择了“正式环境”,所以运行该请求时,环境变量name就会创建在“正式环境”中,别的环境中就不会有这个变量,假设你此时选择测试环境,然后再运行一次请求,则此时在测试环境中也会有name变量了。

一般来说,环境变量是为了在不同环境有不同的值而设置的,很少需要在脚本里面通过代码赋值,几乎都是在设置里面直接设置不同的值,如下:
在这里插入图片描述
根据需要分别针对不同的环境,设置相同的变量名,但是设置不同的本地值。

我的另一篇关于Apifox的文章:使用Apifox动态生成请求参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

android_cai_niao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值