前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >推荐一款基于业务行为驱动开发(BDD)测试框架:Cucumber!

推荐一款基于业务行为驱动开发(BDD)测试框架:Cucumber!

作者头像
测试开发技术
发布于 2024-06-25 12:06:15
发布于 2024-06-25 12:06:15
48200
代码可运行
举报
文章被收录于专栏:测试开发技术测试开发技术
运行总次数:0
代码可运行
大家好,我是狂师。

今天给大家介绍一款行为驱动开发测试框架:Cucumber

1、介绍

Cucumber是一个行为驱动开发(BDD)工具,它结合了文本描述和自动化测试脚本。它使用一种名为Gherkin的特定语言来描述应用程序的行为,这种语言非常接近自然语言,使得非技术人员也能够理解和参与测试。

知识扩展:

Gherkin语言是一种用于描述业务行为的领域特定语言(Domain Specific Language, DSL),它允许用户不关注具体实现细节地描述软件系统需要执行的操作。这种语言具有类似于自然语言的易读性,使其成为业务人员和开发人员在编写自动化测试用例时的理想选择。Gherkin特别适用于Behavior Driven Development(BDD)方法,因为它能够将业务需求转换为清晰、易于理解和维护的测试步骤。

Gherkin它使用一组特殊的关键字来构建结构化和有意义的测试步骤。它的设计是为了描述而非直接执行,但它与Cucumber工具相结合,从而实现自动化的测试过程,它旨在让不同背景的人(如业务人员、开发人员和测试人员)都能够通过同一文档理解需求并达成共识。一个典型的Gherkin测试脚本由多个"steps"组成,每个步骤代表一个最小的测试单元。这些步骤可以组合成"Scenarios",进而构成"Features"。Feature文件通常以"Feature:"开头,而每个步骤则包含一系列的条件语句(如"Given"、"When"和"Then"),以及可能的其他关键字。

2、优缺点、适用场景

总的来说,Cucumber是一个强大的BDD工具,适用于需要与业务人员紧密合作的项目,可以促进团队协作,减少测试脚本的维护成本。然而,需要权衡其学习成本和执行速度。

适用场景:

  1. 针对需要与业务人员紧密合作的项目,Cucumber可以帮助编写易于理解的测试用例,促进开发人员、测试人员和业务人员之间的沟通和协作。
  2. 对于需要频繁更新和变更的项目,Cucumber的特性可以减少测试脚本的维护成本,因为测试用例是用自然语言编写的,不需要频繁修改。
  3. 适用于Web应用程序、移动应用程序和API的自动化测试。

优点:

  1. 促进团队协作:Cucumber测试用例使用自然语言编写,使得开发人员、测试人员和业务人员可以更好地理解和参与测试。
  2. 减少维护成本:由于测试用例是用自然语言编写的,不需要频繁修改,可以减少测试脚本的维护成本。
  3. 支持多种编程语言:Cucumber支持多种编程语言,如Java、Ruby、Python等,可以方便团队根据自身技术栈进行选择。

缺点:

  1. 学习成本较高:对于新手来说,学习Cucumber和Gherkin语言可能需要一些时间。
  2. 执行速度较慢:由于Cucumber测试用例是用自然语言编写的,执行速度可能比较慢,特别是在大型项目中。

3、如何使用

3.1 Cucumber+Java实现Web应用程序自动化测试

当使用Cucumber进行Web应用程序自动化测试时,通常会结合Selenium WebDriver来实现。下面是一个简单的示例,演示了如何使用Cucumber和Selenium WebDriver来编写自动化测试用例。

假设我们要测试一个简单的注册页面,包括输入用户名、密码和确认密码,然后点击注册按钮进行注册。我们将使用Cucumber来编写测试用例,使用Selenium WebDriver来模拟用户在浏览器中的操作。

