我有兴趣在某种沙盒中使用pytest执行可能不受信任的测试,比如docker,类似于持续集成服务.
我理解为了正确沙箱化一个python进程你需要操作系统级别的隔离,比如在一次性chroot /容器中运行测试,但在我的用例中,我不需要防止故意恶意代码,只是来自配对的危险行为带参数的"随机"函数.因此,较不严格的沙箱仍然可以接受.但我没有找到任何能够实现任何形式沙盒的插件.
沙盘测试在pytest中执行的最佳方法是什么?
更新:这个问题是不是在一般的蟒蛇沙盒作为测试代码由pytest运行,我不能改变它执行使用方式exec或ast或什么的.不幸的是,使用pypy-sandbox也不是一个选项,因为根据PyPy功能页面它只是"原型" .
更新2:pytest-dev邮件列表中的Hoger Krekel 建议使用专用的testuser通过pytest-xdist进行用户级隔离:
py.test --tx ssh=OTHERUSER@localhost --dist=each
Run Code Online (Sandbox Code Playgroud)
这让我意识到我的CI用例:
具有"一次性"环境与具有隔离的环境一样重要,因此每个测试或每个会话都从相同的初始状态运行,并且不会受到testuser可写入的文件夹上旧的会话可能留下的影响(/ home/testuser,/ tmp,/ var/tmp等).
因此testuser + xdist接近于解决方案,但并不完全存在.
只是为了上下文我需要隔离来运行pytest-nodev.