软件测试自动化中脚本开发经验分享(2)

发表于:2014-08-27来源:uml.org.cn作者:不详点击数: 标签:脚本
Case3:对2个有序文件进行merge,构造case的时候,构造文件$1,$2进行 merge,如果$1先结束,会造成$1的最后一条还 会不断打印出来,使文件无序,如果$2文件

  Case3:对2个有序文件进行merge,构造case的时候,构造文件$1,$2进行 merge,如果$1先结束,会造成$1的最后一条还 会不断打印出来,使文件无序,如果$2文件先结束,则不会出现该情况,构造数据验证时要注意等价类划分情况,保证所有情况都被测试到。

  错误代码:

 
77 awk '
78 BEGIN{
79 key_url=""
80 key_all=""
81 ret=1
82 }
83 {
84 if($2<'$OLDEST_TIME') next
85 url=$1
86 while( url>key_url){ ######修改为while(ret>0 && url>key_url)

87 if(key_all) print key_all
88 while((ret=getline line < "'$1'")>0){
89 sp=index(line, " ")
90 tmp_url=substr(line, 1, sp-1)
91 if(tmp_url>key_url){
92 key_url=tmp_url
93 key_all=line
94 break
95 }
96 print line
97 }
98 if(ret==0) break
99 }
100 print
101 }
102 END{
103 if(ret) print line
104 while(ret=getline line < "'$1'"){ #######修改为((ret=getline line < "'$1'")>0 print line
105 print line
106 }
107 }' $2

  4、加快脚本测试方法

  做任何事情,如果想加快,都有一些熟知的方法:1、并行处理; 2、借助于工具,自动化不需要人工介入的部分;3、加快必须人工部分的速度。如果把上面的基本方式映射到我们的脚本测试中:

  4.1 并行执行多个CASE

  我们可以对多次运行做并行化。对于脚本类测试,大多数是挖掘类,基于一个比较复杂的测试周边环境,但是,不会修改本模块以外的环境和数据。

  我们可以利用一个周边环境,部署多个被测程序,通过修改conf来保证运行:

  a)对同一台机器部署多个不同目录(减少搭建周边环境)

  b)对不同机器相同路径部署(减少修改conf)

  对不同目录进行不同case运行。比如,新旧对比,性能,功能等同时进行。同时对多个粒度进行测试,避免因为某次运行,占用环境,而堵塞我们的测试过程。

  4.2 借助工具

  自动化操作步骤,这个我们自己可以编写test脚本来完成,比如性能监控,环境清理等功能。

  借助于自动化通用工具,比如类似编译器的变量检查,路径检查,函数接口检查等,实现脚本之间调用关系和数据依赖关系的检查等。对很多产品线的公共问题,统一处理,这些都是大组、专人来开发和维护。

  4.3 脚本测试技巧

  人是灵活的,不是所有的工作都适合自动化。脚本测试设计中和代码逻辑强相关的部分,不易自动化,因为自动化要兼容多种可能性的时候,太复杂,而且不能保证100%的准确率,还是需要人工参与,比如:

  问题1:if的异常分支,空文件构造,数据的清空逻辑,数据的历史维护逻辑,ssh逻辑,如何快速验证?

  问题2:我们为了不同粒度的测试,需要多次运行脚本,有些脚本运行时间很长,是否可以一次运行,测试完所有粒度的功能?

  上面这个例子中的一些技巧:

  A)异常分支,我们可以通过添加语句mkdir –p a;rm a,来保证#?的检测

  B)构造各种逻辑,或者看代码,看是否满足线上对数据逻辑的需求

  C)中间数据的保留,对需要长时间运行的代码块儿,插上桩,将结果cp到其他文件,缩短时间,后续修改脚本代码,利用备份的中间文件多次独立运行,节省时间。

  D)成功运行一次,和多次运行相结合,对中间文件如果在脚本被删除,需要我们再需要关注的关键点cp得到bak文件,运行一次后,保证任何段的代码(粒度),单独都可以运行。加上多环境,我们就可以在一次成功运行后,测试完所有的功能,同时并行完成性能测试。)

  E)多机不同用户部署,可以变为单机不同用户部署;总控和运行机器,也可以通过单台模拟,和自己建立信任关系,来验证功能。

原文转自:http://www.uml.org.cn/Test/201206143.asp