无法设置环境变量:PyCharm中set命令失效致Pytest报错
解决PyCharm终端设置BROWSER环境变量后Pytest仍报错的问题
问题描述
在Pytest中配置了依赖BROWSER环境变量的fixture,在PyCharm终端执行set BROWSER=chrome后运行测试,仍抛出错误:Exception: tHE ENVIRONMENT VARIABLE 'BROWSER' MUST BE SET。
Fixture代码
import pytest from selenium import webdriver import os @pytest.fixture(scope="class") def init_driver(request): pass supported_browsers = ['chrome', 'ch' , 'firefox', 'ff'] 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" f"supported_browser are : {supported_browsers}") if browser in ('chrome', 'ch'): driver = webdriver.Chrome() elif browser in ('firefox' , 'ff'): driver = webdriver.Firefox() request.cls.driver= driver yield driver.quit()
测试代码
import pytest @pytest.mark.usefixtures("init_driver") class Testdummy(): def test_dumb_func(self): print(" i am dumb 1") print(" i am dumb 2") import pdb; pdb.set_trace()
解决方案
1. 保证终端会话的一致性
Windows的cmd终端中,set BROWSER=chrome设置的环境变量仅对当前终端会话有效。如果设置后通过PyCharm图形界面按钮(比如右键测试文件选择Run)启动测试,环境变量不会被继承——因为图形界面启动的进程属于独立会话。
正确操作:在同一个终端会话内,先执行set BROWSER=chrome,紧接着运行测试命令:
pytest test_file.py -v
2. 直接在PyCharm运行配置中设置环境变量
如果习惯用PyCharm图形界面启动测试,可直接在运行配置里配置环境变量:
- 点击右上角运行按钮旁的下拉菜单,选择
Edit Configurations - 在打开的窗口中找到你的Pytest运行配置
- 找到
Environment variables栏,点击右侧的齿轮图标进入编辑 - 添加一行
BROWSER=chrome,保存后重新运行测试即可生效
3. 修复Fixture中的小问题
你的fixture代码有两处可优化点:
- 第一行的
pass是多余代码,可删除 - 异常消息存在语法错误,缺少闭合单引号,修改后更规范
修改后的Fixture代码:
import pytest from selenium import webdriver import os @pytest.fixture(scope="class") def init_driver(request): supported_browsers = ['chrome', 'ch' , 'firefox', 'ff'] 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. " f"Supported browsers are: {supported_browsers}") if browser in ('chrome', 'ch'): driver = webdriver.Chrome() elif browser in ('firefox' , 'ff'): driver = webdriver.Firefox() request.cls.driver = driver yield driver.quit()
内容的提问来源于stack exchange,提问作者Wazzuper11
相关产品推荐
相关产品推荐