首先,我们需要在项目中引入Cucumber和Selenium WebDriver的相关依赖,并创建一个.feature文件来编写测试用例。假设我们的.feature文件名为registration.feature,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Feature: User Registration
  Scenario: User can register with valid credentials
    Given User is on the registration page
    When User enters "john_doe" as username
    And User enters "password123" as password
    And User enters "password123" as confirm password
    And User clicks on register button
    Then User should be registered successfully

接下来,我们需要创建Step Definitions来实现.feature文件中定义的步骤。假设我们将Step Definitions定义在一个名为RegistrationStepDefs.java的文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import io.cucumber.java.en.Given;
import io.cucumber.java.en.When;
import io.cucumber.java.en.Then;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class RegistrationStepDefs {
    WebDriver driver;

    @Given("User is on the registration page")
    public void userIsOnRegistrationPage() {
        System.setProperty("webdriver.chrome.driver", "path_to_chrome_driver");
        driver = new ChromeDriver();
        driver.get("url_of_registration_page");
    }

    @When("User enters {string} as username")
    public void userEntersUsername(String username) {
        driver.findElement(By.id("username")).sendKeys(username);
    }

    @When("User enters {string} as password")
    public void userEntersPassword(String password) {
        driver.findElement(By.id("password")).sendKeys(password);
    }

    @When("User enters {string} as confirm password")
    public void userEntersConfirmPassword(String confirmPassword) {
        driver.findElement(By.id("confirmPassword")).sendKeys(confirmPassword);
    }

    @When("User clicks on register button")
    public void userClicksOnRegisterButton() {
        driver.findElement(By.id("registerButton")).click();
    }

    @Then("User should be registered successfully")
    public void userShouldBeRegisteredSuccessfully() {
        // Add assertions to verify successful registration
        driver.quit();
    }
}

在这个示例中,我们使用了Cucumber的注解来定义测试步骤,并使用Selenium WebDriver来模拟用户在浏览器中的操作。

最后,我们可以使用JUnit或TestNG来运行Cucumber测试用例。在Maven项目中,可以使用Maven Surefire插件来运行Cucumber测试。

这只是一个简单的示例,实际项目中可能会有更多复杂的测试场景和操作。但是,通过这个示例,你可以了解如何使用Cucumber和Selenium WebDriver来实现Web应用程序的自动化测试。

3.2 Cucumber+Python 实现Web应用程序自动化测试示例

当使用Cucumber和Python进行Web应用程序自动化测试时,我们通常会使用Behave作为BDD框架,结合Selenium WebDriver来实现。下面是一个简单的示例,演示了如何使用Behave和Selenium WebDriver来编写自动化测试用例。

首先,我们需要安装必要的库。在Python中,我们可以使用pip来安装Behave和Selenium WebDriver:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install behave
pip install selenium

接下来,我们创建一个.feature文件来编写测试用例。假设我们的.feature文件名为registration.feature,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Feature: User Registration
  Scenario: User can register with valid credentials
    Given User is on the registration page
    When User enters "john_doe" as username
    And User enters "password123" as password
    And User enters "password123" as confirm password
    And User clicks on register button
    Then User should be registered successfully

然后,我们需要创建Step Definitions来实现.feature文件中定义的步骤。我们将Step Definitions定义在一个名为registration_steps.py的文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from behave import given, when, then
from selenium import webdriver

@given('User is on the registration page')
def user_is_on_registration_page(context):
    context.driver = webdriver.Chrome()
    context.driver.get('url_of_registration_page')

@when('User enters "{text}" as username')
def user_enters_username(context, text):
    username_input = context.driver.find_element_by_id('username')
    username_input.send_keys(text)

@when('User enters "{text}" as password')
def user_enters_password(context, text):
    password_input = context.driver.find_element_by_id('password')
    password_input.send_keys(text)

@when('User enters "{text}" as confirm password')
def user_enters_confirm_password(context, text):
    confirm_password_input = context.driver.find_element_by_id('confirmPassword')
    confirm_password_input.send_keys(text)

