如何在邮递员测试中将字符串与日期进行比较?

Noo*_*han 1 javascript testing qa functional-testing postman

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

GET: /v1/users HTTP/1.1
Content-Type: application/json
Authorization: bearer {access_token}
Run Code Online (Sandbox Code Playgroud)

对于上述请求,响应如下:

{
    "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
}
Run Code Online (Sandbox Code Playgroud)

现在,邮递员将进行什么测试以确保生日节点下的所有返回值都大于 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);
    }
});
Run Code Online (Sandbox Code Playgroud)

但是邮递员说:“检查生日大于 1988-18-01 | AssertionError:预期 '1990-01-01' 是一个数字或日期”。

任何帮助将不胜感激!

Siv*_*ngh 5

所以首先需要将日期转换为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);
   }
});
Run Code Online (Sandbox Code Playgroud)

这将解决您的问题。