在 Worklist 和 History 列表中,用户可以通过日期范围查询 study。系统提供三个预设时间范围(今天、7天、所有)和自定义日期范围选择器。
用例ID | 描述 | 输入 | 预期输出 | 测试类型 | 理由 |
---|---|---|---|---|---|
TC-WL-DATE-01 | Worklist - 选择"今天" | 点击"今天"单选按钮 → 点击搜索 | API 调用包含今天的日期范围,表格显示今天的 study | 正常 | 验证预设时间范围"今天"的基本功能 |
TC-WL-DATE-02 | Worklist - 选择"7天" | 点击"7天"单选按钮 → 点击搜索 | API 调用包含最近7天的日期范围,表格显示最近7天的 study | 正常 | 验证预设时间范围"7天"的基本功能 |
TC-WL-DATE-03 | Worklist - 选择"所有" | 点击"所有"单选按钮 → 点击搜索 | API 调用不包含日期范围限制,表格显示所有 study | 正常 | 验证预设时间范围"所有"的基本功能 |
TC-WL-DATE-04 | Worklist - 自定义日期范围 | 选择开始日期 2025-10-01,结束日期 2025-10-10 → 点击搜索 | API 调用包含指定的日期范围,表格显示该范围内的 study | 正常 | 验证自定义日期范围查询功能 |
TC-WL-DATE-05 | Worklist - 日期范围组合患者名称查询 | 选择"今天" + 输入患者名称"张三" → 点击搜索 | API 调用同时包含日期范围和患者名称,表格显示符合条件的 study | 正常 | 验证多条件组合查询功能 |
TC-WL-DATE-06 | Worklist - 清空自定义日期范围 | 选择日期范围后清空 → 点击搜索 | API 调用不包含日期范围,表格显示所有 study | 边界 | 验证清空日期范围的行为 |
TC-WL-DATE-07 | Worklist - 预设和自定义日期切换 | 先选择"今天" → 再选择自定义日期范围 → 点击搜索 | 自定义日期范围优先,API 使用自定义日期 | 正常 | 验证预设和自定义日期的优先级 |
TC-WL-DATE-08 | Worklist - 开始日期晚于结束日期 | 选择开始日期 2025-10-10,结束日期 2025-10-01 → 点击搜索 | 系统接受查询,API 调用包含该范围(或返回空结果) | 边界 | 验证日期顺序异常情况的处理 |
TC-WL-DATE-09 | Worklist - 未来日期范围 | 选择未来的日期范围 → 点击搜索 | API 调用包含未来日期范围,表格显示空结果或提示 | 边界 | 验证未来日期的处理 |
TC-WL-DATE-10 | Worklist - 同一天作为开始和结束 | 选择开始和结束都为 2025-10-01 → 点击搜索 | API 调用包含该日期,表格显示当天的 study | 边界 | 验证单日查询 |
TC-HIS-DATE-01 | History - 选择"今天" | 导航到 History → 点击"今天" → 点击搜索 | API 调用 status=Completed 和今天日期范围,显示今天完成的 study | 正常 | 验证 History 页面的"今天"功能 |
TC-HIS-DATE-02 | History - 选择"7天" | 导航到 History → 点击"7天" → 点击搜索 | API 调用 status=Completed 和7天日期范围,显示7天内完成的 study | 正常 | 验证 History 页面的"7天"功能 |
TC-HIS-DATE-03 | History - 选择"所有" | 导航到 History → 点击"所有" → 点击搜索 | API 调用 status=Completed 不限日期,显示所有完成的 study | 正常 | 验证 History 页面的"所有"功能 |
TC-HIS-DATE-04 | History - 自定义日期范围 | 导航到 History → 选择日期范围 → 点击搜索 | API 调用 status=Completed 和指定日期范围,显示该范围内完成的 study | 正常 | 验证 History 页面的自定义日期功能 |
TC-DATE-STATE-01 | Redux 状态同步 - timeRangeType | 选择"今天" | Redux search.timeRangeType = "today" | 正常 | 验证预设时间范围在 Redux 中的状态管理 |
TC-DATE-STATE-02 | Redux 状态同步 - 自定义日期 | 选择自定义日期范围 | Redux search.start_time 和 end_time 正确存储 RFC3339Nano 格式日期 | 正常 | 验证自定义日期在 Redux 中的状态管理 |
文件: cypress/e2e/patient/worklist/date-range-filter.cy.ts
测试场景:
文件: cypress/e2e/patient/history/date-range-filter.cy.ts
测试场景: 与 Worklist 类似,但验证 status=Completed 参数
文件: 集成在上述测试文件中
测试场景: 验证日期范围选择后 Redux 状态的正确性
今天:
timeRangeType
= "today"start_time
= 今天 00:00:00end_time
= 今天 23:59:597天:
timeRangeType
= "7days"start_time
= 7天前 00:00:00end_time
= 今天 23:59:59所有:
timeRangeType
= "all"start_time
和 end_time
参数start_time
和 end_time
以 RFC3339Nano 格式存储Worklist:
/dr/api/v1/auth/study
status=Arrived,InProgress
start_time
、end_time
History:
/dr/api/v1/auth/study
status=Completed
start_time
、end_time
请求:
GET /dr/api/v1/auth/study?status=Arrived,InProgress&start_time=2025-10-13T00:00:00.000+08:00&end_time=2025-10-13T23:59:59.999+08:00
响应:
{
"code": "0x000000",
"description": "Success",
"data": {
"@type": "type.googleapis.com/dr.study.StudyList",
"count": 2,
"studies": [
{
"study_id": "TODAY001",
"patient_name": "今天患者1",
"study_start_datetime": "2025-10-13T08:00:00Z",
"study_status": "Arrived",
...
},
{
"study_id": "TODAY002",
"patient_name": "今天患者2",
"study_start_datetime": "2025-10-13T10:00:00Z",
"study_status": "InProgress",
...
}
]
}
}
请求:
GET /dr/api/v1/auth/study?status=Arrived,InProgress&start_time=2025-10-06T00:00:00.000+08:00&end_time=2025-10-13T23:59:59.999+08:00
响应: 返回 5 条记录,日期分布在最近 7 天
请求:
GET /dr/api/v1/auth/study?status=Arrived,InProgress
响应: 返回所有 study,不限日期
请求:
GET /dr/api/v1/auth/study?status=Arrived,InProgress&start_time=2025-10-01T00:00:00.000+08:00&end_time=2025-10-10T23:59:59.999+08:00
响应: 返回指定日期范围的 study
请求:
GET /dr/api/v1/auth/study?status=Arrived,InProgress&start_time=...&end_time=...&patient_name=张三
响应: 返回符合多个条件的 study
请求: 未来日期范围或无数据的日期范围
响应:
{
"code": "0x000000",
"description": "Success",
"data": {
"@type": "type.googleapis.com/dr.study.StudyList",
"count": 0,
"studies": []
}
}
请求: 任意查询
响应:
{
"statusCode": 500,
"body": {
"code": "0x000001",
"description": "Internal Server Error",
"solution": "请稍后重试"
}
}
文件: cypress/support/pageObjects/SearchPanelPage.ts
方法:
class SearchPanelPage {
// 输入框操作
getPatientNameInput()
getPatientIdInput()
getAccessionNumberInput()
typePatientName(name: string)
typePatientId(id: string)
typeAccessionNumber(accNo: string)
// 时间范围选择器操作
selectTimeRangeToday()
selectTimeRange7Days()
selectTimeRangeAll()
verifyTimeRangeSelected(type: 'today' | '7days' | 'all')
// 自定义日期范围操作
selectCustomDateRange(startDate: string, endDate: string)
clearCustomDateRange()
getStartDateInput()
getEndDateInput()
// 搜索按钮
clickSearchButton()
// 验证
verifySearchPanelVisible()
}
新增方法:
// 验证表格中显示的日期范围
verifyStudyDatesWithinRange(startDate: Date, endDate: Date)
// 验证表格为空
verifyTableEmpty()
// 获取表格中第一行的日期
getFirstRowStudyDate()
新增方法: 与 WorklistPage 相同
时间: 2-3 小时
时间: 2-3 小时
时间: 1-2 小时
时间: 1 小时
风险: 日期时间可能因时区差异导致错误 缓解:
风险: RFC3339Nano 格式不一致 缓解:
风险: 用户同时选择预设和自定义日期时行为不明确 缓解:
风险: 切换日期范围时分页状态可能不正确 缓解:
风险: 大日期范围查询可能导致性能问题 缓解:
风险: 快速多次点击搜索可能导致状态混乱 缓解:
npx cypress run --spec "cypress/e2e/patient/worklist/date-range-filter.cy.ts,cypress/e2e/patient/history/date-range-filter.cy.ts"
npx cypress run --spec "cypress/e2e/patient/worklist/date-range-filter.cy.ts"
npx cypress run --spec "cypress/e2e/patient/history/date-range-filter.cy.ts"
npx cypress open
然后选择相应的测试文件
在测试文件中使用 .only
:
it.only('应该选择今天查询 study', () => {
// 测试代码
});
mockLoginSuccess()
cy.clock()
RFC3339Nano 格式:
2025-10-13T08:00:00.000+08:00
{
search: {
timeRangeType: 'today' | '7days' | 'all',
start_time: string, // RFC3339Nano 格式
end_time: string, // RFC3339Nano 格式
id: string,
name: string,
acc_no: string,
// ...其他字段
}
}
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
status | string | 是 | Worklist: "Arrived,InProgress" History: "Completed" |
start_time | string | 否 | 开始日期,RFC3339Nano 格式 |
end_time | string | 否 | 结束日期,RFC3339Nano 格式 |
patient_id | string | 否 | 患者ID |
patient_name | string | 否 | 患者姓名 |
access_number | string | 否 | 登记号 |
page | number | 是 | 页码,从1开始 |
page_size | number | 是 | 每页记录数 |