Python行为-如何从场景中传递值以在功能级别的固定装置中使用?

问题描述 投票:1回答:1

我有以下测试场景:

  1. 检查是否创建了具有特定名称的项目
  2. 编辑此项目
  3. 确认它已被编辑
  4. 作为拆卸程序的一部分删除此项目

以下是实现此目的的示例代码:场景:

  @fixture.remove_edited_project
  @web
  Scenario: Edit a project data
    Given Project was created with the following parameters
      | project_name             |
      | my_project_to_edit       |
    When I edit the "my_project_to_edit" project
    Then Project is edited

将数据保存到要在拆解功能(夹具)中使用的某个变量中的步骤:

@step('I edit the "{project_name}" project')
def step_impl(context, project_name):
    # steps related to editing the project

    # storing value in context variable to be used in fixture
    context.edited_project_name = project_name

以及在场景之后删除项目的示例夹具功能:

@fixture
def remove_edited_project(context):
    yield
    logging.info(f'Removing project: "{context.edited_project_name}"')

    # Part deleting a project with name stored in context.edited_project_name

在这种配置下,一切正常,在任何情况下(测试失败或通过),项目都将被夹具删除。没关系。

但是,当我想在功能级别执行这样的功能时,意味着在功能关键字之前放置@fixture.remove_edited_project装饰器:

@fixture.remove_edited_project
Feature: My project Edit feature

,那么这是行不通的。我已经知道原因了-在每种情况下都会清理context.edited_project_name变量,以后不再可用于此Fixture函数。

是否有某种方法可以将参数以某种方式传递到特征级别的夹具?在全球范围内?我试图使用全局变量作为选项,但是在此框架中开始有点脏和成问题。

理想情况下,应该有@fixture.edited_project_name('my_project_to_edit')之类的东西>

我有以下测试场景:检查是否创建了具有特定名称的项目编辑此项目验证它已被编辑,作为拆解过程的一部分,删除该项目这里是...

python fixtures python-behave
1个回答
0
投票
由于上下文清除了在场景执行期间创建的变量,因此需要一种机制,该机制可在功能中持久存在。一种方法是在设置夹具期间在上下文中创建字典或其他容器,以使其在整个功能中持久存在。这些场景可以设置属性或将其添加到容器中,并且由于该词典是在功能期间添加的,因此在销毁灯具期间它仍将存在。例如,
© www.soinside.com 2019 - 2024. All rights reserved.