##简介##
OSChina 的链接 Cucumber ruby 的 BDD框架,类似自然语言的DSL,适用于BDD模式和验收测试。 Book The Rspec Book The Cucumber Book 本系列所有内容取自The Rspec Book 虽标记原创 但其实我只是翻译总结了一下 ##关键字## • Feature • Background • Scenario • Scenario outline • Scenarios (or examples) • Given • When • Then • And (or but) • | (which is used to define tables) • """ (which is used to define multiline strings) • # 注释 ##Big Picture## Cucumber可以分为三部分:Features,Step Definition,cucumber 命令 Features的语法是Gherkin(另一个ruby gem),一个Features一个标题,一个描述,多个scenario,一个scenario有多个step Step Definition是类似对Features的划分并测试,支持多语言。 当cucumber命令的时候会自动分析features并找到step definitions ##Features## 标题 features的标题有点像用例,一个标题应该是主谓结构,“谁”做“什么” 描述 描述是对标题的进一步展开描述,应该说明 谁 做什么 期待什么结果 三部分内容 - <!-- lang: ruby -->
- As a <role>
- I want <feature>
- So that <business value>
复制代码国际化 在你的Features文件开头加上语言声明,就可以使用中文的关键字 #language: zh-CN 完整的语言支持请查看cucumber --i18n help - <!-- lang: ruby -->
- $ cucumber --i18n zh-CN
- | feature | "功能" |
- | background | "背景" |
- | scenario | "场景", "剧本" |
- | scenario_outline | "场景大纲", "剧本大纲" |
- | examples | "例子" |
- | given | "* ", "假如", "假设", "假定" |
- | when | "* ", "当" |
- | then | "* ", "那么" |
- | and | "* ", "而且", "并且", "同时" |
- | but | "* ", "但是" |
- | given (code) | "假如", "假设", "假定" |
- | when (code) | "当" |
- | then (code) | "那么" |
- | and (code) | "而且", "并且", "同时" |
- | but (code) | "但是" |
复制代码Scenarios 一个Scenario可以理解为对一种结果的期待,例如一个网上订票系统, - <!-- lang: ruby -->
- Scenario: 订购成功!
- Scenario: 无票!
- Scenario: 用户没有登录!
复制代码Step 一个Secenario有多个step,接上例子 - <!-- lang: ruby -->
- Scenario: 订购成功!
- Given a train with "130" tickets and "0" taken
复制代码step可以是Given When Then And等关键字 其中用双引号扩起来的可以作为参数使用 例如在写step definition的时候 - <!-- lang: ruby -->
- Given /^a train with "(.*?)" tickets and "(.*?)" taken$/ do |arg1, arg2|
- @train = Train.new
- @train.ticket=arg1
- @train.taken_ticket = arg2
- end
复制代码Given, When, And和Then的用法都差不多,And的语义取决于它的上一个是什么,例如Given 。。。And。。。那么And的语义就是Given Features文件组织 ./features 子文件夹下的features在你在.目录执行cucumber features的时候都会自动加载 也可以单独执行某个子文件夹 cucumber features/tickets Tags 一个Cucumber tag是以@开头 紧跟小写字母的一个标识符 例如@wip等 名称可以自定义。 一个tag可以标记在features上 或者 Scenario上 一个feature内部的Scenario会自动继承features的tag 例如: - <!-- lang: ruby -->
- @approved @iteration_2_1
- Feature: Im still working on this!
- @wip
- Scenario: Its not finished.
复制代码这里Scenario就有@approved和@wip两个标签 那么标签有什么用呢,标签的作用跟上面子文件夹的作用相似,比如上面我们完成了迭代1 正在进行迭代2的第一个阶段(@iteration_2_1) 就可以单独运行迭代2_1的features内的Scenario - <!-- lang: ruby -->
- cucumber --tags @iteration_2_1
复制代码这样已经通过的和还没有在进行中的就可以不用执行了。 在命令行使用上tag还有一些AND OR NOT操作 如下 - <!-- lang: ruby -->
- cucumber --tags @foo, @bar
- #@foo || @bar
- cucumber --tags @foo --tags @bar
- #@foo && @bar
- cucumber --tags ~@foo
- #!@foo
复制代码tags的使用灵活,可以适应不同场景,比如不同的语言,不同的操作系统使用不同的tags来标识。 ##To Be Continued...##
今天先到这里了,明天继续看step definition的细节。
|