简介:对于古代软件研发来说,继续、疾速、高质量、低危险地交付需要个性,是业务对研发的次要诉求。而要做到这一点,除了要有良好的架构设计、卓越的工程能力,疾速牢靠的测试反馈也是其十分重要的一环,达到这一点,须要依附测试自动化。作为面向企业开发者的 DevOps 平台,云效提供了丰盛的能力,帮忙大家在 DevOps 流程中落地测试自动化实际。
对于古代软件研发来说,继续、疾速、高质量、低危险地交付需要个性,是业务对研发的次要诉求。而要做到这一点,除了要有良好的架构设计、卓越的工程能力,疾速牢靠的测试反馈也是其十分重要的一环,达到这一点,须要依附测试自动化。
作为面向企业开发者的 DevOps 平台,云效提供了丰盛的能力,帮忙大家在 DevOps 流程中落地测试自动化实际。
简略来说,企业自建测试自动化体系,分为三种模式:
模式一:基于开源测试自动化工具
很多企业自建测试自动化,都是从抉择一个开源测试自动化工具开始的。一个开源测试自动化工具,往往蕴含以下几局部(以 RobotFramework 为例):
- 测试执行工具,如 robot
- 测试用例,如.robot 文件
- 测试后果和报告,如执行完生成的 log.html 和 report.html
- 测试能力库,用来实现特定的测试,如 SeleniumLibrary
对于一个测试自动化体系,往往还须要加上:
- 调度和执行平台
- 后果剖析与统计报表
- 测试后果告诉能力
基于云效,整个的架构是这样的。
- 测试自动化用例存储在云效代码平台的 git 仓库中
- 用于执行测试自动化的测试步骤,基于云效的自定义 step 能力创立
- 触发和串联代码、构建和自动化测试的云效流水线
- 告诉机制(钉钉音讯)
- 针对品质状况的数据报表,能够间接显示在流水线测试后果中,也能够将数据发送给自建的数据报表服务展现
以 RobotFramework 框架为例,在云效上接入开源测试自动化工具有以下几步。
- 抉择或编写对应开源测试自动化工具的 flow step
==============================
云效没有内置开源测试自动化组件,然而基于其提供 flow cli 工具,企业能够很容易地定制合乎本人要求的测试自动化组件。如何通过 flow cli 实现并公布一个 flow step,能够参考云效学院 flow cli 相干内容。
这里,仅以 RobotFramework 为例,对其要害局部做一下阐明。
首先通过 flow step init 命令初始化一个 flow step 组件的我的项目。
1.1 执行的环境和命令
在 step.yaml 文件中,image 为测试执行的环境镜像,这里是
registry.cn-hangzhou.aliyuncs.com/feiyuw/flow-robotframework:1.0,镜像的内容在 Dockerfile 外面定义。
在 items 中增加 type 为 shell 的输入框,用于设置执行命令,这里默认值为 robot -L Trace -d robot_logs .,当前目录“.”即为代码所在目录。
# ...
image: registry.cn-hangzhou.aliyuncs.com/feiyuw/flow-robotframework:1.0
items:
- label: 执行命令
name: STEP_COMMAND
type: shell
value: |
# NOTE: output directory should be robot_logs
robot -L Trace -d robot_logs .
# ...
1.2 红线配置
首先在 step.yaml 中定义红线配置组件,这些组件会在流水线配置步骤的时候显示给用户。
items:
- label: 红线信息
name: CHECK_REDLINES
type: addable_group
rules:
- require: false
add_button:
type: icon
icon: plus
text: 减少红线
tip:
icon: question-circle
description: 红线校验失败步骤标记为失败
template:
items:
- name: redline
label: 红线
position: flat
type: custom_redline_dropdown
datamap: '[{"key":"PassRate","type":"GE"}]'
rules:
-requires: false
flow step 编写及调试结束后,publish 到以后企业中。
- 在代码库中增加测试自动化用例
==================
对于针对整个产品或一个子系统的自动化测试,咱们倡议自动化测试用例保留在独自的代码仓库中;而对于针对某个特定利用的自动化测试,咱们倡议其测试用例保留在该利用的代码仓库中,并与开发应用同一个分支(举荐)。
将自动化测试用例与利用代码在同一个代码库中治理,有许多益处:
- 测试用例与代码相互匹配且是最新的,让自动化测试在开发阶段就能够及时染指
- 间接复用开发的分支模式,不必思考自动化用例的版本治理
- 开发和测试基于 git 代码库严密合作,不便落地 ATDD 这样的优良实际
- 容易集成到流水线中,当测试代码或者开发代码变更后都能疾速被执行和反馈,减速问题的定位和修复
示例:alpd-bot-ssh 的测试自动化用例。
alpd-bot-ssh 是一个 SSH 的服务,提供 IP 归属地查问和天气查问能力,该测试自动化用例基于 RobotFramework 框架实现。其测试自动化用例保留在代码库的 atest 目录下,构造如下:
atest
├── __init__.robot
├── ip.robot # 用于 ip 归属地场景的测试集
├── resources # 测试公共资源,包含通用变量定义、公共函数等
│ ├── common_resource.robot
│ └── ssh_lib.py
└── weather.robot # 用于天气查问场景的测试集
在代码根目录下,通过 robot -L Trace atest 执行测试。
- 增加测试自动化节点到流水线
=================
关上继续集成流水线,如果没有,在 flow 上创立一个。
- 编辑流水线,增加一个空白工作
2、增加自定义步骤,“RobotFramework 测试”
3、配置执行命令和红线
- 上传测试报告到云效,以在云效流水线执行后果中展现
============================
- 编辑第三步的测试自动化节点,增加一个步骤
- 配置测试报告目录(这里是 robot_logs)和测试报告入口文件(这里是 report.html)
- 同步测试后果到自建的报表零碎
==================
有些时候,咱们须要对测试后果进行进一步的统计分析,此时,仅靠测试自动化工具提供的报告就无奈满足了。通常,咱们会自建一个报表零碎。那么,云效中执行的测试自动化后果如何上传到咱们自建的报表零碎呢?
5.1 确保报表零碎可能被云效拜访到
因为网络问题,云效无法访问咱们建在公有网络环境中的报表零碎,要求报表零碎凋谢公网拜访接口。为了平安,咱们倡议仅凋谢必要的接口,同时做好 IP 白名单防护。
5.2 在 flow step 中增加上传报告步骤
关上步骤 1 的 flow step,编辑 step.sh,增加上传报告步骤。
留神:
该步骤须要放在 redline 查看之前,同时倡议传递的信息包含:测试后果、代码分支、代码版本、提交者、流水线名字等。
# ...
# sh -ex $WORK_SPACE/user_command.sh
bash -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}'`
# upload test result to report server
python3 /root/upload_to_report_server.py $OUTPUT_XML $CI_COMMIT_REF_NAME $CI_COMMIT_SHA $EMPLOYEE_ID $PIPELINE_NAME $BUILD_NUMBER
redline Passed: 胜利:$STEP_ROBOT_PASS:Success Failed: 失败:$STEP_ROBOT_FAILED:Error PassRate: 成功率:$STEP_ROBOT_PASSRATE:Default
模式二:测试自动化自建 Jenkins
对于曾经自建 Jenkins 等工具用于测试自动化调度执行,甚至在 Jenkins 上进行了二次开发和定制的团队,或者对于像 ioT 开发这样有非凡环境要求的利用,复用现有的工具资源更为经济。为此,云效提供了与客户现有 Jenkins 服务无缝对接的能力,帮忙企业通过串联起研发测试。
- 确保自建 Jenkins 可能被云效拜访到
=======================
自建 Jenkins 服务须要反对公网拜访,以便云效可能拜访并触发对应的工作。同样,为了平安思考,倡议仅凋谢必要的接口,并开启 IP 白名单防护。
- 增加 Jenkins 工作节点到流水线中
======================
编辑云效流水线,增加一个工作节点,抉择 Jenkins 工作。
其中调用了测试平台的两个接口,并且生成了一个 index.html 的测试报告文件。留神:该测试报告只是将申请转发到了自建测试平台的对应页面上。
- 增加测试自动化节点到流水线
=================
在流水线上增加空白工作节点,在其中增加一个步骤,抉择后面咱们自定义的 flow step(记得 publish 到对应的企业中)。在步骤中配置好测试平台地址和测试用例,并设置好红线信息。
- 查看测试报告
==========
在测试节点增加报告上传步骤,测试报告目录填“report”,测试报告入口文件为“index.html”。
- 数据统计与报表
===========
在流水线执行后果中能够看到通过率等 summary 信息,具体的统计与报表倡议在自建测试自动化平台内实现。
总结
针对下面提到的三种自建测试自动化的状态,这里给一个简略的小结,帮忙大家更好地进行抉择。
- 当下还没有实际测试自动化且打算开始建设测试自动化能力 :倡议抉择模式一,基于开源测试自动化工具来建设。这样能够把咱们的精力集中到具体的测试工作,让测试自动化可能疾速落地,同时又能享受到开源社区的大量的技术积淀,少走弯路。
- 曾经搭建了 jenkins,然而没有进行二次开发,仅用来执行自动化测试 :倡议抉择模式一,基于开源测试自动化工具来建设。这样能够节俭保护 jenkins 的老本,同时测试报告和卡点能够更好地与研发过程整合,防止工具割裂和数据孤岛。
- 基于 jenkins 搭建了 CICD 流水线,或基于 jenkins 进行了二次开发和工具整合 :倡议抉择模式二,测试自动化自建 jenkins。这样能更快地进行零碎整合,同时,也不会影响后续的迁徙和改良动作。
- 自研测试自动化执行和剖析平台 :倡议抉择模式三,自建测试自动化平台。如果不打算推倒重建,咱们还是倡议采纳现有零碎与云效整合的形式,防止工具切换对团队的烦扰,也能够更好地复用已有资源。
本文作者:云效专家团张裕,阿里云工程实际专家,曾在诺基亚网络负责测试自动化和 CICD 工具平台开发,做过测试自动化教练,也在初创企业做过开发、运维负责人和测试架构师,推崇继续、疾速、高质量的软件交付形式,目前专一于云原生和 DevOps 畛域。
原文链接
本文为阿里云原创内容,未经容许不得转载