1

以下 Gherking 测试定义了我的一台服务器的所需行为:

  Scenario Outline: Calling the server with a valid JSON
     Given A GIS update server
     When I call /update with the json in the file <filename>
     Then the response status code is <status_code>
     And the response is a valid JSON
     And the response JSON contains the key status
     And the response JSON contains the key timestamp
     And the response JSON contains the key validity

  Examples:
  | filename                    | status_code |
  | valid_minimal.json          | 200         |
  | valid_minimal_minified.json | 200         |
  | valid_full.json             | 200         |
  | valid_full_minified.json    | 200         |
  | valid_full_some_nulls.json  | 200         |
  | valid_full_all_nulls.json   | 200         |

我编写了这段代码用于对 Flask 服务器进行单元测试。解释 Gherkin 指令的步骤文件打开一个测试客户端并进行必要的调用和断言:

@given(u'A GIS update server')
def step_impl(context):
    context.app = application.test_client()

功能文件与单元测试和功能测试类似。唯一的区别在于几个步骤文件,它必须进行 HTTP 调用,而不是调用测试客户端的方法。

通过将参数传递给步骤文件来重用此behave功能文件的正确方法是什么?

4

2 回答 2

1

扩展 Parva 的评论,我建议通过命令行发送参数,这些参数将在您的步骤定义中检测到,并调整单元测试与功能测试的行为(是否将单元测试和功能测试分开的决定取决于您;)。

在Debug on error周围的 Behave 文档中给出了一个示例,它提供了一个很好的示例,说明使用环境属性来修改 steps 方法的执行:

# -- FILE: features/environment.py
# USE: BEHAVE_DEBUG_ON_ERROR=yes     (to enable debug-on-error)
from distutils.util import strtobool as _bool
import os

BEHAVE_DEBUG_ON_ERROR = _bool(os.environ.get("BEHAVE_DEBUG_ON_ERROR", "no"))

def after_step(context, step):
    if BEHAVE_DEBUG_ON_ERROR and step.status == "failed":
        # -- ENTER DEBUGGER: Zoom in on failure location.
        # NOTE: Use IPython debugger, same for pdb (basic python debugger).
        import ipdb
        ipdb.post_mortem(step.exc_traceback)

您可以更改它以检测命令行传递的变量,例如UNIT_TESTING并让它到达不同的端点或为您的测试执行替代功能。

于 2014-05-19T20:23:29.603 回答
1

要求:行为 >= 1.2.5

我认为,测试阶段的概念应该可以帮助您满足您的需求。它允许您为不同的测试阶段使用不同的步骤实现。

behave --stage=functional

如果您的更改很小,请使用userdata概念将标志传递给您的步骤实现,例如:

behave -D test_stage=unit …
behave -D test_stage=functional …
于 2015-02-20T22:58:24.067 回答