【问题标题】:Asserting entire response body in post man在邮递员中断言整个响应主体
【发布时间】:2018-06-11 12:18:50
【问题描述】:

我最近开始从事 Spring Boot 项目。 我正在寻找一种方法来断言我的 API 的整个响应。 这样做的目的是减少 API 的测试时间。

找到下面提到的一些解决方案,但没有任何帮助我解决问题。

pm.test("Body matches string", function () {
    pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});


pm.test("Body is correct", function () {
    pm.response.to.have.body("response_body_string");
});

当我将整个响应正文作为参数时,我得到以下错误。

  1. 未闭合的字符串

2。

3。

【问题讨论】:

  • 需要对字符串进行断言吗?您的测试正在检查 JSON,但作为字符串,这似乎不是一个好方法。为什么用 JSON 标记问题?

标签: json postman web-api-testing


【解决方案1】:

如果你想使用你在其中定义字符串的相同类型的引号,你必须对它们进行转义:

  • 'string with "quotes"'
  • "string with 'quotes'"
  • 'string with \'quotes\''
  • "string with \"quotes\""

您可能希望将 json 放在单引号中,因为 json 本身不允许使用单引号。

【讨论】:

  • 由于 PostmanTests/Pre-request Scripts 中使用 JS,您也可以使用 grave重音。考虑:`string with both 'single quotes' and "double quotes`
【解决方案2】:

您可以尝试将响应设置为变量,然后针对它进行断言?

var jsonData = pm.response.json()

pm.environment.set('responseData', JSON.stringify(jsonData))

您可以从这里获取数据JSON.parse(pm.enviroment.get('responseData')),然后在任何测试中使用它来断言所有的值。

pm.test("Body is correct", () => {
    var jsonData = pm.response.json()
    pm.expect(jsonData).to.deep.equal(JSON.parse(pm.environment.get('responseData')))
})

我的理由是,无论如何您都在尝试针对 JSON 进行断言,但它是作为纯文本字符串进行的。

或者您可以像这样单独声明这些值:

pm.test("Body is correct", () => {
    var jsonData = pm.response.json()
    pm.expect(jsonData[0].employeeName).to.equal("tushar")
    pm.expect(jsonData[0].phNum).to.equal(10101010)
})

根据 JSON 结构,您可能不需要访问数据数组,并且可以删除 [0]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 2018-03-26
    • 2019-12-21
    • 1970-01-01
    • 2019-05-25
    相关资源
    最近更新 更多