博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Cucumber入门之_Hooks&Background
阅读量:6641 次
发布时间:2019-06-25

本文共 2532 字,大约阅读时间需要 8 分钟。

Hooks &  Background

 

Hooks 

在很多情况下,我们需要在每个scenario之前(before)和之后(after)执行某些相同的操作。比如说在测试完成后要关闭浏览器。在Cucumber中,我们可以使用hooks. 在Cucumber中,有三种不同的hooks:

 

  Before:     在每个scenario前执行

  After:       在每个scenario后执行

  AfterStep: 在每个scenario后执行

 

我们可以把这些hooks放在features文件夹下面的任何ruby文件里面,但一般推荐的做法是把它们放在features/support/hooks.rb 文件里,这样让我们更容易记住我们的代码放在哪。

 

另外,Hooks可以被定义任意次。如果在每个scenario之前有十件不同的事需要我们去处理,我们可以定义十个Before 钩子(hooks),他们会按定义的顺序去执行。

 

当我们有很多个hooks时,我们有时候可能不需要让它们全部运行,这时候我们就可以使用标签钩子(tagged hooks).

 

Tagged Hooks      

标签hooks跟一般的hooks差不多,但是它只有特定的scenario上运行。即: 跟它有相同tag的 scenario才会执行。

例:

1   Before("@foo") do 2 3     puts "This will run before each scenario tagged with @foo" 4 5   end

 

优缺点:

       优点:很显然,hooks的优点是可以在每个scenario之前或之后做一些共同的操作。

       缺点:Hooks是在Ruby文件中定义的,对于非技术人员来说是不易读的,除非case失败,否则不会有什么证据表明它们的存在。在这种情况下,我们就可以使用Background.

 

Background

当我们希望steps在feature文件里面可见时,我们可以使用background代替Before钩子,它们可以为每个scenario创建逻辑的上下文。

 

Background会在每个scenario之前执行,就像Before钩子一样。但如果存在Before 钩子,那个它们会先于background执行。

 

当我们有相同的操作时,为了遵守DRY原则,我们可以选择hooks或background。至于选择哪一种方式,取决于当它们明确的出现在feature文件里是否有价值。

 

下面看一个小示例:

目录结构:

 

testhook.feature

1 Feature: Test how to use hooks  2   In order to learn how to use hooks  3   as a learner  4   I want to do some practice  5  6 @hotel  7 Scenario:  search a hotel  8   Given I visit to hotel launch page  9 10 Scenario:  search a flight 11   Given I visit to flight launch page

  在该feature文件中定义了两个scenario,第一个scenario有一个tag: @hotel(为了说明tagged hooks的用法),另一个没加tag。两个scenario都只有一个步骤,在这我们就不纠结这些了,只为演示hooks的的用法。

 

testhook.rb

1 Given /^I visit to hotel launch page$/ do 2   puts "The current page is the hotel launch page." 3 end 4 5 Given /^I visit to flight launch page$/ do 6   puts "The current page is the flight launch page." 7 end

  该文件是对feature文件的具体实现,在这两个Given中我都只是简单的打印出了一句话。

 

hooks.rb

1 Before do 2 #Before("@hotel") do          #tagged hooks 3    puts "This is before hook." 4 end 5 6 After do 7 #After("@hotel") do           #tagged hooks 8   puts "This is after hook." 9 end

  在该hooks文件中,我定义了before和after钩子,也都只是简单的输出一句话。注:第2,7行分别为tagged钩子,当执行它们时,只有跟它们匹配的tag的scenario前/后会执行此hook。

 

运行结果:

执行非tagged hooks:

1 This is before hook.  2  3 The current page is the hotel launch page.  4  5 This is after hook.  6  7 This is before hook.  8  9 The current page is the flight launch page. 10 11 This is after hook.

 

执行tagged hooks:

1 This is before hook. 2 3 The current page is the hotel launch page. 4 5 This is after hook. 6 7 The current page is the flight launch page.

本文转自贺满博客园博客,原文链接:http://www.cnblogs.com/puresoul/archive/2012/03/05/2380543.html,如需转载请自行联系原作者。

你可能感兴趣的文章
Linq 中按照多个值进行分组(GroupBy,Count)
查看>>
平常的一天,让我忘记了很多
查看>>
Sqoop2搭建及使用
查看>>
solr入门之pinyin4j源代码改写动态加入扩展词及整合进war项目中
查看>>
写网页常用
查看>>
CAFFE安装(4):ATLAS/ Intel MKL安装
查看>>
升级到win10之后word和excel提示“向程序发送命令时出现问题”解决方法
查看>>
Linux CentOS7.5静默安装Oracle11gR2
查看>>
Ubuntu下压缩文件
查看>>
TEAMWORK2
查看>>
定时器的编写
查看>>
无服务架构综述
查看>>
vue vuex初学基础 常见错误解决方式
查看>>
The relationship between convergence exponent and upper exponential density
查看>>
Linux 学习
查看>>
高一函数中易混的问题
查看>>
程序员的自我修养(2)——计算机网络(转) good
查看>>
HYSBZ 1588 营业额统计
查看>>
关于文字过长时进行省略问题
查看>>
单例模式的四种方式
查看>>