Hi, 如果有任何想法与我沟通, 请用: lifr_nj 在 msn.com

此贴用来跟踪rfint ta项目中的经验,教训和体会

上一篇 / 下一篇  2009-11-24 16:07:27 / 个人分类:TA


   RFint是目前team测试的项目。它的大部分testcase已经ready,并开始了manualtest。现在要开始自动测试的开发。

测试环境

    * 一台celerra cabinate,包括至少两个datamover
    * 一台clariion作为后台storage
    * 若干linux client
    * 若干solaris client
    * 若干windows client
    * 也许还有hpunix client


1. 分层
主要分成3层。

最上层(distribution runner)
    主要负责处理“在多个client上运行测试”的问题。具体包括测试程序的deploy,execution and report generation。
    用ssh/scp来处理网络通信,用nfs/cifs server来处理文件共享/交换的问题。(don't invent wheels)
    这一层用bash开发

中间层(test runner)
    中间层包装test这样一个概念。test是一系列相关testsuite/testcase的集合
    test里所有的testsuite/testcase共享相同格式的testenv, testconf
    test里所有的testsuite/testcase共享library,实现代码重用。
    中间层还向最上层提供了统一的调用接口
    中间层可以用任何合适特定test的语言开发(向上的接口基于cli)
    test的范围的划分是考验经验的。小的test更容易理解,但代码重用性低。

最下层(test logic implemenation)
   具体的testsuite and testcase, 执行实际的测试逻辑
   在testsuite层次,所有的testcase可以共享testconf,setup,cleanup和library
   一般和中间层使用相同的开发语言

1. 从自动化测试的角度,测试可以分成两种
一种是数据驱动的,这是程序擅长的。
一种是过程驱动的,这是人类擅长的。

一般regular的testcase容易数据驱动
一般negative的testcase都是过程驱动的

应该尽可能把过程驱动的testcase转化为数据驱动的testcaes。

1. 如何把过程驱动的testcae转化为数据驱动的testcase
构造更通用的测试环境,满足更多的testcase
    比如有两个关于文件copy的case,一个是在folder内部copy,一个事跨folder copy,那么构造一个多folder的环境,就能满足这两个testcase的要求

构造更丰富的操作集合,包括多个testcase中的操作
    比如一个testcase是关于文件写操作,另外一个是关于文件读操作,那么构造一个既包括文件写又包括文件读的操作集合,就能实现这两个testcase的覆盖要求

关键字驱动
    有时候,仅仅是data还不足以覆盖所有的测试。这时,可以加少量能“影响”测试逻辑的关键字(keyword)。
    比如对于文件写有“同步”和“异步”两种,那么可以加入对应的关键字。但增加这样的关键字会提高测试逻辑的复杂性,所以一定要把握好度。

通过上面的方式,可以程序擅长的方式处理更多的testcase。
   
1. 自动化测试case和手工测试case不用一一对应
由上可见,自动化的case和手工测试的case很不一样,完全不应该一一对应。

1. 写简单的程序
最上层和中间层通过cli的方式调用,它们完全是独立的。

中间层和最下层是API级的,需要小心不要让他们联系太多。现在中间层只为最下层提供testenv, testconf和common library.

1. testresult打印到testlog里
没有专门的test result文件,而是打印到testlog里。这样的好处是
    简化了log的管理,framework的代码更简单
劣势是需要另外的程序来从testlog中吧result parse出来,在重新格式化。

1. setup/cleaup在那里执行的问题
在test level有setup和cleanup,这没有什么问题,但到底是testsuite还是testcase level加入setup/cleanup,这是一个问题。

现在的方案是在testsuite level。也就是在开始运行testsuite里的testcase之前,执行setup,然后依次执行testcase。 而不是,在运行每一个testcase前都运行setup。
这样的好处是,testcase可以实现自己的setup/cleanup,但framework不负责管理他们。







TAG:

 

评分:0

我来说两句

Open Toolbar