这一篇文章会通过一个简单的例子带大家入门。如果有什么不正确的地方,希望大家指正。


一个例子

  由于现在还没有向大家介绍cucumber的编辑器,所以这里还是主要采用命令行的方式来演示这个例子,在文章的末尾,我将向大家介绍一个比较好用的编辑器

  在命令行中,cucumber的执行就是通过cucumber这个命令来进行执行的。现在你可以通过cmd进入命令行模式下,进入到一个你习惯存放例子的目录(我这里是CucumberExample\HelloCucumber)然后敲入cucumber后回车,假如你得环境搭配正确,你应该可以看到下面类似的结果:


  在结果中我们可以看到一个错误的提示信息:没有这样的文件或者是目录,让我们去创建一个features目录。由于cucumber的执行是需要固定的目录结构的,所以这里会出现这样的错误提示。为了屏蔽这个错误,在HelloCucumber目录下面创建一个features的文件夹,接着在cmd下输入cucumber,你将可以看到下面的运行结果:


  现在可以看到,已经没有错误了,但是我们需要编写我们的测试用例,以及测试代码。在编写测试用例之前,先向大家介绍一下cucumber执行的目录结构。通过上面我们可以知道features目录是必须的,在features文件夹下会有一个以feature为后缀的文件(比如filename.feature)和一个step_definitions目录,在step_definitions目录下会有一个以rb为后缀的文件。feature文件主要用来编写你用自然语言描述的测试用例场景,step_definitions主要存放rb文件,rb文件是对应的feature文件中测试用例的测试代码。

  现在我们知道了cucumber执行的目录结构。我创建的一个目录结构如下,大家可以参考下:

  现在我们可以来描述我们的测试用例了,虽然大家知道了测试用例描述是写在feature文件中,但是还不知道如何去写。我这里使用cucumber官网(http://cukes.info/)上的一个例子,可以供大家参考。大致的描述是作为一个计算白痴,为了避免错误,我想知道2个数的和;写成的feature文件如下:

  在feature文件中,Feature关键字说明了这是个测试用例的开始,下面的简单的描述会说明这个feature文件的主要测试用途,在用例执行的时候,这个段描述是不被执行的。

  Scenario关键字表示了一个测试场景,我们这里的测试场景是2数相加。Given关键字给出了测试条件,And是Given的继续,也表示了一个条件,我们这里的条件是给出了2个数2和2。When表示了我们采用的一个动作,Then是我们期望出现的结果。

  好了,我们知道了feature文件,可以在cmd下执行以下,看可以得到什么样的结果。在我的机器上出现的结果如下:


  我们可以看到执行结果又不相同了,在第二次执行中,我们看到是0个scenario和0个steps,但是这里已经出现了1个scenario和4个steps,但是后面括号中提示未定义,这里未定义是指没有与测试用例相对应的测试代码,而下面的一段×××的字体提示了我们可以如何的去写一段测试代码,当然这段×××的字体仅供参考,红色的字体提示如果我们不适用ruby作为测试语言的话要保证cucumber能够识别测试文件。

  既然提示没有测试用例相对应的测试代码,那我们可以添加上测试代码,我的测试代码如下:

  这是一段ruby代码,大致应该可以看出feature文件中的每一个描述在ruby文件中都会有对应的步骤来对应。当我们输入第一个数的时候将我们输入的数存入到了一个变量@first_number中(“//”中间是一段正则表达式,其中括号中的字符可以用do关键字后面的变量替换,在存入@first_number变量之前先将n转换成了int型),输入的第二个数我们也做了同样的处理,存入了@second_number中,第三步中,我将第一个数和第二个数相加并存入到了@result中,第四步中,我们判断了期待的结果和实际的结果是不是一致。

  到这里,我们的编码已经完成了,再去进行执行,可以看到下面的结果:


  我们可以看到,场景和它里面包含的步骤已经全部的通过。


  希望大家可以通过这个例子能对cucumber的执行能有一个大概的认识。由于我现在公司中的项目用的是ruby,暂时还没有调研cucumber对其他编程语言的支持,等我调研之后我也会向大家来进行分享的。如果大家对ruby感兴趣也能去学习学习,可以一起交流。

  如果大家对于这种cmd模式不能很好的适应,可以去下载RubyMine这款软件,试用期只有30天。