@when('User clicks on register button')
def user_clicks_on_register_button(context):
    register_button = context.driver.find_element_by_id('registerButton')
    register_button.click()

@then('User should be registered successfully')
def user_should_be_registered_successfully(context):
    # Add assertions to verify successful registration
    context.driver.quit()

在这个示例中,我们使用了Behave的注解来定义测试步骤,并使用Selenium WebDriver来模拟用户在浏览器中的操作。

最后,我们可以使用命令行来运行Behave测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
behave

这将执行我们编写的测试用例,并输出测试结果。

3.3 Cucumber+Python 实现API接口自动化测试示例

当使用Cucumber和Python进行API接口自动化测试时,我们通常会使用Behave作为BDD框架,结合requests库来实现。下面是一个简单的示例,演示了如何使用Behave和requests库来编写自动化测试用例。

首先,我们需要安装必要的库。在Python中,我们可以使用pip来安装Behave和requests库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install behave
pip install requests

接下来,我们创建一个.feature文件来编写测试用例。假设我们的.feature文件名为api_test.feature,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Feature: API Test
  Scenario: Verify API response
    Given API endpoint is "https://api.example.com/users"
    When User sends a GET request to the API
    Then API should respond with status code 200
    And API response should contain user data

然后,我们需要创建Step Definitions来实现.feature文件中定义的步骤。我们将Step Definitions定义在一个名为api_test_steps.py的文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from behave import given, when, then
import requests

@given('API endpoint is "{url}"')
def set_api_endpoint(context, url):
    context.api_url = url

@when('User sends a GET request to the API')
def send_get_request(context):
    context.response = requests.get(context.api_url)

@then('API should respond with status code {status_code}')
def verify_status_code(context, status_code):
    assert context.response.status_code == int(status_code)

@then('API response should contain user data')
def verify_user_data_in_response(context):
    # Add assertions to verify user data in API response
    # For example, check if certain fields are present in the response
    pass

在这个示例中,我们使用了Behave的注解来定义测试步骤,并使用requests库来发送API请求并验证API响应。

最后,我们可以使用命令行来运行Behave测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
behave

这将执行我们编写的测试用例,并输出测试结果。

通过上述你可以了解如何使用Behave和requests库来实现API接口的自动化测试,实际项目中可能会有更多复杂的测试场景和操作,具体可自行探究。

