前言
在执行Run Collection的时候,发现设置的全局变量每次读取都是旧值,没有读取到最新的值。
背景
有2个地方需要动态参数,一个URL,一个Body,因此需要设置Tests脚本。
url动态参数
url:动态参数projectId——这个通过Run Collection可以选择脚本来执行。
官方教程:Run collections using imported data | Postman Learning Center
(PS:注意选择脚本执行的时候,这里的参数是 pm.variables,跟pm.globals 是有区别的 )
请求Body动态参数
Body大概格式如下,json_data 是需要我们动态拼接的。
{"data": {{json_data}}
}
就是说,我们需要两个全局参数:{{projectId}},{{json_data}}
问题和解决
假设有以下JSON文件,用于执行Run Collection
[{"projectId": 1},{"projectId": 2}
]
Tests脚本如下
执行 Run Collection 后,发现 URL:http//xxxx/projects/{{projectId}} 和 Body中的 {{projectId}} 每次都是执行的之前的值 。查看官方文档,有写到:
The sequence of execution in Postman is a critical aspect of API testing, and it determines the order in which the tests are run. The three main components of Postman’s sequence of execution are pre-request scripts, the request body, and tests. Let’s take a closer look at each of these components.
就是说 postman执行顺序是:
1.pre-request scripts
2.the request body,
3.tests
因此我们如果要把Tests中设置的全局变量,用于当前请求,有2种方式:
第1种方式:把 pm.globals.set 写到 pre-request scripts
第2种方式:创建2个Request,第1个Request 先执行Tests,第2个Request再执行业务代码。