使用@pytest.fixture触发AttributeError:module 'pytest'无fixture属性
解决
AttributeError: module 'pytest' has no attribute 'fixture'问题 核心原因:脚本命名冲突(最常见)
如果你的测试脚本文件名是pytest.py,Python会优先导入当前目录下的这个文件,而非系统中安装的pytest库。这会导致你调用@pytest.fixture时,实际引用的是自己写的脚本,自然没有fixture属性。
解决方法:
- 将测试脚本重命名为非
pytest.py的名称,比如test_browser_setup.py。
检查虚拟环境有效性
如果你使用了虚拟环境,确认当前激活的环境中确实安装了pytest 7.2.1:
- 运行命令验证版本:
pytest --version
- 若版本不符或提示找不到pytest,重新在当前环境安装:
pip install pytest==7.2.1
顺带修正代码中的潜在问题
你的代码还有几处逻辑错误,会导致后续运行报错:
- 开头提前初始化
driver = webdriver.Chrome()会在检查环境变量前启动Chrome,完全多余,需删除。 - Chrome分支中
driver = webdriver是把模块对象赋值给driver,而非浏览器实例,应改为driver = webdriver.Chrome()。
修正后的代码:
import pytest from selenium import webdriver import os @pytest.fixture(scope="class") def init_driver(request): supported_browsers = ['chrome', 'firefox'] browser = os.environ.get('BROWSER') if not browser: raise Exception("The environment variable 'BROWSER' must be set") browser = browser.lower() if browser not in supported_browsers: raise Exception(f"Provided browser '{browser}' is not supported. Supported browsers are: {supported_browsers}") if browser == 'chrome': driver = webdriver.Chrome() elif browser == 'firefox': driver = webdriver.Firefox() request.cls.driver = driver yield driver.quit()
内容的提问来源于stack exchange,提问作者Wazzuper11
相关产品推荐
相关产品推荐

