pytest测试初始化失败:无法找到get_user fixture求助
问题根源
- pytest 默认仅识别模块级别定义的 fixture,你把
get_userfixture 定义在UserEndPoints类内部,pytest 无法扫描到这个 fixture,所以报错找不到。 - 测试文件里的用法完全错误:既在测试方法参数里声明了不存在的
get_userfixture,又手动实例化UserEndPoints调用方法,完全没利用 fixture 的注入机制。
解决方案
方案一:模块级别定义 fixture(推荐,符合 pytest 常规用法)
修改 conftest.py
把 fixture 移到模块级别,同时补充依赖的url fixture:
import pytest import requests from your_routes_module import Routes # 替换为Routes类的实际导入路径 @pytest.fixture def url(): # 返回目标接口URL return Routes().get_single_user.format(id=2) @pytest.fixture def get_user(url): response = requests.get(url) print("Get User: ", response) return response
修改 test_getuserdata.py
直接通过 fixture 注入已获取的响应对象,无需手动实例化类:
class TestUserInfo: def test_verifyStatusCodeGetUser(self, get_user): actual_status_code = get_user.status_code print("Get User - Actual Status Code: ", actual_status_code) # 建议添加断言,比如:assert actual_status_code == 200 def test_verifyContentGetUser(self, get_user): actual_content = get_user.content actual_text = get_user.text print("Get User - Actual Content: ", actual_content) print("Get User - Actual Text: ", actual_text)
方案二:保留类结构,将类实例作为 fixture 注入
如果需要保留UserEndPoints的封装,可将类实例作为 fixture,把类内方法改为普通工具方法:
修改 conftest.py
import pytest import requests class UserEndPoints: def get_user(self, url): response = requests.get(url) print("Get User: ", response) return response @pytest.fixture def user_endpoints(): # 提供UserEndPoints类的实例作为fixture return UserEndPoints()
修改 test_getuserdata.py
注入user_endpoints fixture,调用其工具方法:
from your_routes_module import Routes # 替换为Routes类的实际导入路径 URL = Routes().get_single_user.format(id=2) class TestUserInfo: def test_verifyStatusCodeGetUser(self, user_endpoints): response = user_endpoints.get_user(URL) actual_status_code = response.status_code print("Get User - Actual Status Code: ", actual_status_code) def test_verifyContentGetUser(self, user_endpoints): response = user_endpoints.get_user(URL) actual_content = response.content actual_text = response.text print("Get User - Actual Content: ", actual_content) print("Get User - Actual Text: ", actual_text)
注意事项
- 确保
Routes类的导入路径正确,避免模块找不到的错误。 - 方案一中的
urlfixture 可根据需求设置作用域(比如scope="module"),减少重复生成 URL 的开销。 - 测试方法建议添加断言逻辑,否则仅打印结果无法完成自动化测试的验证目标。
内容的提问来源于stack exchange,提问作者Satish Ghanta
相关产品推荐
相关产品推荐

