You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pytest测试初始化失败:无法找到get_user fixture求助

问题根源
  1. pytest 默认仅识别模块级别定义的 fixture,你把get_user fixture 定义在UserEndPoints类内部,pytest 无法扫描到这个 fixture,所以报错找不到。
  2. 测试文件里的用法完全错误:既在测试方法参数里声明了不存在的get_user fixture,又手动实例化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类的导入路径正确,避免模块找不到的错误。
  • 方案一中的url fixture 可根据需求设置作用域(比如scope="module"),减少重复生成 URL 的开销。
  • 测试方法建议添加断言逻辑,否则仅打印结果无法完成自动化测试的验证目标。

内容的提问来源于stack exchange,提问作者Satish Ghanta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 17:25:29