【问题标题】:How to compare a string to a date in postman test?如何在邮递员测试中将字符串与日期进行比较?
【发布时间】:2018-06-27 03:23:16
【问题描述】:

假设 API 请求获取用户 ID、电子邮件地址和生日。示例 API 请求如下:

GET: /v1/users HTTP/1.1
Content-Type: application/json
Authorization: bearer {access_token}

对于上述请求,以下是响应:

{
    "content": [
        {
            "id": 1,
            "email": "random@random.com",
            "birthday": "1990-01-01"
        },
        {
            "id": 40,
            "email": "random1@random1.com",
            "birthday": "1990-18-10"
        }
],
    "last": false,
    "total_elements": 2,
    "total_pages": 1,
    "sort": null,
    "first": true,
    "number_of_elements": 2,
    "size": 20,
    "number": 0
}

现在,postman 中将进行什么测试以确保生日节点下的所有返回值都大于 1988-18-01?

我尝试了以下方法:

pm.test("Check birthday greater than 1988-18-01", () => {
    for (i = 0; i < jsonData.content.length; i++) {
        var a = '1988-18-01'; 
        pm.expect(jsonData.content[i].birthday).to.be.above(a);
    }
});

但是邮递员说:“检查生日是否大于 1988-18-01 | AssertionError: expected '1990-01-01' to be a number or a date”。

任何帮助将不胜感激!

【问题讨论】:

    标签: javascript testing postman functional-testing qa


    【解决方案1】:

    所以首先需要将日期转换成 JS 接受的格式,并使用 Date 构造函数生成完整的日期。

    接下来,pm 中的 'above' 函数接受一个整数,因此不会比较日期格式。 为了解决这个问题,我们可以使用 .getTime() 函数将日期转换为整数格式。

    最后,在 for 循环中声明变量不是一个好习惯。 以下是您可以替换测试的内容:

    pm.test("Check birthday greater than 1988-18-01", () => {
    
       let date, 
       isoFormatDate,
       a = new Date('1988-01-18').getTime();
    
       for (i = 0; i < jsonData.content.length; i++) {
    
          date = jsonData.content[i].birthday;
    
          isoFormatDate = new Date(date).getTime(); // Converting to integer from date format
    
          pm.expect(isoFormatDate).to.be.above(a);
       }
    });
    

    这将解决您的问题。

    【讨论】:

    • 感谢您的快速回复 Sivcan!但是,它仍然失败。现在邮递员说:“检查生日是否大于 1988-18-01 | AssertionError: expected NaN to be above 569462400000”
    • 您确定回复中的所有日期都正确吗?你能分享它失败的日期吗?只需 console.log 日期并检查 Postman Console。
    • @NoorYeaserKhan - 日期格式应为:YYYY-DD-MM
    • 对不起,Sivcan!但 API 以 YYYY-MM-DD 格式返回日期。
    • 好的 - 当我从您提供的代码中注释掉交换行时,测试通过了。所以最终代码与上面相同,除了以下行: [date[1], date[2]] = [date[2], date[1]]; // 交换。根据此处提供的信息:w3schools.com/js/js_date_formats.asp 似乎 ISO 日期格式是 YYYY-MM-DD。非常感谢您的帮助以及快速响应!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多