gpt4 book ai didi

cucumber - 如何准确查看行为中出了什么问题

转载 作者:行者123 更新时间:2023-12-04 01:51:29 26 4
gpt4 key购买 nike

我们最近开始使用 Behave (github link)用于新 Python Web 服务的 BDD。



有什么办法可以在测试失败时获得有关失败原因的详细信息?他们扔 AssertionError ,但它们从不显示究竟出了什么问题。例如,进入断言的预期值和实际值。

我们一直试图找到这样的现有功能,但我想它不存在。自然,这个问题的一个很好的答案是关于如何通过修改源代码来实现这种行为的提示和技巧,以及这个特性是否存在于其他类似的 BDD 框架中,比如 jBehave、NBehave 或 Cucumber?

例子

今天,当测试失败时,输出显示:

  Scenario: Logout when not logged in                  # features\logout.feature:6
Given I am not logged in # features\steps\logout.py:5
When I log out # features\steps\logout.py:12
Then the response status should be 401 # features\steps\login.py:18
Traceback (most recent call last):
File "C:\pro\venv\lib\site-packages\behave\model.py", line 1037, in run
match.run(runner.context)
File "C:\pro\venv\lib\site-packages\behave\model.py", line 1430, in run
self.func(context, *args, **kwargs)
File "features\steps\login.py", line 20, in step_impl
assert context.response.status == int(status)
AssertionError

Captured stdout:
api.new_session
api.delete_session

Captured logging:
INFO:urllib3.connectionpool:Starting new HTTP connection (1): localhost
...

我想要更像的东西:
  Scenario: Logout when not logged in                  # features\logout.feature:6
Given I am not logged in # features\steps\logout.py:5
When I log out # features\steps\logout.py:12
Then the response status should be 401 # features\steps\login.py:18

ASSERTION ERROR
Expected: 401
But got: 200

如您所见,我们通用步骤中的断言清楚地打印出
`assert context.response.status == int(status)`

但我宁愿有一个像
assert(behave.equals, context.response.status, int(status)

或者其他任何可以从失败的断言中生成动态消息的东西。

最佳答案

您可以使用另一个断言提供程序,例如 PyHamcrest,而不是像上面的示例中那样使用“原始断言”语句。 ,他们将为您提供所需的详细信息。
它会告诉你出了什么问题,比如:

# -- file:features/steps/my_steps.py
from hamcrest import assert_that, equal_to
...
assert_that(context.response.status, equal_to(int(status)))

也可以看看:
  • http://jenisys.github.io/behave.example/intro.html#select-an-assertation-matcher-library
  • https://github.com/jenisys/behave.example
  • 关于cucumber - 如何准确查看行为中出了什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22045592/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com