从预先请求脚本

时间:2017-09-19 18:28:04

标签: api testing postman

我目前正在尝试使用CSV数据源实现少量Postman请求。 例如,假设我有一个名为“以用户身份打开”的请求。 在csv文件中,我有大量用户凭据和描述用户角色的描述字段。 我希望能够更改请求名称以反映每个用户角色。 例如,如果请求是作为管理员用户发出的,我想在报告中请求名称,并且跑步者是“以用户管理员身份打开”。

在文档中,我发现了pm.info.requestName变量,但似乎它是只读的。 我在预请求脚本

中添加了以下内容

pm.info.requestName = "1"; console.log(pm.info.requestName);

但获得“以用户身份打开”值而非分配“1”。

有没有人试图做同样的伎俩或者知道它是否可行?

2 个答案:

答案 0 :(得分:1)

我也在寻找解决方案,我已经通过以下方式解决了这个问题:

  • 使用“预请求脚本”确定用户具有的角色。
  • 将网址设置为环境变量或全局变量
  • 在请求中使用该网址,例如{{url}}
  • 在“测试”标签中清除环境变量或全局变量

在我的情况下,我使用环境变量来获取环境,而不是使用数据变量。

var environment = pm.environment.get("environment");
var url;
switch(environment) {
case "test":
    url = pm.globals.get("test-url");
    break;
case "acc":
    url = pm.globals.get("acc-url");
    break;
case "prod":
    url = pm.globals.get("prod-url");
    break;
default:
    url = pm.globals.get("test-url");
    break;
}

pm.environment.set("url", url);

希望这有帮助!

答案 1 :(得分:0)

我担心你不能这样做。 pm.request对象仅在请求执行后可用。我甚至认为你不能按照你想要的方式访问请求名称(虽然我会在'id'成员中找到它,但它是空的)

查看here,了解有关请求对象的成员和方法的可用内容。

您可能会发现另一种处理方式(可能重复您的测试,使用管理员重命名,并在适当的条件下启动管理员请求而不是普通用户请求?这对于测试名称来说是一种麻烦)

我考虑其他事情:你可以只定制你的断言标签,这就是我在TFS报告中拥有'可读'测试名称的方法。在“测试”选项卡中:

test_name = "[ "+ request.name + " ] - ";

和每个断言(例子):

tests[test_name + "Status code is 200"] = responseCode.code === 200;

这在响应测试选项卡中给出了类似的内容:

PASS [Get all configuration]-Status code is 200

在特定情况下,您可以将request.name替换为自定义字符串,或者执行request.name +“admin”...

希望这会有所帮助