gpt4 book ai didi

python - 在虚拟环境中运行 python nose 测试

转载 作者:行者123 更新时间:2023-11-28 21:42:34 26 4
gpt4 key购买 nike

我有一个脚本 go.py,它需要在几个不同的模块上运行单元测试(使用 nose),每个模块都有自己的虚拟环境。

如何在测试前激活每个虚拟环境,并在测试后停用它?

即我想这样做(伪代码):

for fn in functions_to_test:
activate(path_to_env)
run_test(fn)
deactivate()

激活()

在虚拟环境中,有./bin/activate_this.py

这就是我想要的。所以在 go.py 我说

import os
activate_this_file = os.path.join(env_dir,'bin/deactivate_this.py')
execfile(activate_this_file, dict(__file__=activate_this_file))

运行测试()

我目前使用 run_test() 工作

suite_x = TestLoader().loadTestsFromName(test_module + ":" + test_class)
r = run(suite = suite_x, argv = [sys.argv[0], "--verbosity=0", "-s"])

停用

这是我想不通的部分。

env/bin/activate_this.py 的停用等效项是什么?

更广泛的背景

每个模块将通过 go.py 作为 lambda 函数上传到 AWS。 (其中“lambda 函数”在 AWS 上下文中具有特定含义,与 lambda x:foo(x) 无关)

我希望 go.py 在各自的虚拟环境中对每个 lambda 函数运行单元测试(因为一旦部署到 AWS,它们就会在这些虚拟环境中执行)。每个 lambda 函数使用不同的库,因此它们具有不同的虚拟环境。

最佳答案

activate_this.py 脚本并非用于在计算过程中切换虚拟环境。它应该在您的流程开始时尽快使用,并且永远不会再被触及。如果您查看脚本的内容,您会发现它没有为将来的停用记录任何内容。一旦 activate_this.py 脚本完成,解释器在脚本开始之前的状态就会丢失。此外,文档还 warns (添加了重点):

Also, this cannot undo the activation of other environments, or modules that have been imported. You shouldn’t try to, for instance, activate an environment before a web request; you should activate one environment as early as possible, and not do it again in that process.

而不是您希望使用的方法,我会让编排器生成特定于需要使用的虚拟环境并传递给它的 python 解释器(带有 subprocess)测试运行器(大概是“nosetests”)以及它找到在该环境中运行所需的测试所需的参数。

关于python - 在虚拟环境中运行 python nose 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43462260/

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