其他测试框架 pytest 运行很简单的代码一直报错

Edisonyao · 2021年12月09日 · 最后由 测试小老弟d 回复于 2021年12月09日 · 4599 次阅读

代码如下,很简单:

import pytest

def test_001():
    print("test_01")

def test_002():
    print("test_02")

if __name__ == "__main__":
    pytest.main("-v","test_1208.py")

报错如下,试了不少方法没能解决

Traceback (most recent call last):
  File "D:\pycharm\PyCharm 2019.2\helpers\pycharm\_jb_pytest_runner.py", line 37, in <module>
    config_result = real_prepare_config(args, plugins_to_load)
  File "D:\python3\lib\site-packages\_pytest\config\__init__.py", line 318, in _prepareconfig
    config = pluginmanager.hook.pytest_cmdline_parse(
  File "D:\python3\lib\site-packages\pluggy\_hooks.py", line 265, in __call__
    return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult)
  File "D:\python3\lib\site-packages\pluggy\_manager.py", line 80, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  File "D:\python3\lib\site-packages\pluggy\_callers.py", line 55, in _multicall
    gen.send(outcome)
  File "D:\python3\lib\site-packages\_pytest\helpconfig.py", line 100, in pytest_cmdline_parse
    config: Config = outcome.get_result()
  File "D:\python3\lib\site-packages\pluggy\_result.py", line 60, in get_result
    raise ex[1].with_traceback(ex[2])
  File "D:\python3\lib\site-packages\pluggy\_callers.py", line 39, in _multicall
    res = hook_impl.function(*args)
  File "D:\python3\lib\site-packages\_pytest\config\__init__.py", line 1003, in pytest_cmdline_parse
    self.parse(args)
  File "D:\python3\lib\site-packages\_pytest\config\__init__.py", line 1283, in parse
    self._preparse(args, addopts=addopts)
  File "D:\python3\lib\site-packages\_pytest\config\__init__.py", line 1167, in _preparse
    self._consider_importhook(args)
  File "D:\python3\lib\site-packages\_pytest\config\__init__.py", line 1114, in _consider_importhook
    self._mark_plugins_for_rewrite(hook)
  File "D:\python3\lib\site-packages\_pytest\config\__init__.py", line 1134, in _mark_plugins_for_rewrite
    for name in _iter_rewritable_modules(package_files):
  File "D:\python3\lib\site-packages\_pytest\config\__init__.py", line 785, in _iter_rewritable_modules
    package_files = list(package_files)
  File "D:\python3\lib\site-packages\_pytest\config\__init__.py", line 1131, in <genexpr>
    for file in dist.files or []
  File "D:\python3\lib\importlib\metadata.py", line 253, in files
    file_lines = self._read_files_distinfo() or self._read_files_egginfo()
  File "D:\python3\lib\importlib\metadata.py", line 268, in _read_files_distinfo
    text = self.read_text('RECORD')
  File "D:\python3\lib\importlib\metadata.py", line 491, in read_text
    return self._path.joinpath(filename).read_text(encoding='utf-8')
  File "D:\python3\lib\pathlib.py", line 1228, in read_text
    return f.read()
  File "D:\python3\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x87 in position 4: invalid start byte

Process finished with exit code 1

Empty suite

看着像解码问题,但是代码里并没涉及中文。

共收到 13 条回复 时间 点赞

https://cn.bing.com/search?q=UnicodeDecodeError%3A+%27utf-8%27+codec+can%27t+decode+byte+0x87&form=QBLH&sp=-1&pq=&sc=0-0&qs=n&sk=&cvid=1F5BB1D1958C420894799ECA8647F618

末尾的错误,搜索引擎一查就有很多说明了。猜测你的 0x87 是文件头信息,估计是你新建文件的编辑器自己加的,属于不可见字符,得用可以显示不可见字符的编辑器(如支持看 16 进制编码的)才能看到。

陈恒捷 回复

放在 Notepad++ 里看了,没有问题,代码顶部也加了

# !/usr/bin/env Python
# _*_ coding:utf-8 _*_

我是在 pycharm 里面运行的,运行别的脚本没问题,只要运行 pytest 就报这个错,真的麻了 - -


这个设置了没?

Edisonyao 回复

具体在 pycharm 里怎么跑的 pytest ,截图说清晰点?

我们写的文件是以什么编码方式创建的,我们读的时候就要以什么编码方式去读



PyCharm 里面右键运行


命令行中运行也报这个错

前两行 三个错

Edisonyao 回复

coding 的声明你从哪里抄的?* 号前后应该是英文中划线,不是下划线。
可以看看这个:https://blog.csdn.net/zhongbeida_xue/article/details/81736671

另外,从报错上看,已经识别到 utf-8 编码了,但里面有的字符无法正常 decode 。建议你拿个 16 进制编辑器,看看到底这个在第 4 个字符的 0x92 是啥,把它删掉吧。

还有入口。。。。简直了。

Edisonyao 回复

我用 macbook ,直接拷贝你正文里面的代码到 pycharm 文件里,直接运行,没有你这个编码的错误,只是有另外的语法错误,说明不是你可以看得到的字符问题,应该是你文件的字符问题。


百度出的原因:需要传递列表,但却传的是字符串

Edisonyao 关闭了讨论 01月06日 10:55
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册