【问题标题】:How to compare two URLs in JavaScript Postman Runner如何在 JavaScript Postman Runner 中比较两个 URL
【发布时间】:2020-09-05 21:37:16
【问题描述】:

我想比较两个 URL:第一个来自响应,第二个来自上传的 CSV 文件。

我想检查响应中的 URL 是否与链接到 CSV 文件中请求的行的 URL 相同。

请求正文

{
"brandTrigram": "{{brandTrigram}}",
"countryId": "{{countryId}}",
"languageId": "{{languageId}}"
}

测试

pm.test("Check returned data", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.URL).to.eql(pm.variables.get("URL"));
});

CSV 文件

brandTrigram,countryId,languageId,URL
car,ca,eng,https://ca.cartier.com/en-ca/others/privacy-policy.html
car,ae,ara,https://www.cartier.ae/ar-ae/%D8%BA%D9%8A%D8%B1-%D8%B0%D9%84%D9%83/%D8%B3%D9%8A%D8%A7%D8%B3%D8%A9-%D8%A7%D9%84%D8%AE%D8%B5%D9%88%D8%B5%D9%8A%D8%A9.html

我在 CSV 文件的第一次迭代中收到以下错误:

Check returned data | JSONError: Unexpected token 'h' at 1:1 https://ca.cartier.com/en-ca/others/privacy-policy.html ^

所以 javascript 测试没有做我们想要的比较工作:/,我该如何解决?

【问题讨论】:

  • 响应正文是什么样的?
  • @DannyDainton 实际上在响应正文中有预期的 URL(例如 ca.cartier.com/en-ca/others/privacy-policy.html)
  • 什么是结构?它只是对象中的一个键URL。试图了解jsonData.URL 代表什么。没有所有细节,人们怎么能帮助你。
  • @DannyDainton jsonData.URL 是预期的响应,我们提供 3 个值,我们应该在响应中获得一个 URL,我想要从我的 JS 测试中确保这个 URL 是相同的 URL根据 CSV 文件链接到请求中的值。
  • 我知道您要做什么,为什么用响应正文的示例更新问题如此困难?您在那里有一个请求正文,只需执行与响应相同的操作。是{ "URL": "https://example.com" },就是这样还是其他结构?

标签: javascript postman postman-collection-runner


【解决方案1】:

如果您的回复正文是:

{
    "URL": "some URL"
}

测试可能是:

pm.test("Check returned data", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.URL).to.eql(pm.iterationData.get("URL"));
});

使用pm.iterationData.get() 可确保您从该范围内获取值,并避免您在不同范围内使用该变量名时出现问题。

我不知道响应正文结构是什么,所以这是基于在问题中看到jsonData.URL 的猜测。

编辑

看起来响应是纯文本而不是 JSON 对象,因此使用 pm.response.json() 或 jsonData.URL 都不正确。

pm.test("Check returned data", function () {
    var response = pm.response.text();
    pm.expect(response).to.include(pm.iterationData.get("URL"));
});

【讨论】:

  • 我尝试了您的建议,但仍然为测试“检查返回的数据”得到相同的错误:/
  • 所以响应正文只是一个纯文本字符串?
  • 这就是我要求响应正文的原因,在尝试引用某些内容时很重要......在响应中。 :D 您尝试使用pm.response.json() 将字符串解析为JSON,然后尝试使用jsonData.URL 引用不存在的内容。我已经更新了答案。
  • 现在我得到了一个不同但更好的错误:D Check returned data | AssertionError: expected 'https://ca.cartier.com/en-ca/others/privacy-policy.html' to include undefined
  • 数据文件中的每次迭代是否都有URL值?集合 Runner 中数据文件的预览是什么样的?
猜你喜欢
  • 2011-07-21
  • 2011-07-19
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 2011-08-29
  • 2012-09-02
相关资源
最近更新 更多