python - 如何将 passenv 添加到 tox.ini 而不编辑文件,而是通过在代理后面的 Jenkins 中的 virtualenv shell nature 脚本中运行 tox (python)

标签 python unit-testing jenkins environment-variables tox

我正在尝试使用 tox 在 jenkins 中运行 python 单元测试的虚拟环境。我在代理后面,所以我需要通过 HTTP_PROXYHTTPS_PROXY tox,否则下载内容时会出现问题。

我发现我可以编辑tox.ini并添加passenv=HTTP_PROXY HTTPS_PROXY[testenv] ,并且与使用创建/更新文本文件插件相比,每当 Jenkins 作业从存储库获取原始文件时,我都可以覆盖 tox.ini(作为构建步骤)。这样我就可以从工作区手动复制 tox.ini 的内容,添加 passenv=下面一行 [testenv]并使用上面提到的插件更新文件。但这不是正确的解决方案。我不想以这种方式编辑 tox.ini 文件,因为该文件会不断更新。使用此解决方案将迫使我在每次 git 存储库上发生更改时更新插件内的 tox.ini 内容,并且我希望运行单元测试的过程完全自动化。不,我无法编辑 git 存储库上的原始文件。

有什么办法可以让我通过 passenv = HTTP_PROXY HTTPS_PROXY在 Shell nature 命令中?这是我在 Virtualenv Builder 中的命令的样子:

pip install -r requirements.txt -r test-requirements.txt pip install tox tox --skip-missing-interpreter module/tests/

我想做这样的事情:

tox --skip-missing-interpreter --[testenv]passenv=HTTP_PROXY HTTPS_PROXY module/tests

如何解决这个问题?

注意: 我认为使用 {posargs} 可能有一个解决方案,但我看到原始 tox.ini 中已经有一行包含该 posargs: python setup.py testr --testr-args='{posargs}'帮助...

最佳答案

我想到了一个解决方法:

在 Jenkins 作业中创建一个构建步骤,该步骤将执行 bash 脚本,这将打开 tox.ini 查找行 [testenv] 并在下面输入一行 passenv = HTTP_PROXY HTTPS_PROXY。这样就解决了问题。我现在正在研究这个问题,但无论如何,如果你们知道更好的解决方案,请告诉我。干杯

好的,这就是解决方案:

  1. 添加构建步骤执行 shell

  2. 输入:sed -i.bak '/\[testenv\]/a passenv = HTTP_PROXY HTTPS_PROXY' tox.ini 这将更新 tox.ini 文件(输入所需的passenv 行位于 [testenv] 下并保存更改)。并用sed更改前的原始数据创建一个tox.ini.bak备份文件。

关于python - 如何将 passenv 添加到 tox.ini 而不编辑文件,而是通过在代理后面的 Jenkins 中的 virtualenv shell nature 脚本中运行 tox (python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41259308/

相关文章:

python - 导入 Flask WTF 表单时出现 ImportError

python - 从 pyuic5 转换的 Python 代码显示 PySide2 UI

Jenkins - 将 withCredentials 转换为声明式语法

jenkins - 即使将 jenkins 安装为 Windows 服务后,我也必须通过命令行启动它,然后才能通过浏览器访问它

jenkins - 如何查看centos中是否安装了jenkins?

python - Scipy 最小化约束函数

python - 计算 python 中字典之间键重复的次数

java - 如何模拟具有功能接口(interface)参数的方法?

java - 测试用例失败时使用 EasyTest 时出现 ParameterizedAssertionError

c++ - 单元测试 C++ 静态库