第一个Cucumber Test


发表完《初识Cucumber》,有读者评论,说自己也在学习cucumber,但是苦于公司没有网络,学习资源匮乏,学习进度一拖再拖。这不禁让我想起了当初学习Selenium的经历。

老东家安全制度极严,即不能拎包入内,也无法访问网络,连可怜的4G信号几乎都屏蔽了。没有学习资料,也没有前辈为我答疑解惑,两个字——干学。迫不得已时,只好请教远在印度的合作伙伴,吐鲁番味儿的英语着实让我每天都在问与不问中纠结。然而,工作进度像鞭子一样抽着人往前走,硬着头皮写了一堆堆的测试脚本,却无法对整个框架进行系统的学习。好在,遇到了Manish,一位印度的自动化测试大牛,一位和蔼可亲的导师,一直能够耐心地为我解答问题。终于在他的帮助下,对selenium自动化的学习有了起色,也尝出了印度英语别样的味道。

遇到Manish的确是我最大的幸运,我不聪明,但是师父领进门,修行在个人,希望勤奋能够弥补一些无法改变的客观条件,比如并不聪颖的天资,以及被限制掉的网络。也希望我的订阅号能帮助更多被屏蔽了网络资源的初学者。

鸡汤喝完,回归正题,一起来编写第一个Cucumber Test。

本文我们选用cucumber的经典案例-calculator。

把大象塞进冰箱分为三步:a.开冰箱门; b.把大象塞进去; c.关门。

创建一个Cucumber Test也分为三步:a.创建features folder; b.编写.feature文件; c.编写step definitions.

Step 1: 新建cucumber project

Cucumber测试用例集存储在features文件目录中,因此我们需要为project新建一个包含features的工作目录。

(1). 首先新建一个名为calculator的project:$ mkdir calculator

(2). 进入目录文件:$ cd calculator

(3).这里我打算用cucumber来引导构建calculator project,为了清楚的理解构建过程,我们先在这个空目录下执行cucumber命令:$ cucumber


执行cucumber命令时,由于并未指定命令行参数,所以cucumber假定我们使用常规的features文件夹来存储测试脚本。此时cucumber识别出project中缺少features文件夹。接下来,我们需要按照提示,使用cucumber --init来初始化工作目录,生成features文件夹。

Step 2: 初始化cucumber project,生成features folder

(1). 初始化cucumber工作目录:$ cucumber --init


初始化成功,用ls命令查看,你会发现在calculator project中自动生成了以下目录文件:

features

features/step_definitions

features/support

features/support/env.rb

(2). 再次执行cucumber命令:$ cucumber


每个cucumber test 被称为Scenario,每个Scenario中的step会告诉cucumber要做什么。执行cucumber命令时,会扫描features文件目录,这时cucumber发现没有任何可以执行的Scenario,所以将结果标记为0 scenarios, 0 steps。因此我们需要在features里新建一个Adding.feature文件,并在Adding.feature文件中编写第一个Scenario及其step。

Step 3: 编写feature/Adding.feature

(1). 进入features目录:$ cd features 

(2). 使用vi编辑器新建、编辑并保存Adding.feature文件:$ vi Adding.feature 

(*Tips:vi编辑器中,按“i”键开始编辑,按ESC键结束编辑,输入”:wq"退出并保存编辑)


(3). 回到上级目录: $ cd .. 

(4). 再次执行cucumber命令: $ ‍cucumber


哇呜,有好多黄色的log,上期我们讲过,绿色指通过,红色指失败,黄色指未定义。仔细观察我们发现些端倪:

a. cucumber执行features文件夹,并识别出了一个scenario(包含三个step), 但是cucumber不知道该如何来执行,所以将其标记为“undefined”.

b. cucumber已经给出一个用ruby编写的step definitions小片段,来指导我们如何将自然语言翻译成可执行的ruby脚本。

上期讲述cucumber原理时,我们提到,运行cucumber命令时,会扫描features中的文件,每个feature中包含多个Scenario, Scenario中的step会调用step definitions中的编写的测试代码。所以接下来我们要完成具体的step definitions。

Step 4: 编写step definitions

初始化cucumber时,已经生成了features/step_definitions文件目录,这里直接进入该目录并新建一个ruby文件,命名为calculator_steps.rb。编辑并保存该ruby文件。

(1). 进入features/step_definitions目录:$ cd step_definitions

(2). 使用vi编辑器新建并保存calculator_steps.rb文件:$ vi calculator_steps.rb

如果你不懂ruby,可以暂时不考虑ruby脚本的意义,直接将step 3 中最后提示的ruby小片段复制粘贴到calculator_steps.rb文件中,然后保存并退出编辑。执行cucumber命令将会指导你该怎么做。


(3). 返回到calculator目录,再次执行cucumber命令: $ cucumber


仔细观察下就会发现,原本的undefined变成了pending。为什么呢?这表示cucumber已经开始执行scenario中的step了,但是我们的step是复制粘贴的pending,表明这个scenario还在进行中,处于未完成状态。因此我们需要将pending 改成具体的代码实现。

(4). 修改脚本: $ vi calculator_steps.rb


(5). 执行cucumber命令观察结果。


可以看到, 1 failed, 1 skipped, 1 passed.(passed-绿色标记,skipped-蓝色标记,failed-红色标记)。step 1 passed之后,继续执行step 2,不幸的是step 2 failed了,所以cucumber会跳过step 3, 结束该scenario的执行。当然,执行结果清晰表明step 2 失败的原因:cal.rb不存在。所以接下来,我们创建calc.rb文件.

(6). 我们暂时先创建一个空的features/support/calc.rb文件来完成cucumber Test。

Mac可以采用touch命令新建calc.rb文件。

其次,修改step 2 中的路径,以保持一致性。为了方便观察整个project结构,此处附IntelliJ的截图。


(7). 执行cucumber命令,我们的第一个Cucumber Test就通过啦。

PS: 微信小程序上线了,所有的推送都被微信小程序刷爆了,我也迫不及待地想要体验一番了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值