作为面向企业开发者的DevOps平台,云效提供了丰富的能力,帮助大家在DevOps流程中落地测试自动化实践。
简单来说,企业自建测试自动化体系,分为三种形式:
1.测试执行工具,如robot
2.测试用例,如.robot文件
3.测试结果和报告,如执行完生成的log.html和report.html
对于一个测试自动化体系,往往还需要加上:
1.调度和执行平台
2.结果分析与统计报表
3.测试结果通知能力
基于云效,整个的架构是这样的。
1.测试自动化用例存储在云效代码平台的Git仓库中
2.用于执行测试自动化的测试步骤,基于云效的自定义step能力创建
3.触发和串联代码、构建和自动化测试的云效流水线
4.通知机制(钉钉消息)
5.针对质量情况的数据报表,可以直接显示在流水线测试结果中,也可以将数据发送给自建的数据报表服务展示
以RobotFramework框架为例,在云效上接入开源测试自动化工具有以下几步。
1.选择或编写对应开源测试自动化工具的flowstep
云效内置了主流开源测试自动化工具的支持(TODO),同时提供flowcli工具,帮助企业定制化地实现符合自己要求的测试自动化组件。如何通过flowcli实现并发布一个flowstep,请参见参考资料。
这里,仅以RobotFramework为例,对其关键部分做一下说明。
首先通过flowstepinit命令初始化一个flowstep组件的项目。
1.1执行的环境和命令
在step.yaml文件中,image为测试执行的环境镜像,这里是registry.cn-hangzhou.aliyuncs.com/feiyuw/flow-robotframework:1.0,镜像的内容在Dockerfile里面定义。在items中添加type为Shell的输入框,用于设置执行命令,这里默认值为robot-LTrace-drobot_logs.,当前目录“.”即为代码所在目录。
#...image:registry.cn-hangzhou.aliyuncs.com/feiyuw/flow-robotframework:1.0items:-label:执行命令name:STEP_COMMANDtype:Shellvalue:|#NOTE:outputdirectoryshouldberobot_logsrobot-LTrace-drobot_logs.#...1.2红线配置
首先在step.yaml中定义红线配置组件,这些组件会在流水线配置步骤的时候显示给用户。
items:-label:红线信息name:CHECK_REDLINEStype:addable_grouprules:-require:falseadd_button:type:iconicon:plustext:增加红线tip:icon:question-circledescription:红线校验失败步骤标记为失败template:items:-name:redlinelabel:红线position:flattype:custom_redline_dropdowndatamap:'[{"key":"PassRate","type":"GE"}]'rules:-requires:false
另外在step.sh的最后添加红线检查部分,如:
redlinePassed:成功:$STEP_ROBOT_PASS:SuccessFailed:失败:$STEP_ROBOT_FAILED:ErrorPassRate:成功率:$STEP_ROBOT_PASSRATE:Defaultflowstep编写及调试完毕后,publish到当前企业中。
2.在代码库中添加测试自动化用例
对于针对整个产品或一个子系统的自动化测试,我们建议自动化测试用例保存在单独的代码仓库中;而对于针对某个特定应用的自动化测试,我们建议其测试用例保存在该应用的代码仓库中,并与开发使用同一个分支(推荐)。
将自动化测试用例与应用代码在同一个代码库中管理,有许多好处:
1.测试用例与代码互相匹配且是最新的,让自动化测试在开发阶段就可以及时介入
2.直接复用开发的分支模式,不用考虑自动化用例的版本管理
3.开发和测试基于Git代码库紧密协作,方便落地ATDD这样的优秀实践
4.容易集成到流水线中,当测试代码或者开发代码变更后都能快速被执行和反馈,加速问题的定位和修复
3.添加测试自动化节点到流水线
打开持续集成流水线,如果没有,在flow上创建一个。
3.1编辑流水线,添加一个空白任务
3.2添加自定义步骤,“RobotFramework测试”
3.3配置执行命令和红线
4.上传测试报告到云效,以在云效流水线执行结果中展示
4.1编辑第三步的测试自动化节点,添加一个步骤
4.2配置测试报告目录(这里是robot_logs)和测试报告入口文件(这里是report.html)
5.同步测试结果到自建的报表系统
有些时候,我们需要对测试结果进行进一步的统计分析,此时,仅靠测试自动化工具提供的报告就无法满足了。通常,我们会自建一个报表系统。那么,云效中执行的测试自动化结果如何上传到我们自建的报表系统呢?
5.1确保报表系统能够被云效访问到
由于网络问题,云效无法访问我们建在私有网络环境中的报表系统,要求报表系统开放公网访问接口。为了安全,我们建议仅开放必要的接口,同时做好IP白名单防护。
5.2在flowstep中添加上传报告步骤
打开步骤1的flowstep,编辑step.sh,添加上传报告步骤。
注意:该步骤需要放在redline检查之前,同时建议传递的信息包括:测试结果、代码分支、代码版本、提交者、流水线名字等。
#...#sh-ex$WORK_SPACE/user_command.shbash-c"$STEP_COMMAND"output=`python3/root/parse_output.py$OUTPUT_XML`STEP_ROBOT_PASS=`echo$output|awk-F,'{print$1}'`STEP_ROBOT_FAILED=`echo$output|awk-F,'{print$2}'`STEP_ROBOT_PASSRATE=`echo$output|awk-F,'{print$3}'`#uploadtestresulttoreportserverpython3/root/upload_to_report_server.py$OUTPUT_XML$CI_COMMIT_REF_NAME$CI_COMMIT_SHA$EMPLOYEE_ID$PIPELINE_NAME$BUILD_NUMBERredlinePassed:成功:$STEP_ROBOT_PASS:SuccessFailed:失败:$STEP_ROBOT_FAILED:ErrorPassRate:成功率:$STEP_ROBOT_PASSRATE:Default最后的流水线大致是下面这个样子:
对于已经自建Jenkins等工具用于测试自动化调度执行,甚至在Jenkins上进行了二次开发和定制的团队,或者对于像ioT开发这样有特殊环境要求的应用,复用现有的工具资源更为经济。为此,云效提供了与客户现有Jenkins服务无缝对接的能力,帮助企业通过串联起研发测试。
1.确保自建Jenkins能够被云效访问到
自建Jenkins服务需要支持公网访问,以便云效能够访问并触发对应的任务。同样,为了安全考虑,建议仅开放必要的接口,并开启IP白名单防护。
2.添加Jenkins任务节点到流水线中
编辑云效流水线,添加一个任务节点,选择Jenkins任务。
接下来,配置Jenkins地址、认证方式、对应的Job名称,以及触发参数(上游的构建镜像)。
3.查看结果和统计报表
流水线被执行后,结果信息会同步到Jenkins任务组件上,用户可以在云效流水线运行结果上直接跳转到JenkinsJob日志。
对于统计报表,由于这种方式下,云效不会保存执行任务的任何数据,建议在Jenkins任务中完成数据的上传等工作。
如果开源测试自动化工具无法满足测试诉求,又有定制化的调度、触发、管控等要求,部分企业会选择自建测试自动化平台。对于这种情况,如何与云效有机整合起来,做到研发一站式呢?
解决的方法和集成开源测试自动化工具类似,所不同的是,我们的自建测试自动化平台需要对云效暴露两个接口:
1.触发测试执行
2.获取测试结果
实现方式与集成开源测试自动化工具的方法类似,主要是配置好step.yaml和step.sh。
step.yaml中配置自建测试平台的地址,以及测试用例的筛选参数,如:
1.触发测试平台执行对应测试用例
2.等待测试完成
3.获取测试结果
4.验证红线卡点
如:
#sh-ex$WORK_SPACE/user_command.shoutput=`python3/root/run_and_wait_until_finish.py$TEST_PLATFORM_HOST$SUITES$EMPLOYEE_ID`STEP_ROBOT_PASS=`echo$output|awk-F,'{print$1}'`STEP_ROBOT_FAILED=`echo$output|awk-F,'{print$2}'`STEP_ROBOT_PASSRATE=`echo$output|awk-F,'{print$3}'`redlinePassed:成功:$STEP_ROBOT_PASS:SuccessFailed:失败:$STEP_ROBOT_FAILED:ErrorPassRate:成功率:$STEP_ROBOT_PASSRATE:Default其中run_and_wait_until_finish.py的实现步骤大致如下:
2.添加测试自动化节点到流水线
在流水线上添加空白任务节点,在其中添加一个步骤,选择前面我们自定义的flowstep(记得publish到对应的企业中)。在步骤中配置好测试平台地址和测试用例,并设置好红线信息。
3.查看测试报告
在测试节点添加报告上传步骤,测试报告目录填“report”,测试报告入口文件为“index.html”。
4.数据统计与报表
在流水线执行结果中可以看到通过率等summary信息,详细的统计与报表建议在自建测试自动化平台内实现。