使用xdist时设置远程环境

时间:2014-12-11 16:03:07

标签: python pytest

我目前正在开展涉及在远程主机(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

2 个答案:

答案 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中获得必要的导入。