如何在python下建立cucumber项目

简介: Gherkin语言使用的是主要英文关键词Scenario、Given、when 、And、Then和But等,这些关键词可以转换成中文关键词,场景、假如、当、那么等。根据用户故事,需求人员或测试人员使用Gherkin语言编写好测试场景的每个步骤。

一、 Gherkin简介

Gherkin语言使用的是主要英文关键词Scenario、Given、when 、And、Then和But等,这些关键词可以转换成中文关键词,场景、假如、当、那么等。根据用户故事,需求人员或测试人员使用Gherkin语言编写好测试场景的每个步骤。

feature文件的编写,遵循Gherkin语言规范:

  • Feature(特性):功能名称;
  • Description(描述)(可选):描述测试中的功能。
  • Scenario(场景):测试场景名称;
  • Given(假如):给出测试前提条件;
  • when(当):相当我们的测试步骤;
  • Then(那么):给出期望结果。

二、 目录

主目录

二级目录

描述

steps/

login.py

Step definitions for features.

reports/

jsonDumps/

Save behave json reports

jsonReports/

Save behave to cucumber json reports

environment.py

Environment for global setup…

login.feature

Feature files.

三、environment.py

每一个步骤之前,之后执行

代码语言:javascript

复制

before_step(context, step)
after_step(context, step)

在这里面的脚本会在每一个场景之前,之后执行

代码语言:javascript

复制

before_scenario(context, scenario)
after_scenario(context, scenario)

在这里面的脚本会在每一个feature之前,之后执行

代码语言:javascript

复制

before_feature(context, feature)
after_feature(context, feature)

在脚本里面可以设置tag(这个之后会介绍),这里面的脚本会在含有tag的模块里面之前,之后执行

代码语言:javascript

复制

before_tag(context, tag)
after_feature(context, tag)

这里面的脚本会在整个脚本开始之前,之后执行 ——- 一般会在这里面添加一些setup的脚本,例如启动浏览器,设置一些变量,连接数据库,关闭浏览器,关闭数据库 等等

代码语言:javascript

复制

before_all(context)
after_all(context)

四 脚本

代码语言:javascript

复制

pip3 install behave

英文

4.1 在项目主目录中建立文件test.feature

代码语言:javascript

复制

Feature: Login
  I want to test the login functionality
  Scenario: Successful Login
    Given I am on the login page
    When I enter valid credentials
    Then the homepage is displayed    
  Scenario: Failed Login
    Given I am on the login page   
    When I enter invalid credentials
    Then an error message is displayed

4.2 建立environment.py

代码语言:javascript

复制

from selenium import webdriver
def before_all(context):
    context.browser = webdriver.Firefox()
def after_all(context):
    context.browser.quit()

4.3 建立steps目录

4.4 进入steps目录,建立login.py文件

代码语言:javascript

复制

from behave import *
from selenium.webdriver.common.by import By
@given(u'I am on the login page')
def step_impl(context):
    context.browser.get("http://127.0.0.1:8000")
@when(u'I enter valid credentials')
def step_impl(context):
    context.browser.find_element(By.ID,"id_username").send_keys("cindy")
    context.browser.find_element(By.ID,"id_password").send_keys("123456")    
    context.browser.find_element(By.CSS_SELECTOR,"body > div > form > button").click()
@then(u'the homepage is displayed')
def step_impl(context):
    assert context.browser.find_element(By.NAME,"good").is_displayed()
@when(u'I enter invalid credentials')
def step_impl(context):
    context.browser.find_element(By.ID,"id_username").send_keys("cindy")
    context.browser.find_element(By.ID,"id_password").send_keys("654321")
    context.browser.find_element(By.CSS_SELECTOR,"body > div > form > button").click()
@then(u'an error message is displayed')
def step_impl(context):
assert context.browser.title != "电子商务系统"

4.5 打开被测系统,在命令行中运行behave

代码语言:javascript

复制

PS C:\Users\xiang\Desktop\BDD> behave
Feature: Login # test.feature:1
  I want to test the login functionality
  Scenario: Successful Login       # test.feature:3
    Given I am on the login page   # steps/login.py:4
    When I enter valid credentials # steps/login.py:8
    Then the homepage is displayed # steps/login.py:14
           
  Scenario: Failed Login               # test.feature:7
    Given I am on the login page       # steps/login.py:4
    When I enter invalid credentials   # steps/login.py:18
    Then an error message is displayed # steps/login.py:24
           
1 feature passed, 0 failed, 0 skipped
2 scenarios passed, 0 failed, 0 skipped
6 steps passed, 0 failed, 0 skipped, 0 undefined    
Took 0m1.576s
PS C:\Users\xiang\Desktop\BDD>

中文

1 test.feature

代码语言:javascript

复制

# language: zh-CN
功能:
 我想测试登录功能
场景:成功登录
 假如我在登录页面上
 当我输入有效凭据时
 那么显示主页
