DLT框架(Domain Layered Test Framework)

昇腾MindIE领域分层测试框架,让开发人员能够在不具备NPU环境下,仍能完成MindIE的基本功能开发,解除对复杂的周边组件依赖,整体框架遵循如下理念:

  • 可独立测试、尽可能模拟真实系统行为:MindIE周边依赖多,一个完整的推理请求,需要依赖于AI框架、CANN以及特定硬件条件,这使得开发者要在开发机上完成独立测试变得异常困难。独立测试的目标是要准确把握领域的边界,通过Test Double技术,使得对系统行为的模拟尽可能保持与实际环境一致,保证测试业务流程处理时序和真实环境一致,系统中的异步处理消息、事件等,序列保持一致,从而让开发人员能够在开发机上尽可能的完成完整业务流程的模拟。

  • 轻量级、单线程:测试工程尽可能轻量化,应避免引入不必要的模块、第三方库依赖,从而导致可调试性、可维护性变差,必须让测试过程可控,不可出现开发者测试用例需要跨团队支持,才能完成问题调试与定位情况

  • 高效率:运行结果需要尽可能在分钟级反馈,在用例执行层面要尽可能利用CPU资源,让CPU核满负荷运转,对于定时器、消息、事件处理应作到串行化与零等待,我们按测试金字塔原理对整个测试框架进行测试分层,分为ST(5%)、IT(15%)、UT(80%)三层,UT要做到秒级反馈

ut:单元测试,针对组件/模块/微服务内文件级粒度的功能测试用例集,在本测试框架中,被测组件与领域层对象共同组成单元测试。例如block_manager模块与依赖的领域对象sequence共同组成测试,其他依赖通过TestDouble进行依赖解除。在UT测试中,C语言则针对单个头文件中的函数,C++则是类公共接口, C++则会打开-fno-access-control选项,允许对private接口进行测试

it:集成测试,基于组件/模块/微服务接口的测试,是组件/模块/微服务的集成测试,在本项目中,llmmanager、engine、executor、scheduler、block_manager、sequence集成起来进行接口组合测试

st:系统测试/端到端测试,更大粒度的全系统端到端测试,例如:从MindService接收请求,一直到Modeling侧,直到请求结果返回,基于录制回放形式,对模型底层进行处理。