云效DevOps实践-如何基于云效实现测试自动化集成和分析
简介: 对于现代软件研发来说,持续、快速、高质量、低风险地交付需求特性,是业务对研发的主要诉求。而要做到这一点,除了要有良好的架构设计、卓越的工程能力,快速可靠的测试反馈也是其非常重要的一环,达到这一点,需要依靠测试自动化。 作为面向企业开发者的DevOps平台,云效提供了丰富的能力,帮助大家在DevOps流程中落地测试自动化实践。
对于现代软件研发来说,持续、快速、高质量、低风险地交付需求特性,是业务对研发的主要诉求。而要做到这一点,除了要有良好的架构设计、卓越的工程能力,快速可靠的测试反馈也是其非常重要的一环,达到这一点,需要依靠测试自动化。
作为面向企业开发者的DevOps平台,云效提供了丰富的能力,帮助大家在DevOps流程中落地测试自动化实践。
简单来说,企业自建测试自动化体系,分为三种形式:
形式一:基于开源测试自动化工具
很多企业自建测试自动化,都是从选择一个开源测试自动化工具开始的。一个开源测试自动化工具,往往包含以下几部分(以RobotFramework为例):
- 测试执行工具,如robot
- 测试用例,如.robot文件
- 测试结果和报告,如执行完生成的log.html和report.html
- 测试能力库,用来完成特定的测试,如SeleniumLibrary
对于一个测试自动化体系,往往还需要加上:
- 调度和执行平台
- 结果分析与统计报表
- 测试结果通知能力
基于云效,整个的架构是这样的。
- 测试自动化用例存储在云效代码平台的git仓库中
- 用于执行测试自动化的测试步骤,基于云效的自定义step能力创建
- 触发和串联代码、构建和自动化测试的云效流水线
- 通知机制(钉钉消息)
- 针对质量情况的数据报表,可以直接显示在流水线测试结果中,也可以将数据发送给自建的数据报表服务展示
以RobotFramework框架为例,在云效上接入开源测试自动化工具有以下几步。
1. 选择或编写对应开源测试自动化工具的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到当前企业中。
2. 在代码库中添加测试自动化用例
对于针对整个产品或一个子系统的自动化测试,我们建议自动化测试用例保存在单独的代码仓库中;而对于针对某个特定应用的自动化测试,我们建议其测试用例保存在该应用的代码仓库中,并与开发使用同一个分支(推荐)。
将自动化测试用例与应用代码在同一个代码库中管理,有许多好处:
- 测试用例与代码互相匹配且是最新的,让自动化测试在开发阶段就可以及时介入
- 直接复用开发的分支模式,不用考虑自动化用例的版本管理
- 开发和测试基于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 执行测试。
3. 添加测试自动化节点到流水线
打开持续集成流水线,如果没有,在flow上创建一个。
- 编辑流水线,添加一个空白任务
2、添加自定义步骤,“RobotFramework测试”
3、配置执行命令和红线
4. 上传测试报告到云效,以在云效流水线执行结果中展示
- 编辑第三步的测试自动化节点,添加一个步骤
- 配置测试报告目录(这里是robot_logs)和测试报告入口文件(这里是report.html)
5. 同步测试结果到自建的报表系统
有些时候,我们需要对测试结果进行进一步的统计分析,此时,仅靠测试自动化工具提供的报告就无法满足了。通常,我们会自建一个报表系统。那么,云效中执行的测试自动化结果如何上传到我们自建的报表系统呢?
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服务无缝对接的能力,帮助企业通过串联起研发测试。
1. 确保自建Jenkins能够被云效访问到
自建Jenkins服务需要支持公网访问,以便云效能够访问并触发对应的任务。同样,为了安全考虑,建议仅开放必要的接口,并开启IP白名单防护。
2. 添加Jenkins任务节点到流水线中
编辑云效流水线,添加一个任务节点,选择Jenkins任务。
其中调用了测试平台的两个接口,并且生成了一个index.html的测试报告文件。注意:该测试报告只是将请求转发到了自建测试平台的对应页面上。
2. 添加测试自动化节点到流水线
在流水线上添加空白任务节点,在其中添加一个步骤,选择前面我们自定义的flow step(记得publish到对应的企业中)。在步骤中配置好测试平台地址和测试用例,并设置好红线信息。
3. 查看测试报告
在测试节点添加报告上传步骤,测试报告目录填“report”,测试报告入口文件为“index.html”。
4. 数据统计与报表
在流水线执行结果中可以看到通过率等summary信息,详细的统计与报表建议在自建测试自动化平台内实现。
总结
针对上面提到的三种自建测试自动化的形态,这里给一个简单的小结,帮助大家更好地进行选择。
- 当下还没有实践测试自动化且打算开始建设测试自动化能力:建议选择形式一,基于开源测试自动化工具来建设。这样可以把我们的精力集中到具体的测试工作,让测试自动化能够快速落地,同时又能享受到开源社区的大量的技术沉淀,少走弯路。
- 已经搭建了jenkins,但是没有进行二次开发,仅用来执行自动化测试:建议选择形式一,基于开源测试自动化工具来建设。这样可以节省维护jenkins的成本,同时测试报告和卡点可以更好地与研发过程整合,避免工具割裂和数据孤岛。
- 基于jenkins搭建了CICD流水线,或基于jenkins进行了二次开发和工具整合:建议选择形式二,测试自动化自建jenkins。这样能更快地进行系统整合,同时,也不会影响后续的迁移和改进动作。
- 自研测试自动化执行和分析平台:建议选择形式三,自建测试自动化平台。如果不打算推倒重建,我们还是建议采用现有系统与云效整合的方式,避免工具切换对团队的干扰,也可以更好地复用已有资源。
本文作者:云效专家团张裕,阿里云工程实践专家,曾在诺基亚网络负责测试自动化和CICD工具平台开发,做过测试自动化教练,也在初创企业做过开发、运维负责人和测试架构师,推崇持续、快速、高质量的软件交付方式,目前专注于云原生和DevOps领域。
本文为阿里云原创内容,未经允许不得转载
云效DevOps实践-如何基于云效实现测试自动化集成和分析的更多相关文章
- 云平台DevOps实践
基于TFS的.net技术路线的云平台DevOps实践 DevOps是近几年非常流行的系统研发管理模式,很多公司都或多或少在践行DevOps.那么,今天就说说特来电云平台在DevOps方面的实践吧. ...
- 基于TFS的.net技术路线的云平台DevOps实践
DevOps是近几年非常流行的系统研发管理模式,很多公司都或多或少在践行DevOps.那么,今天就说说特来电云平台在DevOps方面的实践吧. 说DevOps,不得不说DevOps的具体含义.那么,D ...
- 海西 · 云交付 DevOps实践落地方案
一.背景概述 (一)产品背景 1.互联网+的需要 在信息越来越繁杂的互联网时代,公司所运行的项目越来越多,项目相关服务繁多,服务之间存在复杂的依赖关系,运维与管理任务越来越繁重,手工交付需要花 ...
- DevOps实践之一:基于Docker构建企业Jenkins CI平台
基于Docker构建企业Jenkins CI平台 一.什么是CI 持续集成(Continuous integration)是一种软件开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来 ...
- 基于python的unittest测试框架集成到jenkins(Mac)
1.jenkins部分 1.1 安装jenkins jenkins下载地址:https://jenkins.io/download/ 安装步骤,疯狂点击下一步 1.2 打开jenkins服务 在浏览器 ...
- 从单个系统到云翼一体化支撑,京东云DevOps推进中的一波三折
作者:王利莹 采访嘉宾:京东云DevOps团队负责人 郑永宽 今年,IDC 特别针对中国地区发布了<IDC MarketScape:中国 DevOps 云市场2019,厂商评估>研究报告, ...
- 一站式云原生体验|龙蜥云原生ACNS + Rainbond
关于 ACNS 龙蜥云原生套件 OpenAnolis Cloud Native Suite(ACNS)是由龙蜥社区云原生 SIG 推出的基于 Kubernetes 发行版本为基础而集成的套件能力,可以 ...
- 《软件测试自动化之道》读书笔记 之 基于反射的UI测试
<软件测试自动化之道>读书笔记 之 基于反射的UI测试 2014-09-24 测试自动化程序的任务待测程序测试程序 启动待测程序 设置窗体的属性 获取窗体的属性 设置控件的属性 ...
- 云效Flow如何实现阿里云ECS多环境发布
一.背景 云效Flow基于标签功能实现阿里云ECS多环境发布,在软件开发和部署过程中,我们的软件往往需要在不同的运行环境中运行,例如:开发人员本地开发环境.测试团队的测试环境.还有类生产环境和生产环境 ...
- 阿里巴巴如何进行测试提效 | 阿里巴巴DevOps实践指南
编者按:本文源自阿里云云效团队出品的<阿里巴巴DevOps实践指南>,扫描上方二维码或前往:https://developer.aliyun.com/topic/devops,下载完整版电 ...
随机推荐
- CMake 用法总结(转载)
原文地址 什么是 CMake All problems in computer science can be solved by another level of indirection. David ...
- 数与计算机 (编码、原码、反码、补码、移码、IEEE 754、定点数、浮点数)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- Linux DISPLAY环境变量的妙用(error:QXcbConnection: Could not connect to display) ,xhost 命令, 通过ssh连接显示界面
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- 面试官:小伙子,能聊明白JMM给你SSP!我:嘚吧嘚吧一万字,直接征服面试官!
写在开头 面试官:小伙子,JMM了解吗? 我:JMM(Java Memory Model),Java内存模型呀,学过的! 面试官:那能给我详细的聊一聊吗,越详细越好! 我:嗯~,确定越详细越好?起码得 ...
- 【732. 我的日程安排表 III】线段树求解
class MyCalendarThree { public static void main(String[] args) { MyCalendarThree myCalendarThree = n ...
- 提升UE5写实效果的项目设置
随着虚幻引擎5(Unreal Engine 5,简称UE5)的发布,游戏开发者和数字艺术家们迎来了一个全新的机会,可以在其强大的渲染引擎下创建更加逼真和令人惊叹的游戏和虚拟场景.然而,要实现出色的写实 ...
- 捉虫日记 | MySQL 8.0从库某些情况下记录重放的CREATE TABLE、DROP TABLE语句到慢日志(slow log)
作者:卢文双 资深数据库内核研发 本文首发于 2023-11-30 20:47:35 https://dbkernel.com 问题描述 当主从复制采用 binlog 的行模式时,如果从库启用 slo ...
- 说说你对vue的mixin的理解,有什么应用场景?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.mixin是什么 Mixin是面向对象程序设计语言中的类,提供了方法的实现.其他类可以访问mixin类的方法而不必成为其子类 Mixi ...
- [Oracle]细节、经验
[版权声明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131054454 出自[进步* ...
- C# 剪裁图片
/// <summary> /// 剪裁图片 /// </summary> /// <param name="src">原图片</para ...