程序员们对敏捷开发大概都是爱恨交加的。摸鱼的机会被压缩了,每天的站会全靠口才。测试组也头疼每个迭代的发布,以及迭代中无休止的各种临时发布(内测版本)。
因此,CI/CD (持续集成,持续部署)在敏捷开发流程中就很重要。而CI/CD中的自动化测试(自动化单元测试,自动化回归测试)更是保证质量、减少开发和测试人员无休止重复劳动的重要环节。
常见的自动化单元测试的框架有 CPPUTest, Junit, gunit, 适合不同的语言, 开发编译平台。
这里我们重点介绍一个可用于自动化回归测试的框架,Robot Framework。 Robot Framework 是一个基于Python语言开发的,可扩展的,是以关键字驱动模式的自动化测试框架。https://robotframework.org/RobotFramework的特点
编辑用例简单,可以以robot,txt,tsv或者html的格式编写用例
自动生成html格式的测试报告和日志
除了自带的类库外,还有很多的实用的类库
- 可以根据项目的需要自定义一些关键字
当你安装Robot Framework后,你得到了核心框架和随安装包绑定的的一系列标准库。除了标准库还有很多外部扩展库可用,这些库通常都是Robot Framework社区贡献的,它们能够实现特定的功能。关于这些库的一个非常棒的地方是,你可以把不同库中的关键字进行混用来定义你自己的关键字或者编写特定用例。
上篇有个智能电表的介绍,
如果以类似智能电表为例的产品的自动化回归测试,搭建测试平台示例如下:
假设- 被测设备可以通过webserver进行配置
- 被测设备支持RS485通信,通信协议为Modbus
- 下图中电流源设备用于给出模拟被测设备需要的输入电流信号。根据被测试设备的功能不同,这里测试平台需要用到的设备也会不同。
那么测试脚本便可以基于Robot Framework现有的库,以及外部扩展库(比如现有库中没有modbus的库,则可以基于第三方的python库来扩展),来编写。 编写测试脚本是基于关键字的。关键字是通过库来实现的。下面是一个测试用例的脚本示例。
比如上面的被测试设备支持webserver,并且支持Login功能。那么login就是回归测试中必须包含的测试用例。该测试用例便可以通过RobotFramework的自动测试脚本来覆盖。
上图中的测试脚本可以在常见的txt编辑器中编辑,也可以在robotframework 提供的编辑UI中编辑。测试工程师不需要了解具体关键字背后的实现,只需要了解关键字提供的功能,然后将关键字组合。
测试的执行可以在CI/CD的环境的脚本中调用并执行这些测试脚本。也可以简单的手动运行这些脚本。比如上面login的测试脚本,单独运行如下
robot logintest.robot
被执行后会生成测试报告。下图为测试报告的示例
测试组件(Testsuite):测试用例合集。每个工程都会有至少一个测试组件,在大一些的工程中,把不同功能点的测试切分成多个测试组件是合理的。
资源文件:在测试组件中定义一些高阶关键字,把这些关键字定义到一些外部文件中,这些文件就是资源文件。可以理解为是对测试库中技术关键字(更为底层,更为通用的关键字,一般是一些python的函数名)针对产品功能的进一步封装。从测试设计的角度来分析,在一些生命周期比较长的项目中,应该针对产品或者项目开发一些能够被整个团队复用的高阶关键字。
“Open Login Page”
“Title Should Start With”
Keywords ***
Open Login Page
Open Browser http://host/login.html
Title Should Be Login Page
Title Should Start With
${expected}
Get Title =
Should Start With ${title} ${expected}
那么每次CI自动生成的新的固件,通过firmware upgrade(固件升级)自动部署到测试平台的DUT中,自动执行测试脚本,生成测试报告,测试报告发送到相关开发、测试人员的邮箱中。