ETL测试的自动化执行及回归

上一篇 / 下一篇  2012-07-06 18:11:09 / 个人分类:数据仓库

(转)

本来早就打算要写一篇日志来讲讲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

Php代码

  1. class A extends DBunitTestCase{   
  2.       public $constr = "host=10.20.143.243 port=5132 dbname=aligputf8 user=gpadmin";   
  3.       function testCountForA($stat_date){   
  4.            $sqlact = "   
  5.                 select 1;   
  6.            ";   
  7.            $sqlexp = "   
  8.                 select 2;   
  9.            ";   
  10.            $this->assertLessThanCount($sqlact,$sqlexp);   
  11.       }   
  12. }  
 

上述代码的测试逻辑为检查SQL:select 1的结果是否比SQL:select 2的结果要小。

有了测试用例,执行还需要一个执行器,执行器代码如下:

Php代码

  1. #!/export/home/gpadmin/rosei.liuzq/php-install/bin/php   
  2. <?php   
  3.   
  4. require_once('etl/runner.php'); //<SPAN style="COLOR: #ff00ff">其实这就是执行器</SPAN>  
  5.   
  6.   
  7.   
  8.   
  9. class UserBasic extends TestSuite{   
  10.     public function __construct(){   
  11.         parent::__construct("UserBasic");   
  12.         $this->addFile('hello',array('a.php'));  <SPAN style="COLOR: #ff00ff">//此处其实可以放多个的array('a.php','b.php',....)</SPAN>  
  13.   
  14.   
  15.     }   
  16. }  

 

我们将刚才完成的测试单元放在这个测试执行器中。

执行器中的addFile,可以add多个,如上注释所属,一次addFile生成一个测试Suite。

当然可以执行多次addFile。

 

ps:一般来讲一个项目的测试会有一个执行器,项目中的不同模块测试逻辑分别对应一个addFile,一个模块中的不同测试用例或针对不同表的测试,可以是一个个.php文件。执行器除了有执行用例的功能,也有组织项目测试的作用。

 

上述用例执行命令为:

Shell代码
  1. cd  dir  <SPAN style="COLOR: #ff00ff">//directory where you put the case and runner</SPAN>   
  2.   
  3.   
  4. ./run.sh  
 

运行结果为:

 

如果我们需要输出xml格式的结果,只需要在执行时加上-x即可:

 

Shell代码
  1. cd  dir <SPAN style="COLOR: #ff00ff"> //directory where you put the case and runner</SPAN>   
  2.   
  3.   
  4. ./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)
最后一种方法用的很少,主要针对Assert逻辑复杂且不常见的情况,$cust_func为一个用户自定义回调函数。

3. 其它可用参数:

除了上面说的-x参数之外,该框架还根据实际需求提供了另外一个重要的参数-d,用来为用例脚本inject运行时参数。类似于我们常用的main(String[] args)中的args。

具体用法如下:
用例:
Php代码
  1. class A extends DBunitTestCase{   
  2.       public $constr = "host=10.20.143.243 port=5132 dbname=aligputf8 user=gpadmin";   
  3.       function testCountForA($stat_date){   
  4.            $sqlact = "   
  5.                 select 1;   
  6.            ";   
  7.            $sqlexp = "   
  8.                 select 2;   
  9.            ";   
  10.            $this->assertLessThanCount($sqlact,$sqlexp);   
  11.       }   
  12.   
  13.       function testForTestArg($dateArg){   
  14.            $sql = "select $dateArg";   
  15.            $this->assertScalarEqual($sql,"20110909");   
  16.       }   
  17. }  
 
执行的时候需要加上-d参数:

Shell代码
  1. cd  dir  <SPAN style="COLOR: #ff00ff">//directory where you put the case and runner</SPAN>   
  2.   
  3.   
  4. ./run.sh -d=20110909  
 
运行结果:



之所以加-d参数因为,数据仓库中的数据一般是安天分隔,而且每天的数据很大。我们在测试的时候,往往用一天的数据完成,然而,在功能修改的时候,或项目发布前 ,我们需要用另外一些天的数据进行回归测试。

例如,我们在发布的前一个星期时间里面,都需要用每天的数据进行测试。
这样,我们的工作就会变得异常简单,将每天的数据同步到测试库中之后就只需要./run.sh -d=[date]就可以了。
既能保证了回归测试的覆盖,有高效,我们可以有充足的时间做机器做不了的事情。

最后附上该框架的源代码(见附件),安装方法就不讲了。很简单,直接解压放到php安装目录的lib/php下即可。


http://liuzhiqiangruc.iteye.com/blog/1180973

TAG:

 

评分:0

我来说两句

日历

« 2024-05-11  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 151639
  • 日志数: 33
  • 建立时间: 2012-06-27
  • 更新时间: 2013-04-02

RSS订阅

Open Toolbar