我目前正在开展涉及在远程主机(bash)上运行的测试的项目。 不幸的是,远程python解释器不尊重可用的站点包(它是嵌入式的:abaqus python(2.6))。但是,使用PYTHONPATH变量可以指定本地安装并使其他程序包可用。因此,在远程计算机上,我只需在.bashrc文件中添加一行。
不幸的是,在使用 xdist 分发测试时,只有"裸"调用bash,不加载任何特定于配置文件的rcs。因此,测试失败了一些导入错误,如argparse,这是pytest所不能的。
在开始执行任何pytest代码(需要argparse)之前,有没有办法设置远程主机?换句话说,有没有办法在pytest导入开始之前在主机上添加环境变量?
我尝试使用会话范围和autouse=True
的灯具(当然)不起作用。此外,我尝试了像
# in conftest.py
import sys
def pytest_configure_node():
sys.path.insert(1, "/somepath/")
print sys.path
这看起来像是在远程主机上执行,但 sys.path 仍然是主机,并且仍然无法导入argparse模块。
我使用
开始测试py.test --tx ssh=user@server//python="abaqus613 python" -vs --dist=each --rsyncdir foo
这启动了正确的python解释器(Abaqus 6.13-2的Python 2.6.2),但失败了
ImportError: No module named argparse
答案 0 :(得分:1)
我的插件https://github.com/pytest-dev/pytest-cloud可以帮助您
它自动rsyncs python虚拟环境到奴隶,一个要求是你的virtualenv文件夹应该在test文件夹所在的文件夹里面
在rsync之后,它还会激活虚拟环境,以便所有依赖项都正确存在
答案 1 :(得分:1)
我终于想出了一个相当hackish但合理的工作方式。可以在python调用中指定一系列命令,因此我在调用abaqus python之前提供了一个设置环境的脚本。
位于远程计算机上的安装脚本( setup.sh )如下所示:
export PYTHONPATH=/path/to/libraries
现在完整的通话
py.test --tx ssh=user@server//python="source setup.sh;abaqus613 python" -vs --dist=each --rsyncdir foo
这样我就可以在abaqus python中获得必要的导入。