行为驱动开发之四,为自动化测试(运行Cucumber)提速
作者:网络转载 发布时间:[ 2011/10/13 11:26:13 ] 推荐标签:
提速法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 |

sales@spasvo.com