【发布时间】:2016-02-10 17:51:38
【问题描述】:
我有兴趣在某种沙箱(如 docker)中使用 pytest 执行可能不受信任的测试,类似于持续集成服务的工作。
我知道要正确沙箱化 python 进程,您需要操作系统级别的隔离,例如在一次性 chroot/容器中运行测试,但在我的用例中,我不需要防止故意恶意代码,只需要防止危险将“随机”函数与参数配对的行为。因此,不太严格的沙盒仍然可以接受。但我没有找到任何支持任何形式的沙盒的插件。
在 pytest 中执行沙盒测试的最佳方法是什么?
更新:这个问题与 python sandboxing in general 无关,因为测试的代码由 pytest 运行,我无法更改它的执行方式以使用 exec 或 ast 或任何。不幸的是,也不能选择使用 pypy-sandbox,因为根据 PyPy feature page,它只是“原型”。
更新 2:pytest-dev 邮件列表中的 Hoger Krekel suggests using a dedicated testuser via pytest-xdist 用于用户级隔离:
py.test --tx ssh=OTHERUSER@localhost --dist=each
which made me realise 用于我的类似 CI 的用例:
拥有一个“一次性”的环境与拥有一个隔离的环境同样重要 一,以便每个测试或每个会话都从相同的初始值运行 状态,并且不受旧会话可能剩余的影响 testuser (/home/testuser, /tmp, /var/tmp, 等)。
所以 testuser+xdist 接近于一个解决方案,但并不完全在那里。
就上下文而言,我需要隔离才能运行pytest-nodev。
【问题讨论】:
-
这是一个独特的问题,它一直在 pytest 邮件列表中收集有见地的答案:mail.python.org/pipermail/pytest-dev/2016-February/003391.html
标签: python unit-testing testing docker pytest