在接⼝测试中,部分参数每次发送请求是都要唯⼀的数值,这时可以采⽤把测试数据参数化处理的⽅式实现,postman参数化的形式主要有三种
1、内置变量实现
内建变量为postman⾃带的系统变量,但是不能进⾏精确化的对⽐
Variable Name {{$guid}}{{$timestamp}} {{$randomint}}
Description
添加⼀个V4风格的GUID 添加0-1000之间的随机整数
Examples
“611c2e81-2ccb-42d8-9ddc-2d0bfa65c1b4” 0-1000之间的随机整数
Connie Runolfsdottir , Sylvan Fay , Jonathon Kunze
添加当前的时间戳,精确到秒1562757107 , 1562757108 , 1562757109
{{$randomFullName}}随机全名(名字 姓⽒){{ $randomBoolean}} 随机布尔值 (true/false)
true , false , false , true
更多内置变量参考:https://blog.csdn.net/minzhung/article/details/102531880内建变量⼀般放在request⾥
2、Pre-request-Script页签中使⽤代码实现单⼀请求执⾏顺序如下图所⽰:
Pre-request-Script→request→response→Tests
这是⽐较推荐的⼀种参数化⽅法,可以通过⾃⼰写脚本的⽅式,提⾼了可塑性,
值得注意的是接⼝测试执⾏时接⼝会先执⾏这⾥的代码,然后发送请求,最后进⾏断⾔,与test⼀样都⽀持js语法
Pre-request-Script为执⾏接⼝请求之前要做的操作,⽽tests是执⾏完请求要做的操作,内建变量⼀般放在request⾥,我们也可以⽤代码在pre-request-Script中实现,⽤代码实现的好处是可以复⽤,以下为部分举例:
⽰例⼀、Pre-request-Script先定义当前时间并获取,把当前时间设置为全局变量后传⼊请求参数中,然后在Tests中进⾏断⾔
⼆、下⾯是其他部分参数化⽅式的实现
代码如下
var now_time = Date.now();
pm.globals.set(\"now_time\
const guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
.replace(/x/g, () => (Math.floor(Math.random() * 16)).toString(16)).replace(/y/g, () => (Math.floor(Math.random() * 4 + 8)).toString(16));pm.globals.set(\"guid_value\
const randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;pm.globals.set(\"random_number\
const getRandomValue = list => list[randomInt(0, list.length - 1)];const charsInName = ['王','李','张'];
pm.globals.set(\"people_name\var mobile_num = `13${randomInt(500000000, 599999999)}`;pm.globals.set('mobile_num',mobile_num);const sleep = (milliseconds) => {const start = Date.now();
while (Date.now() <= start + milliseconds) {}};
sleep(5000);
3、外部⽂件的⽅式实现
⼀、通过csv⽂件或者json格式的⽂件实现参数化
csv的运⽤,⾸先通过在⽂件中设置需要搜索的字段和搜索出来的结果
关键⾃之间需要⽤英⽂逗号分隔开,第⼀⾏写定义的参数变量,切记需要以utf-8的编码格式、.csv的⽂件后缀名保存,点击runner按钮
也可以在控制台查看具体运⾏结果
断⾔的期望结果如果也写⼊⽂件中的话,也可以在Tests断⾔中调⽤,这⾥不再举例
⼆、外部⽂件也可以通过json格式的⽂件实现参数化,导⼊⽂件的时候记得校验⽂件是否为json
值得注意的是iteration设置迭代次数,每次迭代都会使⽤你的数据⽂件中的⼀⾏,如果迭代次数超过数据⽂件中的⾏数,讲会重复使⽤最后⼀⾏数据
因篇幅问题不能全部显示,请点此查看更多更全内容