您的位置:

Cucumber自动化测试框架详解

一、Cucumber框架概述

Cucumber是一套行为驱动开发(BDD)的测试框架。BDD的核心思想是行为与测试用例的一一对应关系,提高业务方面与技术方面的沟通效率。Cucumber框架使用人类易于理解的Gherkin语言编写业务场景,生成对应的测试用例脚本,执行测试并生成测试报告。

二、Cucumber框架的特点

1、通俗易懂:Cucumber使用Gherkin语言,可以让非开发人员也能理解业务场景,增加测试人员与业务方面的沟通。

2、可维护性高:测试用例与业务场景一一对应,使得需求变更后可以快速找到对应的测试用例进行修改。

3、支持多种语言:Cucumber支持Java、Ruby等多种编程语言,灵活性强。

4、数据驱动:使用DataTable可以轻松实现数据驱动。

5、可扩展性强:可以使用Hooks机制对测试用例进行前置、后置处理。

三、Cucumber框架的基本使用

1. 安装Cucumber

gem install cucumber

2. 创建.feature文件

创建features目录,将.feature文件放入其中。文件使用Gherkin语言编写,以下是一个简单示例:

Feature: Search
  In order to find relevant articles
  As a user of the website
  I'd like to be able to perform a search

  Scenario: Search for relevant articles
    Given I am on the homepage
    When I fill in "search" with "cucumber"
    And I press "search"
    Then I should see "relevant articles"

3. 实现Step Definitions

将.feature文件中的Step转化为对应的代码实现,实现步骤在创建的step_definitions目录下创建.rb文件,以下是一个示例:

Given(/^I am on the homepage$/) do
  visit '/'
end

When(/^I fill in "(.*?)" with "(.*?)"$/) do |element, text|
  fill_in element, :with => text
end

When(/^I press "(.*?)"$/) do |button|
  click_button button
end

Then(/^I should see "(.*?)"$/) do |text|
  page.should have_content(text)
end

4. 执行测试用例

执行测试用例时,可以通过在控制台输入以下命令:

cucumber features/search.feature

四、Cucumber进阶使用

1. 使用DataTable进行数据驱动测试

可以使用DataTable跟进feature文件中参数对应的数据进行参数化测试:

Scenario: Data-driven search
  Given I have the following search terms:
    | term          |
    | cucumber      |
    | automation    |
    | testing       |
  When I search for the terms
  Then I should see the results

When(/^I search for the terms$/) do |table|
  # 使用.each方法提取DataTable中的数据
  table.hashes.each do |hash|
    fill_in 'search', :with => hash['term']
    click_button 'search'
  end
end

Then(/^I should see the results$/) do
  expect(page).to have_selector('div.results')
end

2. 使用Hooks进行测试用例前置、后置处理

可以使用Before、After Hooks进行测试用例执行之前、之后的处理,以下是一个示例:

Before do
  # 执行之前的初始化操作
  visit '/'
end

After do |scenario|
  # 执行之后的回收操作
  if scenario.failed?
    save_screenshot
  end
end

3. 使用Tags进行用例分类

使用Tags可以对.feature文件中的用例进行标记,可以在执行测试时选择需要执行的标记。

@search
Feature: Search
  In order to find relevant articles
  As a user of the website
  I'd like to be able to perform a search

  @basic
  Scenario: Basic search
    Given I am on the homepage
    When I fill in "search" with "cucumber"
    And I press "search"
    Then I should see "relevant articles"

  @advanced
  Scenario: Advanced search
    Given I am on the advanced search page
    When I fill in the fields
      | title      | Cucumber |
      | author     | John Doe |
      | publisher  | Test Pub |
      | date_range | 2019     |
    And I press "search"
    Then I should see "relevant articles"

执行指定标记的用例:

cucumber --tags @search