本来早就打算要写一篇日志来讲讲ETL测试的自动化执行,以及ETL自动化测试框架实现的一些相关东东。前后托了近一个月,今天总算落实到键盘了。
不过由于部门组织结构调整,该ETL测试框架面临着刚出生就可能夭折的命运,现在写起来,似乎也夹杂一些悲壮。
其实这个ETL自动化测试框架是我在09年面试阿里巴巴ETL测试职位的时候就在脑海中盘旋了。当时的面试官,也是自己后来的主管boss说我们要自己搞一套ETL的自动化测试框架。然后我就怀揣着理想来了...
而10年7月入职之后,由于种种原因,该理想都未能付诸于实际。有环境的因素,也有自己积累不到位的原因。直到前一段时间,自己算是有了实现自己idea的机会之后,果断将其落实。终于按照自己想法的第一个产品诞生了。
在框架初生阶段,很大程度上借鉴了某PHP开源单元测试框架simpleTest的实现思路,主要包括其TestCase、Suite、Expecation、Assert、Report等元素的实现,也让自己对单元测试框架的实现思路有了更清晰的认识。
在此要重点感谢开源SimpleTest项目的所有贡献者,你们懂得。
框架简介:
该框架的用例执行和断言、报告等实现都是基于SimpleTest的实现思路。将其中关于web、浏览器等相关的内容排除,只留下Case、Suite、Report、Expecatation、Assert等相关组件,并增加了对应的用于ETL测试的Expecatation、Assert以及TestCase。
主要实现了SQL语句的执行、SQL执行结果的判断等。
如何使用:
1. 一个最简单的ETL测试用例:a.php
class A extends DBunitTestCase{ public $constr = "host=10.20.143.243 port=5132 dbname=aligputf8 user=gpadmin"; function testCountForA($stat_date){ $sqlact = " select 1; "; $sqlexp = " select 2; "; $this->assertLessThanCount($sqlact,$sqlexp); } }
上述代码的测试逻辑为检查SQL:select 1的结果是否比SQL:select 2的结果要小。
有了测试用例,执行还需要一个执行器,执行器代码如下:
#!/export/home/gpadmin/rosei.liuzq/php-install/bin/php <?php require_once('etl/runner.php'); //其实这就是执行器 class UserBasic extends TestSuite{ public function __construct(){ parent::__construct("UserBasic"); $this->addFile('hello',array('a.php')); //此处其实可以放多个的array('a.php','b.php',....) } }
我们将刚才完成的测试单元放在这个测试执行器中。
执行器中的addFile,可以add多个,如上注释所属,一次addFile生成一个测试Suite。
当然可以执行多次addFile。
ps:一般来讲一个项目的测试会有一个执行器,项目中的不同模块测试逻辑分别对应一个addFile,一个模块中的不同测试用例或针对不同表的测试,可以是一个个.php文件。执行器除了有执行用例的功能,也有组织项目测试的作用。
上述用例执行命令为:
cd dir //directory where you put the case and runner
./run.sh
运行结果为:
如果我们需要输出xml格式的结果,只需要在执行时加上-x即可:
cd dir //directory where you put the case and runner
./run.sh -x
结果如下:
2. 其他的Assert逻辑:
目前该ETL测试框架中共实现了如下Assert逻辑:
- assertScalarEqual //SQL执行结果与标量值比较:$this->assertScalarEqual($sql,1)
- assertSqlResult //两个SQL结果的比较: $this->assertSqlResult($sql1,$sql2)
- assertLessThanCount //上例演示
- assertCustomize //自定义Assert逻辑: $this->assertCustomize($sql,$cust_func)
class A extends DBunitTestCase{ public $constr = "host=10.20.143.243 port=5132 dbname=aligputf8 user=gpadmin"; function testCountForA($stat_date){ $sqlact = " select 1; "; $sqlexp = " select 2; "; $this->assertLessThanCount($sqlact,$sqlexp); } function testForTestArg($dateArg){ $sql = "select $dateArg"; $this->assertScalarEqual($sql,"20110909"); } }
cd dir //directory where you put the case and runner
./run.sh -d=20110909
相关推荐
针对ETL测试的时候需要注意的一些问题,看完之后你会有很大的帮助的。不能信你就试试看
通过实际测试,对目前市面上主流的几款ETL工具进行比较,仅供参考。
ETL实战ETL实战ETL实战ETL实战
etl-crontab调度设计器负责按时间周期执行指定的ETL任务,及查询ETL任务执行日志功能。该产品由国人用go语言开发,跨平台,轻量级,方便集成,详细功能及介绍请移步产品免费试用下载地址:...
ET技术及应用ET技术及应用ETL技术及应用 实例ETL技术及应用 实例ETL技术及应用 实例ETL技术及应用 实例ETL技术及应用 实例ETL技术及应用 实例ETL技术及应用 实例
ETL基础技能面试
ETL流程数据流图及ETL过程解决方案PPT课件.pptx
中国电信股份有限公司江苏分公司(简称江苏电信),为适应电信行业迅速变化市场竞争环境,希望整合全业务数据,要求ETL整合平台在ETL工具的辅助下,需要达到系统可配置、可管控、可二次开发、自动化流程等要求。...
ETL架构必备知识!
基于云技术的电信ETL方案+IBM刀片性能测试报告.pdf 如何使用ETL_技术.pdf 数据仓库ETl工具箱3.pdf 数据仓库ETl工具箱5.pdf 数据仓库ETl工具箱6.pdf 数据仓库ETl工具箱7.pdf 数据仓库ETl工具箱8.pdf 数据仓库...
在实际中应用etl的指导 实际使用etl数据清洗整合的方案。数据清洗 存储 转换的指导方案,理论联系实际。etl工具测评报告。
ETL流程是一个以数据为中心的工作流,对ETL工作流的执行过程进行论述,提出了一个算法,计算ETL工作流中各个活动的执行优先级,在工作流执行中为优先级相同且相互之间没有依赖关系的活动集创建多个线程,通过并行...
ETL概述及部分工具比较,基本点etl介绍
BI项目中ETL设计与思考.docx DataStage(ETL)技术总结.docx ETL增量抽取.docx ETL增量抽取方式.docx ETL工具点评.docx ETL常见性能瓶颈.docx ETL构建企业级数据仓库五步法.docx ETL高级教程.docx 三大主流ETL工具选型...
ETL工具 ,基于Kettle实现的Web版ETL工具,实现简单的数据抓取功能
Java分布式ETL框架
常见网站日志生成过程业务详解 企业数据采集方案介绍 Flume拦截器、channel选择器、sink 处理器回顾 Flume实现日志采集到HDFS并自动分区 定时调度Shell脚本实现日志数据分区上传HDFS ...ETL程序打包测试
ETL流程、数据流图及ETL过程解决方案
介绍ETL