带有西里尔符号的 pytest 3.0.5
pytest 3.0.5 with cyrillic symbols
我在 pytest-3.0.5 的文件路径中显示带有俄文文本的测试名称时遇到问题。
当我在 pytest==2.9.2 上 运行 - 一切正常:
py.test -s -q --collect-only
输出:
test_card.py::test_graphic_card[/root/test_cases/files/Кредитная_карта_мир_41.png]
但是当我尝试 运行 在 pytest==3.0.5 上执行相同的命令时:
py.test -s -q --collect-only
输出:
test_card.py::test_graphic_card[/root/test_cases/files/\xd0\x9a\xd1\x80\xd0\xb5\xd0\xb4\xd0\xb8\xd1\x82\xd0\xbd\xd0\xb0\xd1\x8f_\xd0\xba\xd0\xb0\xd1\x80\xd1\x82\xd0\xb0_\xd0\xbc\xd0\xb8\xd1\x80_41.png]
我应该怎么做才能让 py.test==3.0.5 显示像 py.test==2.9.2 那样的测试名称?
我查看了 pytest 源代码,发现在最新版本的 pytest 中
收集测试时,会使用最近添加的函数“_escape_strings”对其进行处理。
在这个函数中:
if isinstance(val, bytes):
try:
return val.encode('ascii')
except UnicodeDecodeError:
return val.encode('string-escape')
else:
return val.encode('unicode-escape')
我想这个函数是 self-explained。
最后,我解决了我在最终测试报告中解码和转义结果的问题,例如:
result = "/root/test_cases/files/\xd0\x9a\xd1\x80\xd0\xb5\xd0\xb4\xd0\xb8\xd1\x82\xd0\xbd\xd0\xb0\xd1\x8f_\xd0\xba\xd0\xb0\xd1\x80\xd1\x82\xd0\xb0_\xd0\xbc\xd0\xb8\xd1\x80_41.png"
print result.decode('string-escape')
Out: /root/test_cases/files/Кредитная_карта_мир_41.png
我在 pytest-3.0.5 的文件路径中显示带有俄文文本的测试名称时遇到问题。 当我在 pytest==2.9.2 上 运行 - 一切正常:
py.test -s -q --collect-only
输出:
test_card.py::test_graphic_card[/root/test_cases/files/Кредитная_карта_мир_41.png]
但是当我尝试 运行 在 pytest==3.0.5 上执行相同的命令时:
py.test -s -q --collect-only
输出:
test_card.py::test_graphic_card[/root/test_cases/files/\xd0\x9a\xd1\x80\xd0\xb5\xd0\xb4\xd0\xb8\xd1\x82\xd0\xbd\xd0\xb0\xd1\x8f_\xd0\xba\xd0\xb0\xd1\x80\xd1\x82\xd0\xb0_\xd0\xbc\xd0\xb8\xd1\x80_41.png]
我应该怎么做才能让 py.test==3.0.5 显示像 py.test==2.9.2 那样的测试名称?
我查看了 pytest 源代码,发现在最新版本的 pytest 中 收集测试时,会使用最近添加的函数“_escape_strings”对其进行处理。 在这个函数中:
if isinstance(val, bytes):
try:
return val.encode('ascii')
except UnicodeDecodeError:
return val.encode('string-escape')
else:
return val.encode('unicode-escape')
我想这个函数是 self-explained。 最后,我解决了我在最终测试报告中解码和转义结果的问题,例如:
result = "/root/test_cases/files/\xd0\x9a\xd1\x80\xd0\xb5\xd0\xb4\xd0\xb8\xd1\x82\xd0\xbd\xd0\xb0\xd1\x8f_\xd0\xba\xd0\xb0\xd1\x80\xd1\x82\xd0\xb0_\xd0\xbc\xd0\xb8\xd1\x80_41.png"
print result.decode('string-escape')
Out: /root/test_cases/files/Кредитная_карта_мир_41.png