背景:
目前对于传统WEB网站性能(压力/负载)的测试工具有很多,loadrunner、iperf、siege等,操作都比较简单,这里就不介绍了。然而对于医疗领域内的服务器,通常指的是DICOM服务器,提供满足DICOM3.0标准规定的各项DIMSE服务,诸如DIMSE-C(C-STORE、C-FIND、C-MOVE、C-ECHO)、DIMSE-N(N-CREATE、N-DELETE)等等。倘若使用传统的压力测试工具会有几大局限性:
- 常见压力测试工具,通过模拟上千万用户实施并发负载及实时性能监测的方式来实现对WEB服务端的压力测试,且模拟的并发请求多以HTTP或TCP为主。然而DICOM服务无法直接通过HTTP请求进行访问(WADO、WADO-RS服务除外)。
- 虽然部分压力测试工具(例如LoadRunner、JMeter等)可以发送TCP请求进行压力测试,但是DICOM服务在TCP基础上还需要继续多次“请求-响应”来完成,通过常见的手动填充TCP数据体的方式无法模拟真实的DICOM请求。
- 遵循DICOM协议的PACS影像服务器自身通常有一定的约束,例如模拟多用户同时上传同一组图像(即同时发送同一套数据)时服务端可能会直接忽略数据体来减少负载,即使我们成功模拟了请求,此时的检测的性能并不能代表影像服务器性能上限,测试结果不准确。
资料搜集:
鉴于以上几点原因,我们需要寻找一款合适的能够监测DICOM服务器性能的工具,初步设想有几种可能的方案:
第一种,利用python等语言手动编写测试脚本,循环调用dcm4che2工具包中的dcmsnd.bat工具模拟多用户并发访问。这种方案的优点是思路简单,直接模拟真实用户操作;缺点是利用python调用dcmsnd.bat批处理指令我们只能获取简单的运行时间,且结果不具有可视化,应付简单的测试(比如内部开发人员自我测试)比较可行,不适用于实际项目发布测试。
第二种,利用JMeter、LoadRunner等工具的TCP请求测试,将DICOM文件以二进制形式放到TCP请求数据体中。该方案的优点是可以利用JMeter、LoadRunner等工具诸多可视化功能,对服务器性能进行全面分析;缺点是需要对DICOM协议进行抓包分析,梳理出具体的完整的数据包,难度