【问题标题】:Save Variable from a Pre-request script to use in a new Request保存预请求脚本中的变量以在新请求中使用
【发布时间】:2021-12-12 02:59:58
【问题描述】:

我想在 POSTMAN 中运行一个预请求脚本,该脚本向 UUID 生成器 API 发送请求并将 UUID 保存为变量。我可以在请求正文中调用它,因为那里需要它们。

最初,我有两个单独的请求 (1) 一个对 UUID 生成器 API 的请求 (2) 另一个对我的私有 API 的请求。我可以将 3 个 UUID 设置为变量,并根据对我的私有 API 的请求将它们调用到正文中,这没问题,并且可以正常工作。像这样:

GET https://www.uuidgenerator.net/api/version1/3
    
pm.collectionVariables.set("UUID_1", pm.response.text().split(" ")[1])
pm.collectionVariables.set("UUID_2", pm.response.text().split(" ")[2])
pm.collectionVariables.set("UUID_3", pm.response.text().split(" ")[3])

**Response:**

1. f3600940-3684-11ec-8d3d-0242ac130003
2. f3600b70-3684-11ec-8d3d-0242ac130003
3. f3600c6a-3684-11ec-8d3d-0242ac130003


**Variables in body of next Request:**

  "data": {
        "uuid": "{{UUID_1}}",
        "uuid2": "{{UUID_2}}",
        "uuid3": "{{UUID_3}}",

旁注:我想出如何从响应中获取个性化原始文本数据的唯一方法是使用 .split 并且数据是一行,pm.response.text().split(" ")[1])

但是,我想简化一些事情并在 Pre-Request 部分插入 UUID 生成器请求,因此我不需要两个单独的请求来完成这项工作。但是,当插入与上述先前请求相同的信息来设置这些变量时,它不起作用。

到目前为止,我的预请求脚本给出了一个错误(如下):

    pm.sendRequest({
    url: "https://www.uuidgenerator.net/api/version1/3",
    method: 'GET'
}, function (err, res) {
pm.collectionVariables.set("UUID_1", pm.response.text().split(" ")[1])
pm.collectionVariables.set("UUID_2", pm.response.text().split(" ")[2])
pm.collectionVariables.set("UUID_3", pm.response.text().split(" ")[3])
});

POSTMAN Error:

    There was an error in evaluating the Pre-request Script:Error: Cannot read property 'text' of undefined

基本上我在预请求脚本中的collectionVariables.set 中尝试的任何不同变体......

pm.collectionVariables.set("UUID_1", pm.response.text().split(" ")[1])
OR
pm.collectionVariables.set("UUID_2", pm.response.split(" ")[2])
OR
pm.collectionVariables.set("UUID_3", pm.response.[3])

我收到错误,如果它是自己的请求(有效),否则我不会收到错误

这让我相信这可能是我拥有的预请求脚本的内部工作原理。

【问题讨论】:

  • 只是问,因为我不知道使用该 uuid 生成器背后的上下文 - 你能不使用 pm.variables.replaceIn('{{$guid}}') 来获取 uuid 吗?
  • 这是我要研究的东西。 @丹尼丹顿

标签: javascript java api request postman


【解决方案1】:

你快到了。数组以 [0] 开头,需要将响应声明为 res,放在函数中:

pm.sendRequest({
    url: "https://www.uuidgenerator.net/api/version1/3",
    method: 'GET'
    }, function(err, res){
pm.collectionVariables.set("UUID_1", res.text().split("\r\n")[0])
pm.collectionVariables.set("UUID_2", res.text().split("\r\n")[1])
pm.collectionVariables.set("UUID_3", res.text().split("\r\n")[2])
});
console.log(pm.response);

【讨论】:

  • 嘿@djmonki,即使这个 UUID 请求的响应没有在数组中排序?如果您要单独发送 UUID 请求,在它自己的请求中,响应将是 3 个 UUID,但不是数组。只是原始文本数据。在我的第一个代码块中,您将看到响应的样子...1、2..3。 (没有数组)。
  • 嘿@WilliamZebrowski,公平点。刚刚测试了代码,它可以工作,试一试
  • 它几乎就在那里,在控制台中,它告诉我请求标头中有一个无效字符,并且它在 UUID 的末尾显示一个字符 ↵ 我认为这是出现错误的原因。 uuid: "49ccde12-369d-11ec-8d3d-0242ac130003↵"。 IThis char 显示 3 个 UUID 中的 2 个。在标题中,我确保没有不应该存在的空格或字符。对↵有什么想法吗?
  • @WilliamZebrowski 更新了我的答案,将 \r 包含在拆分中。看看进展如何
猜你喜欢
  • 2019-02-04
  • 1970-01-01
  • 2019-07-26
  • 2020-03-11
  • 2021-09-14
  • 2020-05-19
  • 2021-05-11
  • 2017-01-25
  • 1970-01-01
相关资源
最近更新 更多