gpt4 book ai didi

Python Behave 在功能之间共享数据

转载 作者:行者123 更新时间:2023-12-05 08:34:04 27 4
gpt4 key购买 nike

我开始使用 Python Behave,因为我想做一个 API 测试。
目前我偶然发现了一些甚至可能无效的东西,但问题是:我可以在功能之间共享数据吗?我可以将一些存储在数据库或文件中,但也许有一些“内置”的东西?

或者这是无效的,我不应该像那样共享数据,或者它可能在功能内部?

在实践中它看起来像:

我必须向端点发出请求,在响应中我得到一个数字,该数字是发出另一个需要测试的请求所必需的。

最佳答案

是的,你可以,而且很简单。在您拥有功能文件的同一目录中,您可以创建一个名为 environment.py 的文件。在其中,您可以放置​​:

def before_all(context):
context.db = whatever

before_all Hook 在所有测试之前运行,并且您在那里设置的任何内容都可用于所有功能。例如,我使用它来创建一个新的 Selenium 实例,该实例将被测试套件中的所有测试使用。上面的context.db 可能是一个数据库连接。这种分享很好。

您共享的内容应该是只读的,或者可以在测试之间重置为已知状态。在测试之间共享可写资源不是一个好习惯。当测试失败时很难找出问题所在,并且使测试相互依赖。因此,如果您在测试 C 上失败,但它取决于 A 和 B,您不能只要求 Behave 运行测试 C。您必须要求它运行 A、B,然后运行 ​​C。

如果您决定违背最佳实践并无论如何都要这样做,您应该知道在 context 上设置的新值受功能和场景的影响。因此,如果您的 before_all Hook 设置 context.foo = 1,然后功能 A 设置 context.foo = 2。当功能 B 在功能 A 之后运行时,它将看到 context.foo 的值 1 因为 Behave 将删除功能 A 所做的更改(功能 A 所做的更改被“限定”到特征 A。)现在,您必须记住 Python 如何存储值。如果 Hook 设置 context.foo = [] 并且功能 A 执行 context.foo.append(1),那么功能 B 将看到 context.foo 的值为 [1] 因为 context.foo 包含对数组的引用并调用 append改变数组本身。因此可以解决范围界定问题。不过,这仍然不可取。

我最后检查过,功能按字母顺序运行。您可以通过在命令行上指定功能来强制执行此顺序:behave B.feature A.feature

关于Python Behave 在功能之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32861562/

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