如果觉得有用,就请关注、点赞、在看、分享到朋友圈吧

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
怎么关闭135 445端口_高危端口关闭方法
1、打开“控制面板”→打开“系统和安全”→打开“系统和安全”→打开“windows防火墙”
全栈程序员站长
2022/11/19
21.4K0
怎么关闭135 445端口_高危端口关闭方法
关闭445端口最简单方法_电脑445端口关闭有什么影响
445端口怎么关闭,445端口关闭方法介绍。勒索病毒的来袭,不少小伙伴的电脑都被侵袭了,小伙伴们需要解决问题,其中就需要关闭445端口,445端口怎么关闭,西西小编来为大家介绍445端口关闭方法。
全栈程序员站长
2022/11/03
3.5K0
关闭445端口最简单方法_电脑445端口关闭有什么影响
计算机的139 135 445端口关闭_系统端口设置在哪里
近期永恒之蓝勒索病毒迅速传播,基本上都是通过135,137,138,139,445等端口入侵,关闭445 135 137 138 139端口是有效预防入侵的方式之一,同时更新微软最新补丁,及时备份重要数据,才能从容应对病毒侵袭,下面重点介绍关闭135,137,138,139,445端口方法。
全栈程序员站长
2022/09/27
2.9K0
计算机病毒445端口,关闭135 445端口_445端口关闭方法_怎么防止电脑中勒索病毒「建议收藏」
这几天,永恒之蓝勒索病毒迅速传播,让网友们都担惊受怕。而这种勒索病毒基本上都是通过135,137,138,139,445等端口入侵,关闭445 135 137 138 139端口是有效预防入侵的方式之一,同时更新微软最新补丁,及时备份重要数据,才能从容应对病毒侵袭,现在就快和小编一起来看看关闭135,137,138,139,445端口方法吧。
全栈程序员站长
2022/11/02
3.3K0
Windows系统安全|135、137、138、139和445端口
首先,这几个端口都是与文件共享和打印机共享有关的端口,而且在这几个端口上经常爆发很严重的漏洞。比如2017年危害全球的永恒之蓝,就是利用的445端口。
谢公子
2022/01/19
19K0
如何关闭139端口及445端口等危险端口_windows端口关闭工具
项目进行安全测试时,使用Nmap扫描端口,发现了几个未关的端口,容易受到黑客的攻击和病毒感染,所以需要关掉。
全栈程序员站长
2022/11/02
10.7K0
Win7如何简单的关闭445端口及445端口入侵详解
最近永恒之蓝病毒攻击了很多教育网的同学,然后我就搜集了如何关闭445端口的方法,下面分享出来一起学习。
全栈程序员站长
2022/07/02
4.5K0
Win7如何简单的关闭445端口及445端口入侵详解
​【收藏】感染勒索病毒处置办法
百度百科给勒索病毒的定义是一种新型电脑病毒,主要以邮件、程序木马、网页挂马的形式进行传播。该病毒性质恶劣、危害极大,一旦感染将给用户带来无法估量的损失。
释然IT杂谈
2022/10/27
1.6K0
​【收藏】感染勒索病毒处置办法
win10关闭135 139 445端口_windows中如何关闭端口
关闭445端口- 首先进入系统的”注册表编辑器“,步骤是:依次点击”开始“,”运行“,输入regedit进入”注册表编辑器“。
全栈程序员站长
2022/11/03
9.3K0
windows7如何关闭445端口_win10重装win7的后果
勒索病毒最新变种2.0已导致我国的很多行业遭受袭击。勒索病毒是通过入侵端口传播,主要是445端口,用户可以通过关闭445端口可以有效预防勒索病毒。下面重点介绍如何关闭445端口。
全栈程序员站长
2022/11/03
2.9K0
windows7如何关闭445端口_win10重装win7的后果
win10安装nfs服务器并实现liunx访问「建议收藏」
b.右键以管理员身份运行nfs server(若不以管理员身份打开,设置项均为灰色不可设),切换到“Exports”标签页,点击“Edit exports file”进行编辑,如下图所示。比如”E:\Video”为win10下要共享的路径,“-name:video”表示将文件夹命名为在nfs服务器上的名字。设置完成后点击“Restart Server”重启服务。
全栈程序员站长
2022/07/29
3.5K0
win10安装nfs服务器并实现liunx访问「建议收藏」
445端口如何正确的修改和关闭
我们都知道,有些专业的黑客可以通过开放端口对windows系统进行攻击,但是很多状况下我们忘了把用不到的端口关闭,特别是一些程序调用了该端口过后没有及时关闭。下面小编分享Win7系统关闭445方法及相关知识。我就搜集了如何关闭445端口的方法,下面分享出来一起学习。
it妹
2019/08/06
12.5K0
445端口如何正确的修改和关闭
windows关闭135,139端口_危险端口有哪些
我用nmap扫描自己的主机,发现自己的某些端口开启着的 139端口 这个端口比较危险 139端口是NetBIOS Session端口,用来文件和打印共享 如果你是单机,不是企业内部网里的成员,为了保护计算机的安全关闭这个端口比较好。 135 137 139 445 3389 这些端口都比较危险,开启这些端口对我们普通用户来说并没有什么用,所以关闭掉
全栈程序员站长
2022/11/03
2.4K0
windows关闭135,139端口_危险端口有哪些
windows关闭端口方法「建议收藏」
在介绍各种端口的作用前,这里先介绍一下在Windows中如何关闭/打开端口,因为默认的情况下,有很多不安全的或没有什么用的端口是开启的,比如Telnet服务的23端口、FTP服务的21端口、SMTP服务的25端口、RPC服务的135端口等等。为了保证系统的安全性,我们可以通过下面的方法来关闭/开启端口。
全栈程序员站长
2022/09/06
20K0
windows关闭端口方法「建议收藏」
"WannaCry"勒索蠕虫用户处置指南
前言 2017年5月12日晚,勒索软件"WannaCry"感染事件爆发,全球范围内99个国家遭到大规模网络攻击,被攻击者电脑中的文件被加密,被要求支付比特币以解密文件;众多行业受到影响,比如英国的NHS服务,导致至少40家医疗机构内网被攻陷,电脑被加密勒索;而我国众多行业的也是如此,其中又以教育网最为显著,导致部分教学系统无法正常运行,相关学子毕业论文被加密等。截止到北京时间5月15日09点,目前事件趋势已经蔓延到更多行业,包含金融、能源、医疗、交通等行业均受到影响。 今年4月14日黑客组织Shadow
云鼎实验室
2023/05/31
4260
"WannaCry"勒索蠕虫用户处置指南
速扩散 !敲诈勒索病毒入侵99个国家,这样做可以免遭勒索
5月12日,全球范围内99个国家遭到大规模网络攻击,被攻击者被要求支付比特币解锁。其中英国的 NHS 服务受到了大规模的网络攻击,至少 40 家医疗机构内网被黑客攻陷,电脑被勒索软件锁定,这些医疗机构被要求支付约 300 美元的比特币来解锁电脑,否则所有的资料将被删除。同时俄罗斯,意大利,整个欧洲都受到不同程度的威胁。 在12日晚,我国的多所高校,也遭遇了比特币敲诈者病毒攻击。用户电脑上的文件全部被锁,需要缴纳赎金才能解锁。目前中毒趋势正在全国蔓延,影响范围极大,同时当下处在高校毕业季,很多学子精心制作的毕
腾讯高校合作
2018/03/21
1.1K0
速扩散 !敲诈勒索病毒入侵99个国家,这样做可以免遭勒索
怎样关闭和复原135 、139 、445端口?
关于这几个端口,我跟微软工程师电话沟通过,微软不推荐关闭,建议从防火墙或安全组(尽量用云平台功能,即安全组)采取措施而不是关闭端口,把需要访问这些端口的IP段(内网段)在安全组入站规则放行,个别需要在外网访问这些端口的客户端IP段也放行,其余的客户端IP段全部禁止访问这些端口即可
Windows技术交流
2021/12/30
10.2K0
WannaCry 勒索病毒用户处置指南
云鼎实验室
2017/05/14
10.3K1
WannaCry 勒索病毒用户处置指南
h3c bios密码_日本服务器ip端口密码
NetBIOS File and Print Sharing 通过这个端口进入的连接试图获得NetBIOS/SMB服务。这个协议被用于Windows”文件和打印机共享”和SAMBA。
全栈程序员站长
2022/11/07
1.7K0
针对5.12大型比特币敲诈事件的漏洞分析及其预防方法
针对5.12大型比特币敲诈事件的漏洞分析及其预防方法 From ChaMd5安全团队核心成员 逍遥自在 2017年4年14日,NSA组织爆出了一份震惊世界的机密文档,其中包含了多个Windows远程漏洞利用工具,其中影响最大的就是ms17_010。在之后几天中,整个安全界都在疯狂的复现这个漏洞,各大公司也出台了相应的措施。时隔一个月之后,一场大型的onion软件敲诈出现在中国安全最脆弱的教育体系中,山东、辽宁、黑龙江均有高校中毒,勒索者要求受害人支付高昂的解密费用才给解开。 据初步了解,这个漏洞就
ChaMd5安全团队
2018/03/29
1.3K0
针对5.12大型比特币敲诈事件的漏洞分析及其预防方法
推荐阅读
相关推荐
怎么关闭135 445端口_高危端口关闭方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档