提速法3:干掉sleep。

  这个本来不想说,不过我搜了一把,sleep还真是多啊。去掉每个sleep的方法都有不同,这里要根据具体情况分析,不赘述了。实在不行,sleep这一类的Scenario,可以打一个标签,叫@long,或者@sleep,在运行时,去掉这类标签。将其由每小时运行一次,改为深夜运行,每天一次吧。

  提速法4:减少模块依赖。

  控制集成测试与系统测试的用例数,对于提高自动化运行速度,很有帮助。如下面的例子:

Scenario: user action should be logged  

2   Given user login bank website  

3   When user transfer "20" bucx to stock  

4   Then bank should log as:  

5   | userid | mount | date | 

6   | $user | 20      | today| 
 


  开始时,我们的step为:

Then /^bank should log as:$/ do |ast|  

2   ast.hashes.each do |hash|  

3     sleep 5 

4     logdb.search(hash).should == true 

5   end 

6 end
 


  这里的问题是:引入log系统的数据库。数据从web系统,到log系统,后被存入数据库,耗时较长,且不定时常。只能靠长时间的sleep来解决。如果将所产生的日志写在文件里,只检测文件,那么速度快多了。修改后,step为:

Then /^bank should log as:$/ do |ast|  

2   ast.hashes.each do 

3     open("log", r) do |f|  

4       f.read.should.include ("userid"+hash["user"]+"mount"+hash["mount"]+"date"+hash["date"])  

5     end 

6   end 

7 end
 


  当将log系统剥离之后,这个Scenario的执行时间变短了,更提高了模块化的程度。即,如果log系统当前版本不稳定时,依然不会影响web系统的测试。

  提速法5:精简数据

  这可能是大部分测试人员会发生的问题,用例的过分复杂,导致step(步骤)太多,或是data(数据)太复杂。如:

Scenario: regiestered user login  

02   Given registered users as:  

03     |user | email                | password | 

04     | a     |a@cnblogs.com | 123           | 

05     | b-B_|b-B_@cn.com    |3445         | 

06     | c      |c@haha.com     |1                |  

07   When users login with password: 

08     |user | password|  

09     | a     | 123   | 

10     | b-B_| 3445  | 

11     |c      |2       | 

12     |d      | 1233 |  

13   Then users should see:  

14     |user    | msg       | 

15     |a        | welcome | 

16     |b-B_   |    welcome | 

17      | c      | incorrect password| 

18      |d | invalid user |