Rest-Assured中如何实现日期部分查询而非精确时间匹配?
ServiceNow Table API 日期范围查询(无需精确时间)
直接传入start_time=2023-09-02 05不会生效(除非你的自定义表Mytable有对应的字段或参数配置),ServiceNow Table API 查询日期字段的标准方式是使用范围查询,而非通配符或自定义参数,具体方案如下:
核心解决方案
ServiceNow 要求通过sysparm_query参数构建查询条件,针对sys_created_on字段的部分日期搜索,你可以指定时间范围来覆盖目标时间段:
- 查询2023-09-02当天所有记录:
sys_created_on>=2023-09-02 00:00:00^sys_created_on<2023-09-03 00:00:00 - 查询2023-09-02 05点整到06点整的记录:
sys_created_on>=2023-09-02 05:00:00^sys_created_on<2023-09-02 06:00:00 - 多条件用
^分隔,同时保留Tags=Mytag的过滤条件
修改后的测试代码
@Test() public void getStatus(){ String tableName = "Mytable"; String tagValue = "Mytag"; // 构建日期范围查询条件:查询2023-09-02当天的记录 String query = String.format("sys_created_on>=2023-09-02 00:00:00^sys_created_on<2023-09-03 00:00:00^Tags=%s", tagValue); RequestSpecification request = RestAssured.given().auth().basic("username", "password"); // 使用sysparm_query参数传递查询条件 Response response = request .queryParam("sysparm_query", query) .get("https://helloworld.com/api/now/table/" + tableName); // 验证响应状态码 response.then().statusCode(200); JsonPath jsonPathEvaluator = response.jsonPath(); String actualExecutionStatus = jsonPathEvaluator.get("result.status[0]"); String actualsys_created_on = jsonPathEvaluator.get("result.sys_created_on[0]"); System.out.println("actualExecutionStatus =="+actualExecutionStatus); System.out.println("actualsys_created_on =="+actualsys_created_on); System.out.println("response body=="+response.getBody().asString()); }
补充说明
- ServiceNow Table API 默认不支持日期字段的通配符模糊搜索,范围查询是官方推荐的标准方式,同时能保证查询效率(日期字段通常建有索引)。
- 如果需要更灵活的日期范围(比如近7天、当月),可以使用ServiceNow的日期函数,例如
sys_created_on>=@d-7(近7天)、sys_created_onONToday@(当天)。
内容的提问来源于stack exchange,提问作者Sameera De Silva
相关产品推荐
相关产品推荐

