使用 Behave 进行测试 - 找不到模块

Testing with Behave - cannot find modules

我开始用 Behave 编写一些 BDD 测试,但我在尝试在测试中导入我的 util 模块时遇到问题。

这是我当前的文件夹结构:

root/
    __init__.py
    README
    features/
        __init__.py
        test.feature
        environment.py
        steps/
            __init__.py
            steps_test.py
            utils/
              __init__.py
              string_utils.py
              user_utils.py

在我的 environment.py 中,我想要一些设置代码 运行 在功能之前:

import steps.utils.user_utils
def before_feature(context, feature):
    username = user_utils.create_username()
    print(username)

在我的 user_utils.py:

import string_utils
def create_username():
    name = string_utils.gen_str(10, 3)
    return name

但是当我从项目 root/ 文件夹中 运行 behave 时,出现错误:

$ behave

...

File "root/features/steps/utils/user_utils.py", line 1, in <module>
    import string_utils
ModuleNotFoundError: No module named 'string_utils'

但是如果我 运行 python user_utils.pyutils/ 文件夹中,我不会收到任何错误,这表明它确实找到了模块。

如何让我的模块被 Behave 识别?

问题是 Behave 需要一个相当严格的目录结构。也就是说,它不会递归搜索 steps/ 文件夹中的文件夹。因此,您需要将 utils/ 文件夹的内容向上移动到 steps/ 文件夹中,这样就可以正常工作了。