场景:登录失败
 假如我在登录页面上
 当我输入无效凭据时
 那么显示一条错误消息

2 login.py

代码语言:javascript

复制

from behave import *
from selenium.webdriver.common.by import By
           
@given(u'我在登录页面上')
def step_impl(context):
    context.browser.get("http://127.0.0.1:8000")    
           
@when(u'我输入有效凭据时')
def step_impl(context):
    context.browser.find_element(By.ID,"id_username").send_keys("cindy")
    context.browser.find_element(By.ID,"id_password").send_keys("123456")
    context.browser.find_element(By.CSS_SELECTOR,"body > div > form > button").click()
           
@then(u'显示主页')
def step_impl(context):
    assert context.browser.find_element(By.NAME,"good").is_displayed()
           
@when(u'我输入无效凭据时')
def step_impl(context):
    context.browser.find_element(By.ID,"id_username").send_keys("cindy")
    context.browser.find_element(By.ID,"id_password").send_keys("654321")
    context.browser.find_element(By.CSS_SELECTOR,"body > div > form > button").click()
           
@then(u'显示一条错误消息')    
def step_impl(context):
    assert context.browser.title != "电子商务系统"

3 运行

代码语言:javascript

复制

PS C:\Users\xiang\Desktop\BDD(中文)>behave --lang zh-CN

五 数据驱动

代码语言:javascript

复制

1 test.feature
# language: zh-CN
功能:
 我想测试登录功能
场景大纲:登录
 假如我在登录页面上
 当我输入<用户名>和<密码>
 那么进入页面是<标题>
例子:
|用户名|密码|标题|
|cindy|123456|电子商务系统|
|cindy|654321|电子商务系统-登录|

2 login.py

代码语言:javascript

复制

from behave import *
from selenium.webdriver.common.by import By
           
@given(u'我在登录页面上')    
def step_impl(context):
    context.browser.get("http://127.0.0.1:8000")
           
@when(u'我输入{username}和{password}')
def step_impl(context,username,password):
    context.browser.find_element(By.ID,"id_username").send_keys(username)
    context.browser.find_element(By.ID,"id_password").send_keys(password)
    context.browser.find_element(By.CSS_SELECTOR,"body > div > form > button").click()
           
@then(u'进入页面是{title}')
def step_impl(context,title):
    assert context.browser.title == title

六 报告

6.1 普通报告

  • pretty:这是默认的报告格式,提供颜色化的文本输出,每个测试步骤的结果都会详细列出。
  • plain:这也是一种文本格式的报告,但没有颜色,并且在执行每个步骤后只输出一个新行。
  • progress:这种报告格式只在执行每个测试步骤后输出一个单字符。
  • json:这种报告格式以 JSON 格式输出测试结果,易于进行进一步处理。使用 -f 参数或 --format 参数来指定报告的格式。

代码语言:javascript

复制

>behave --lang zh-CN -f json.pretty -o './reports/testResult.json'

6.2 allure报告

1 安装allure

2 运行

代码语言:javascript

复制

pip3 install allure-behave

3 运行

代码语言:javascript

复制

behave -f allure_behave.formatter:AllureFormatter -o allure_data

产生allure_data目录,里面包括json文件

4 运行

代码语言:javascript

复制

allure serve allure_data
目录
相关文章
|
1月前
|
机器学习/深度学习 数据采集 数据可视化
Python 数据分析:从零开始构建你的数据科学项目
【10月更文挑战第9天】Python 数据分析:从零开始构建你的数据科学项目
53 2
|
2月前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
92 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
14天前
|
弹性计算 Linux iOS开发
Python 虚拟环境全解:轻松管理项目依赖
本文详细介绍了 Python 虚拟环境的概念、创建和使用方法,包括 `virtualenv` 和 `venv` 的使用,以及最佳实践和注意事项。通过虚拟环境,你可以轻松管理不同项目的依赖关系,避免版本冲突,提升开发效率。
|
2月前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
119 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
27天前
|
JSON 搜索推荐 API
Python的web框架有哪些?小项目比较推荐哪个?
【10月更文挑战第15天】Python的web框架有哪些?小项目比较推荐哪个?
45 1
|
1月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
53 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
2月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
102 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
2月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
90 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
1月前
|
存储 开发工具 Python
【Python项目】外星人入侵项目笔记
【Python项目】外星人入侵项目笔记
36 3
|
1月前
|
前端开发 JavaScript API
惊呆了!学会AJAX与Fetch API,你的Python Web项目瞬间高大上!
在Web开发领域,AJAX与Fetch API是提升交互体验的关键技术。AJAX(Asynchronous JavaScript and XML)作为异步通信的先驱,通过XMLHttpRequest对象实现了局部页面更新,提升了应用流畅度。Fetch API则以更现代、简洁的方式处理HTTP请求,基于Promises提供了丰富的功能。当与Python Web框架(如Django、Flask)结合时,这两者能显著增强应用的响应速度和用户体验,使项目更加高效、高大上。
50 2