我知道单元测试,并每天使用它们编写。
它们在开发和CI期间执行。
现在我要在生产系统上进行测试以确保:
PYTHONIOENCODING必须为“ utf8”
上面我使用了动词“ test”,这意味着我想检查状态。这个问题与如何执行无关。
AFAIK单元测试框架在这里无济于事,因为它仅在开发和CI期间执行。
如何在不重新发明轮子的情况下解决python世界中的问题?
以上仅是示例。我还要检查PYTHONIOENCODE旁边的其他几件事。
这些检查的下一个用例:几天前,我们在生产服务器上遇到了问题。命令行工具convert
被使用,某些版本被破坏并产生错误的结果。我想写一个简单的检查,以确保生产服务器上的转换工具没有损坏。
答案 0 :(得分:2)
将其放在代码开头附近:
import os
if 'PYTHONIOENCODING' not in os.environ or \
os.environ['PYTHONIOENCODING'].lower() not in {'utf-8', 'utf8'}:
raise EnvironmentError("Environment variable $PYTHONIOENCODING must be set to 'utf8'")
在我编写的其中一个项目中,有一个“启动脚本”,因此我们在生产环境中运行此代码,而不是运行python3 main.py
:
bash main.sh
其内容非常简单:
#!/bin/bash
export PYTHONIOENCODING=utf8
exec /usr/bin/env python3 main.py
答案 1 :(得分:1)
testinfra
如果要针对部署基础结构编写和运行测试,则可以对pytest
使用testinfra
插件。例如,在目标计算机上验证环境变量的简单要求的测试看起来像:
def test_env_var(host):
assert host.run_expect((0,), 'test "$PYTHONIOENCODING" == "utf8"')
此基础架构测试套件可以在单独的项目中开发,并在实际部署发生之前调用(例如,我们在构建docker映像之后立即调用基础架构测试;如果测试失败,则该映像不会上传到我们的私人图片存储库/已部署到产品等)。