51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1838|回复: 0
打印 上一主题 下一主题

Cucumber:Second Day

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-1 16:12:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

##简介##


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的标题有点像用例,一个标题应该是主谓结构,“谁”做“什么”

描述

描述是对标题的进一步展开描述,应该说明 谁 做什么 期待什么结果 三部分内容

  1. <!-- lang: ruby -->
  2. As a <role>
  3. I want <feature>
  4. So that <business value>
复制代码

国际化

在你的Features文件开头加上语言声明,就可以使用中文的关键字 #language: zh-CN 完整的语言支持请查看cucumber --i18n help

  1. <!-- lang: ruby -->
  2. $ cucumber --i18n zh-CN
  3.   | feature          | "功能"                   |
  4.   | background       | "背景"                   |
  5.   | scenario         | "场景", "剧本"             |
  6.   | scenario_outline | "场景大纲", "剧本大纲"         |
  7.   | examples         | "例子"                   |
  8.   | given            | "* ", "假如", "假设", "假定" |
  9.   | when             | "* ", "当"              |
  10.   | then             | "* ", "那么"             |
  11.   | and              | "* ", "而且", "并且", "同时" |
  12.   | but              | "* ", "但是"             |
  13.   | given (code)     | "假如", "假设", "假定"       |
  14.   | when (code)      | "当"                    |
  15.   | then (code)      | "那么"                   |
  16.   | and (code)       | "而且", "并且", "同时"       |
  17.   | but (code)       | "但是"                   |
复制代码

Scenarios

一个Scenario可以理解为对一种结果的期待,例如一个网上订票系统,

  1. <!-- lang: ruby -->
  2. Scenario: 订购成功!
  3. Scenario: 无票!
  4. Scenario: 用户没有登录!
复制代码

Step

一个Secenario有多个step,接上例子

  1. <!-- lang: ruby -->
  2. Scenario: 订购成功!
  3.     Given a train with "130" tickets and "0" taken
复制代码

step可以是Given When Then And等关键字 其中用双引号扩起来的可以作为参数使用

例如在写step definition的时候

  1. <!-- lang: ruby -->
  2. Given /^a train with "(.*?)" tickets and "(.*?)" taken$/ do |arg1, arg2|
  3.   @train = Train.new
  4.   @train.ticket=arg1
  5.   @train.taken_ticket = arg2
  6. 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

例如:

  1. <!-- lang: ruby -->
  2. @approved @iteration_2_1
  3. Feature: Im still working on this!

  4. @wip   
  5. Scenario: Its not finished.
复制代码

这里Scenario就有@approved和@wip两个标签

那么标签有什么用呢,标签的作用跟上面子文件夹的作用相似,比如上面我们完成了迭代1 正在进行迭代2的第一个阶段(@iteration_2_1) 就可以单独运行迭代2_1的features内的Scenario

  1. <!-- lang: ruby -->
  2. cucumber --tags @iteration_2_1
复制代码

这样已经通过的和还没有在进行中的就可以不用执行了。

在命令行使用上tag还有一些AND OR NOT操作 如下

  1. <!-- lang: ruby -->
  2. cucumber --tags @foo, @bar  
  3. #@foo || @bar
  4. cucumber --tags @foo --tags @bar
  5. #@foo && @bar
  6. cucumber --tags ~@foo
  7. #!@foo
复制代码

tags的使用灵活,可以适应不同场景,比如不同的语言,不同的操作系统使用不同的tags来标识。

##To Be Continued...##


今天先到这里了,明天继续看step definition的细节。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-9-21 08:14 , Processed in 0.065048 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表