使用xdist时设置远程环境

Jak*_*kob 8 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
Run Code Online (Sandbox Code Playgroud)

这看起来像是在远程主机上执行,但sys.path仍然是主机,并且仍然无法导入argparse模块.

我开始使用测试

py.test --tx ssh=user@server//python="abaqus613 python" -vs --dist=each --rsyncdir foo
Run Code Online (Sandbox Code Playgroud)

这启动了正确的python解释器(Abaqus 6.13-2的Python 2.6.2),但失败了

ImportError: No module named argparse
Run Code Online (Sandbox Code Playgroud)

Jak*_*kob 1

我终于想出了一个相当黑客但合理的工作方式。可以在 python 调用中指定一系列命令,因此我获取了一个脚本,该脚本在调用 abaqus python 之前设置环境。

位于远程计算机上的安装脚本 ( setup.sh ) 如下所示:

export PYTHONPATH=/path/to/libraries
Run Code Online (Sandbox Code Playgroud)

完整的通话现在是

py.test --tx ssh=user@server//python="source setup.sh;abaqus613 python" -vs --dist=each --rsyncdir foo
Run Code Online (Sandbox Code Playgroud)

这样我就可以在 abaqus python 中获得必要的导入。