前些日子在使用Postman做断言的时候,我想把【某个搜索的接口】返回值 和 参数传的值 做个断言,但这个值是用的环境变量,就不会了。特地解决这个问题后,来分享下经验,总结下我遇到的坑:1.JS中,str转换int 2.全局变量、环境变量、变量获取后 值的数据类型是否固定。3.如何更好得确定值的类型
【我的Postman是64位 6.2.5版本】
【这篇分享是我真实不停掉坑、爬坑的顺序】
获取预定义变量 Fetching a pre-defined variable
我最初的思路:我的传参有个vendorId【实际此接口就是请求这个vendorId的信息】,我把 返回值的vendorId 和传参vendorId的值(100000) 做了个断言。
下图是返回Body(有马赛克)
【后面会加一部分vendorName的断言,"7u"是str】
就根据 Check for a JSON value 设置 断言:
pm.test("Your test name", function () { var jsonData = pm.response.json(); pm.expect(jsonData.data.list[0].vendorId).to.eql(100000); });
突然想到 我的vendorId就是用{{abc}} 全局变量。
那我可不可以使用环境变量、全局变量来做断言呢?
问题就是如何把{{变量}}成功扔进断言呢?
搜了搜,好像没找到这类似的分享 。。。
找我导师,给了我一个思路,关于 Getting an environment variable;
思路:把环境变量获取后,再把这个值来做断言,我就开始尝试。
感觉思路是对的,但是test1写的断言就是有问题。
实际看报错的是 AssertionError: expected 100000 to deeply equal ‘100000’,两个值不能完全相等。
总感觉是因为类型的原因,一个是int,一个是str。
找到的方法: 字符串数字转数字 Number(),所以test12成了。
到了这一步,感觉自己萌萌哒,已经完全明白了,和我导师说了说我的感悟 不准确,请不要当真 :
- 返回的是整数,所以需要使用Number()转换下。
- 如果返回值是字符串 ,就可以获取变量的值后 直接做断言
get变量的值后 此数据类型是否固定
无意尝试的时候,发现abc1这条断言居然是pass的,也就是说获取环境变量的值 根本不需要使用Number()转换
所以我之前的结论就错了。
同时我发现Tests[Test Scripts]的Snippets 里面有 Get an environment variable、Get a global variable、Get a variable 三种,我就知道我全错了。
postman官网介绍的environments_and_globals看到了一些资料:
我的理解就是 : 使用pm.environment.get()或者pm.global.get() 根据合适的范围 使用方法来获取变量。变量的类型被保存为strings。
好像和我刚才得出的结论也不同啊!
那就多试试
可以确定返回值的 jsonData.data.list[0].vendorName 是"7u",字符串格式;jsonData.data.list[0].vendorId是100000,数字格式。
可以猜测 pm.environment.get() 获取环境变量"id"的时候 新变量的值为100000,数字格式;pm.environment.get()获取环境变量"name"的时候 新变量的值是"7u",字符串格式。
这次验证了: global variables are always be stored as strings.
pm.global.get() 获取全局变量"abc"的时候 新变量的值为100000,字符串格式;pm.global.get()获取全局变量"abcd"的时候 新变量的值是"7u",字符串格式。
此时的结论就是 get环境变量好像比较智能,分int、str;而get全局变量就只是str。但和官网的说明好像有了分歧,还得继续确定下。
【未完待续】
交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie