分布式测试执行

简介:
1 相关说明
  1.1 背景简介
  随着一个产品的自动化工作不断深入,自动化的case积累数量持续增长,绝大部分毫无依赖关系的case由于串行运行,测试执行时间达到小时界别,且不易于优化。另外,ci运行时所需机器资源的抢占互斥,运行机器的不稳定等问题也逐渐扩大。
  Hadoop分布式测试执行方案正是为了解决以上问题而产生,通过分布式执行,可以达到并行运行,提高执行效率的目的;另外,hadoop提供调度,重试等机制功能,可以提供给用户一个相对透明的计算资源池,减少用户对机器运行环境的依赖。
  1.2 分布式平台的选择
  本方案采用hadoop来作为分布式平台。首先是Hadoop是一个开源项目,有非常好的技术支持,二就是hadoop有成熟的分布式调度算法,可以很好的利用每台机器的cpu和内存资源,达到计算资源最优分配,三就是hadoop程序易于编写,便于维护。
  1.3 名词解释
  :apache基金会的开源分布式框架。
  Mapreduce :hadoop的计算模型,由map任务和reduce任务组成。
  Jobtracker  :hadoop计算系统的总控。
  Tasktracker  :hadoop计算系统的子节点。
  Slot(槽位) :tasktracker的最小计算分配单元,一个槽位可以对应一个map任务,一个机器启动一个tasktracker,槽位的话按照机器的cpu核数来分配,一般是”核数-1”。
  <2 分布式测试执行方案
  2.1 传统的单机测试执行流程
  一般的单机测试流程分为5步,如下图所示:
  1、lib库安装。包括测试框架的lib库安装以及基于该测试框架的产品业务层lib。
  2、测试环境安装。主要指被测对象的测试环境安装,包括数据库安装,server端安装等。
  3、case下载。从svn或者case库获取需要执行的case。
  4、case运行。
  5、发送报告。
  单机测试执行的优点在于逻辑简单,易于实现,缺点就是case要串行执行,无法有效里有机器的cpu和内存资源。举个例子,现在有一个8核16G的测试机,每个case的平均cpu使用率为10%,内存消耗1G,在这样的情况,一般可以做到至少6个case并行化,优化效率是不言而喻的。
  2.2 从单机测试到分布式测试执行的逻辑
  有了以上的五个步骤及相关分析,我们考虑其中可以并行执行来进行优化的就是测试执行这块了,其他lib库安装,测试环境安装等都基本是最小单元,不易切分了。
  所以从单机到分布式主要是Case执行集合的一个拆分。所以简单说,单机和分布式的区别就是case输入集合有变“而已,其他单机的测试执行过程基本不变。对于测试工程师来说,这个过程是透明的,只是执行case的环境从单机切换到多机。
  下图简要的表示了case从单机到多机的变化(6位的数字是caseid)。
  2.4 分布式测试集群架构设计
  整个分布式测试执行依托于一个公共的计算集群,这个计算集群由两部分组成,一部分是hadoop相关的,包括hadoop的总控,子节点的tasktracker服务。另外一部分就是公共环境,包括测试框架,公共工具例如valgrind等。前者通过jobtracker来管理,后者通过统一运维系统来管理,其功能基本就是公共环境的安装和维护。
  3 收益
  经过我们的实际项目实践,这部分的收益主要体现在如下两点:
  1、测试执行时间大幅优化。15台机器的情况,所有原测试执行时间要1-2小时的模块,优化到10分钟以内。
  2、机器资源的节省。通过公共集群的维护,保证所有机器cpu满负荷运作,避免了以往单机测试执行的cpu浪费。
  4 准入原则及发展方向
  4.1 分布式改造的准入原则
  并不是所有的测试执行都可以分布式化,在我们的实际操作过程中,总结出以下几点准入原则,供参考:
  1、空白机器可运行。通过一个总控脚本就可以做到依赖环境准备,lib库安装,测试case执行等。
  2、测试框架允许case并行。
  3、业务层case对外部不存在固定依赖,例如依赖于某个写死的目录。
  4、业务层case依赖的server端口,最好是随机的。
  5、不允许业务层去操作公共环境。
  4.2 后续可能的技术方向
  1、case按照执行时间切分。按照时间切分来替代按照case数切分。
  2、从分布式测试执行过渡到云测试服务。


最新内容请见作者的GitHub页:http://qaseven.github.io/
相关文章
|
2月前
|
测试技术
如何做好测试执行工作?
如何做好测试执行工作?
|
3月前
|
SQL Kubernetes 调度
DataphinV3.14 Flink SQL任务支持基于Session集群调试,模拟生产代码逻辑的调试效果
实时研发一直以来的都是通过local-debug的方式来调试开发中的Flink SQL任务,该方式有如下不足: 1. 支持的采样数据有限,且非是流式数据的调试。 2. 手动上传构造数据的方式较为繁琐,局限性较大。 为便于Flink SQL任务的调试,DataphinV3.14版本支持Flink SQL任务基于Session集群调试,期望做到像离线即席查询般方便地获取实时任务的输出结果,方便用户对线上的真实数据进行代码逻辑上的调试。
|
9月前
|
Java 测试技术 网络安全
14-Jmeter分布式测试
14-Jmeter分布式测试
|
分布式计算 大数据 调度
Spark 原理_运行过程_总结和流程 | 学习笔记
快速学习 Spark 原理_运行过程_总结和流程
84 0
Spark 原理_运行过程_总结和流程 | 学习笔记
|
存储 缓存 数据库
分布式执行模型
分布式执行模型
72 0
|
消息中间件 SQL NoSQL
只会单机执行定时任务?多机执行 yyds!
那我们是否有一种方法,可以让任务在多机同时执行,然后又可以避免多机同时处理相同数据的问题呢?这里给大家介绍一种多机分片的方式,也是最近在公司Get到的新技能。
115 0
|
NoSQL 前端开发 测试技术
|
JSON Java 关系型数据库
|
前端开发 测试技术
|
Java Web App开发 Python
seleniumGrid分布式远程执行测试脚本
seleniumGrid分布式远程执行测试脚本执行UI自动化测试脚本时,不仅可以在本地执行,也可以远程指定某计算机执行测试脚本,seleniumGrid为我们提供了这类服务,但还需要自己搭建环境。 一、本地计算机需要准备java环境和selenium-server-standalone-4.0.0-alpha-2.jar包,jar包主要开启本机的hub节点(理解成控制机)。
1429 0