我目前正在开发一个涉及在远程主机(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)
我终于想出了一个相当黑客但合理的工作方式。可以在 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 中获得必要的导入。