Pytest使用parametrize使用中文入参,控制台打印乱码解决方法
时间: 2023-12-29 07:06:36 浏览: 113
在 `parametrize` 中使用中文入参时,可能会出现控制台打印乱码的情况。这是因为控制台默认使用的编码可能不同于你的脚本中使用的编码。
为了解决这个问题,可以在脚本的开头添加以下代码:
```python
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
```
这段代码将控制台的输出编码设置为 `utf-8`,即使你在 `parametrize` 中使用中文入参,控制台也能正确地打印中文字符。
如果你使用的是 pytest-capturelog 插件,还需要添加以下代码:
```python
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
```
这段代码将错误输出的编码也设置为 `utf-8`,确保错误信息也能正确地打印。
注意:如果你的脚本中还有其他输出操作,可能也需要对它们进行编码设置。
相关问题
Pytest使用parametrize中文入参,打印乱码解决方法
如果在pytest中使用parametrize传递中文参数,控制台输出会出现乱码。这是因为控制台默认的编码格式与中文字符集不兼容。可以通过以下方法解决:
1. 在pytest.ini文件中添加以下内容:
```
[pytest]
console_output_encoding=utf-8
```
2. 在命令行中使用参数 `--console-output-style=classic`,例如:
```
pytest --console-output-style=classic
```
这样做可以将pytest的输出编码格式设置为utf-8,避免中文字符集乱码问题。
另外,如果使用IDE运行pytest,需要确保IDE的编码格式与pytest的输出编码格式一致,否则也会出现乱码问题。
Pytest使用parametrize中文入参
可以使用Unicode编码在parametrize中传入中文入参。例如:
```
import pytest
@pytest.mark.parametrize("input_str, expected_output", [
("你好", "Hello"),
("世界", "World")
])
def test_translate(input_str, expected_output):
assert translate(input_str) == expected_output
```
在这个例子中,我们传入了两个中文字符串 "你好" 和 "世界",并且使用了英文字符串 "Hello" 和 "World" 作为预期输出。注意在代码中要声明文件编码为utf-8。
阅读全文