一、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