拆分Pytest测试文件后执行报错:Test result not found for: ./tests/test.py的排查方案
我帮你梳理几个常见的排查方向,应该能解决这个问题:
检查Pytest的命名规范(最容易踩坑的点)
Pytest默认只会自动识别两类文件:一是以test_开头的文件,二是以_test.py结尾的文件;同时文件内的测试函数必须以test_开头。
你的test.py文件名不符合默认规则(建议改成test_db_sync.py这类符合规范的名字),如果一定要用test.py,要么执行时明确指定文件路径,要么修改pytest配置文件让它识别这个文件名。另外如果querytest.py里有测试函数,也要确保函数名以test_开头,否则Pytest会直接忽略。确认conftest.py的fixture是否被正确识别
因为三个文件都在同一个tests目录下,conftest.py里的fixture是会被Pytest自动加载的,不需要手动导入。你可以检查下:- 有没有在
conftest.py里导入pytest,并给连接函数加上@pytest.fixture装饰器,比如:import pytest import psycopg2 @pytest.fixture(scope="module") def source_db_conn(): conn = psycopg2.connect(host="xxx", ...) yield conn conn.close() - fixture的scope设置是否合理(比如
module或session),避免连接提前被关闭。
- 有没有在
检查test.py对querytest模块的导入是否正确
同目录下的模块要使用相对导入,比如在test.py里这么写:from .querytest import generate_sql_commands不要用绝对导入(比如
import querytest),除非你把tests目录加到了Python的sys.path里,不然会出现导入错误,导致测试文件无法被加载,Pytest自然找不到测试结果。确认测试函数的写法是否符合Pytest规范
测试函数要把fixture作为参数传入,而不是自己调用fixture函数。举个例子:import pytest from .querytest import generate_sql_commands def test_sync_database(source_db_conn, target_db_conn): # 调用工具函数生成SQL命令 sql_cmds = generate_sql_commands(source_db_conn) # 执行到目标库 with target_db_conn.cursor() as cur: for cmd in sql_cmds: cur.execute(cmd) target_db_conn.commit() # 别忘了加断言验证结果,比如检查目标库数据是否正确 # ...如果直接调用
source_db_conn(),会绕过Pytest的fixture生命周期管理,可能导致连接异常。检查Pytest的执行命令是否正确
尽量在项目根目录执行命令,比如:pytest ./tests/test.py -v如果在
tests目录内部执行,可能会导致Pytest的路径识别混乱,比如找不到conftest.py里的fixture。另外如果文件名不符合默认规范,必须明确指定文件路径,否则Pytest会忽略它。排查隐藏的导入/语法错误
如果Pytest没明确报错,你可以用pytest --tb=short ./tests/test.py查看详细错误,或者直接用python ./tests/test.py运行测试文件,看看有没有导入失败、语法错误这类问题——这些问题会导致测试文件无法被正确加载,进而触发“找不到测试结果”的报错。
备注:内容来源于stack exchange,提问作者AzUser1

