以下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服务器的单元测试编写了这段代码。 steps文件解释了Gherkin指令,打开一个测试客户端并进行必要的调用和断言:
@given(u'A GIS update server')
def step_impl(context):
context.app = application.test_client()
功能文件与单元和功能测试类似。唯一的区别在于几个步骤文件,它必须进行HTTP调用而不是调用测试客户端的方法。
通过将参数传递给步骤文件,重用此behave
要素文件的正确方法是什么?
答案 0 :(得分:1)
扩展Parva的评论,我建议通过命令行发送参数,这些参数将在步骤定义中检测到,并调整单位与功能测试的行为(决定是否将设备与功能测试分开以保持清晰度取决于你;)。
在Debug on error周围的Behave文档中给出了一个示例,它给出了在修改步骤方法执行时使用环境属性的一个很好的示例:
# -- 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
,并使其命中不同的端点或执行测试的备用功能。
答案 1 :(得分:1)
要求:表现&gt; = 1.2.5
我认为,test stage概念可以帮助您满足您的需求。它允许您为不同的测试阶段使用不同的步骤实现。
behave --stage=functional
如果您的更改很小,请使用userdata概念将标记传递给您的步骤实现,例如:
behave -D test_stage=unit …
behave -D test_stage=functional …