【问题标题】:How to compare environment variable that contains multiple values to response body json如何将包含多个值的环境变量与响应正文 json 进行比较
【发布时间】:2021-02-26 18:05:44
【问题描述】:

我有一个在 PATCH 正文中使用的环境变量,我想确保它与同一 PATCH 的响应正文中的那个匹配。

环境变量和响应体的结构完全相同:

"compliance":{
        "documents": true,
        "shareInfo": true,
        "applicationUnderstood": true,
        "authoriseCheck": true,
        "drivingLicenceType": "EU"
    }

我尝试了以下方法,但出现“TypeError: Cannot read property 'documents' of undefined”错误

pm.test("Assert ComplianceDetails", function () {
    var complianceData = (pm.environment.get("Compliance"))
    pm.expect(jsonData.compliance.documents).to.eql(complianceData.compliance.documents)
    pm.expect(jsonData.compliance.shareInfo).to.eql(complianceData.compliance.shareInfo)
    pm.expect(jsonData.compliance.applicationUnderstood).to.eql(complianceData.compliance.applicationUnderstood)
    pm.expect(jsonData.compliance.authoriseCheck).to.eql(complianceData.compliance.authoriseCheck)
    pm.expect(jsonData.compliance.drivingLicenceType).to.eql(complianceData.compliance.drivingLicenceType)
});

我已经设法使用 .split(' ') 让它工作,但我不想让我的测试在将来发生变化时变得脆弱。有没有办法使用上面的方法来让它工作?我也不想进一步分离环境变量。

【问题讨论】:

    标签: javascript json function environment-variables postman


    【解决方案1】:

    如果您通过脚本将邮递员变量设置为:

    pm.environment.set("Compliance",{"compliance":{
            "documents": true,
            "shareInfo": true,
            "applicationUnderstood": true,
            "authoriseCheck": true,
            "drivingLicenceType": "EU"
        }})
    

    然后它将被存储为 javascript 对象,您的代码将按原样运行:

        var complianceData = (pm.environment.get("Compliance"))
        pm.expect(jsonData.compliance.documents).to.eql(complianceData.compliance.documents)
        pm.expect(jsonData.compliance.shareInfo).to.eql(complianceData.compliance.shareInfo)
        pm.expect(jsonData.compliance.applicationUnderstood).to.eql(complianceData.compliance.applicationUnderstood)
        pm.expect(jsonData.compliance.authoriseCheck).to.eql(complianceData.compliance.authoriseCheck)
        pm.expect(jsonData.compliance.drivingLicenceType).to.eql(complianceData.compliance.drivingLicenceType)
    

    如果你已经将内容复制并粘贴到环境变量中,那么它被存储为字符串,你必须先解析它:

    var complianceData = JSON.parse(pm.environment.get("Compliance"))
    pm.expect(jsonData.compliance.documents).to.eql(complianceData.compliance.documents)
    pm.expect(jsonData.compliance.shareInfo).to.eql(complianceData.compliance.shareInfo)
    pm.expect(jsonData.compliance.applicationUnderstood).to.eql(complianceData.compliance.applicationUnderstood)
    pm.expect(jsonData.compliance.authoriseCheck).to.eql(complianceData.compliance.authoriseCheck)
    pm.expect(jsonData.compliance.drivingLicenceType).to.eql(complianceData.compliance.drivingLicenceType)
    

    评论

    下面的对象不是一个有效的javascript对象,你必须用大括号括起来:

    无效:

    "compliance":{
            "documents": true,
            "shareInfo": true,
            "applicationUnderstood": true,
            "authoriseCheck": true,
            "drivingLicenceType": "EU"
        }
    

    有效:

    {
        "compliance":{
                "documents": true,
                "shareInfo": true,
                "applicationUnderstood": true,
                "authoriseCheck": true,
                "drivingLicenceType": "EU"
            }
    }
    

    如果你不想让它以这种格式存储,那么你可以在脚本中这样做:

      var complianceData = "{"+(pm.environment.get("Compliance"))+"}"
      // or `{${pm.environment.get("Compliance")}}`
    

    【讨论】:

    • 感谢您的回复,在使用 JSON.parse 时,我现在收到以下错误:JSONError: Unexpected token ':' at 1:13 "compliance":{ ^ 我认为这是因为 ': ' 不被识别为有效的 JSON?如果您的字符串包含无效的 json 值,是否有使用 JSON.parse 的方法?
    • 您还必须将 complieanse 用 {} 括起来,例如 {"complaince":{restofcode}{
    • 补丁的正文如下所示:{ "sendForProcessing": true, {{PersonalInformation}} {{ContactInformation}} {{Compliance}} } 按照您的建议将 {} 添加到 Compliance 变量时,我收到错误 400,因为它使补丁无效。我认为这是因为它已经包含在 PATCH 正文中,但是即使它包含在请求正文中,我仍然会收到 JSONError。
    • 我刚刚设法让它与您建议的以下内容一起使用。 pm.test("Assert ComplianceDetails", function () { var complianceData = JSON.parse({${pm.environment.get("Compliance")}}) pm.expect(jsonData.compliance.documents).to.eql(complianceData.compliance.documents) });非常感谢您的帮助,非常感谢
    猜你喜欢
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多