UML软件工程组织

 

 

Ruby+Watir经验谈: 设计RUTF的TestRunner以产生格式化的测试结果
 
作者: lifr 来源: 51testing博客
 

对一个测试框架来说,测试结果报告是很重要的部分。但是ruby unit test framework并没有提供一个testrunner来输出格式化的结果,所以必须自己写一个。

RUTF的架构

在开始写自己的testrunner之前,我们需要理解ruby unit test framework(简写为RUTF)的结构。

RUTF执行TestCase的过程简单明了,它里面有4个概念
    原料:TestCase/TestSuite
    执行配置者:TestRunner
    执行体:TestRunMediator
    产品:TestResult

处在中枢位置的是TestRuner,它会创建和配置 执行体,把原料输入给执行体,并让执行体跑起来。

TestRunner和TestRunMediator的关系

需要说明一下 TestRunner和TestRunMediator的关系。这是一个 监听器 模式的应用。被监听者是TestRunMediator,可以为下列事件向一个TestRunMediator注册listener。
        事件的宿主      事件类型
        TestRunMediator :STARTED, :FINISHED, :RESET    
        TestCase    :STARTED, :FINISHED   
        TestSuite    :STARTED, :FINISHED
        TestResult      :FAULT, :CHANGED

而TestRunner正是通过提供不同的listener,而获得不同形式的结果报告。所以为了获得格式化的测试结果报告,我们需要提供自己的TestRunner。

!!!TestCase的含义,在定义时和运行时是不一样的

另外一个需要关注的地方是,对于RUTF来说,一个最小的执行单位(我叫它测试单元TestUnit,--注:这个不是RUTF的概念)不是一个 TestCase 实例,而是一个TestCase实例的一个test方法。所以在定义时有下面的事实
    一个TestCase是TestUnit的集合
    一个TestSuite是TestCase的集合

但在运行时,在RUTF的看来,一个test方法就是一个'testcase',而一个TestCase,作为'testcase'的集合,叫做'testsuite'。所以事件类型TestCase::STARTED表示的其实是一个test方法开始执行的事件。同理,TestSuite::STARTED表示的是我们定义的一个TestCase开始执行的事件。


转换xml形式的结果到Html
    # <run time='0.031'>
    #    <suite name='TC_MyTest'>
    #        <test name='test_a(TC_MyTest)' passed='true'>
    #        <result error_count='0' assertion_count='1' failure_count='0'/>
    #        </test>
    #        <test name='test_b(TC_MyTest)' passed='false'>
    #        <result error_count='0' assertion_count='1' failure_count='1'>
    #            <fault msg='test_b(TC_MyTest): failure in test_b.'>Failure:
    #            test_b(TC_MyTest) [testrunner.rb:162]:
    #            failure in test_b.&lt;false&gt; is not true.
    #            </fault>
    #        </result>
    #        </test>
    #    <suite>
    # <run>

xml的结果适合作为中间数据保存,但其可视性和可理解性还不好,还需要把xml转换为html。in ruby way,最方便的是用erb模版,在加上一个css。我们就能得到漂亮的报表了

 

组织简介 | 联系我们 |   Copyright 2002 ®  UML软件工程组织 京ICP备10020922号

京公海网安备110108001071号