语音交互系统的自动化测试思考

最近在安排国庆的旅行计划,目的地是鲁迅的故乡绍兴。鲁迅有本散文集《朝花夕拾》,又名《旧事重提》。回顾整理以往的经验,故名《旧日往昔》。

机器人OS 不同于传统的OS,不同之处在于交互方式的不同。人机交互界面(HMI),简化思考无外乎就是输入输出(I/O),之前的自动化测试可以很大程度上覆盖需求,是否就是很大程度上模拟了输入输出,并分析了输出的结果(不知者无畏)?

长远考虑,从稳定性或者测试效率考虑,搞搞自动化测试应该利大于投入吧?

原理上能否实现?

基本思路如下图:

结合机器人OS,输入有(asr/keyevent/mic matrix/visual) 输出有(tts/display/app/motion),这些在framework部中基本都对应一个server,真实的输入输出由与其绑定的运行在其他进程中的service实现。server的作用基本就是消息转发。对应于系统的整体框架图,基本就是下图中红线框出的部分。

特别说明AppServer 也作为一个输出Server,它输出的是对应用的调度动作。
综上:在架构实现上需要在(替换/插入)测试service的地方需要在现有代码中做判断:在正常使用时加载正常的service,在测试环境下替换加载测试用的service。测试用service在独立apk中实现,通过service的绑定机制绑定到对应server中。

可以这样实现:

基于以上原理,实现一个autotest的apk,在测试模式下替换了正常的AsrService,当机器人开始listen的时候从模拟asr的service中返回预先写好的剧本中的一句话,实现可控输入。
操作说明:
1、打开自动测试开关
修改配置项 auto_test_replace_asr的值为true。
2、编写剧本文件
目前是固定的文件名(autotest.txt),稍后实现可选择加载不同的剧本文件
每行一个输入语句,换行即为下一条输入。
将剧本 push 到 机器人的 sdcard下。例如:

1
2
3
4
5
6
# 这是注释
你好
slient 2
loop 5
今天天气怎么样?
end

3、安装机器人AutoTest.apk。
4、重启机器人,等待进入执行脚本,执行过程中可根据具体测试用例,认为制造些异常(例如断网等),目前还不支持模拟摸头,唤醒词模拟等(lll¬ω¬),所以需要手动
5、测试过程中,更新autotest.txt 文件
修改完重新push后,打开autotest 应用的界面,点击重新加载剧本即可。

长远实现:

1、补全可自动化测试的模块
实现HeadServiceTest, MicServiceTest, VisualServiceTest, 在自动化时挂载入系统模拟 这几类输入
实现TTSServiceTest,DisplayServiceTest, MotionServiceTest, AppServiceTest, 在自动化时插入系统中,获取相应模块执行的结果并记录。
2、脚本语法丰富(注释/Listen/Head/Mic/Visual)关键字的简单实现,记录结果的简单语法实现(Speak/App/Show/Do)
3、分析:比较输入脚本和记录的输出结果,分析bug
4、报告:根据分析结果提供可视化的报告。

robot wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!