使用Pytest与GitLab CI时相对路径问题解决咨询
解决方案
核心问题:文件路径依赖工作目录
你遇到的问题本质是测试代码里用了相对于当前工作目录的路径,但PyCharm、终端、GitLab CI的默认工作目录不一致:
- PyCharm默认将测试文件所在的
src/logic设为工作目录,所以路径有效 - 终端/CI默认以项目根目录(App)为工作目录,导致
TestFiles/TestFile.json找不到
彻底解决:修改代码使用绝对路径
修改test_logic.py,基于测试文件自身的目录拼接测试文件路径,彻底摆脱工作目录限制:
import os # 获取当前测试文件的绝对目录 current_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接测试文件的完整路径 test_file_path = os.path.join(current_dir, "TestFiles", "TestFile.json") # 使用绝对路径调用函数 assert logic.load_file(test_file_path) is True
如果logic.py中的load_file函数也依赖相对路径,建议同步改成接收绝对路径,或者在函数内部将传入路径转为绝对路径。
回答你的两个问题
a) 指定pytest仅在特定目录运行
Windows下不要用pytest /src/logic(该路径指向系统根目录,不是项目内的src),从项目根目录(App文件夹)运行时,正确命令是:
# 正斜杠(多数终端支持) pytest src/logic # 或Windows原生反斜杠 pytest src\logic
这个命令会让pytest只扫描src/logic目录下的测试用例。
b) GitLab CI中切换目录运行pytest
在.gitlab-ci.yml中添加cd命令切换到目标目录后执行pytest:
stages: - test run-tests: stage: test script: # Linux/macOS runner用这个 - cd src/logic # 如果是Windows runner,换成下面的命令 # - cd src\logic - pytest
替代方案:指定pytest工作目录
如果暂时不想修改代码,可通过--cwd参数(pytest 7.0+支持)指定工作目录为src/logic,从项目根目录运行:
pytest --cwd=src/logic
这种方式无需切换目录,直接让pytest以src/logic为工作目录执行测试。
内容的提问来源于stack exchange,提问作者magenulcus
相关产品推荐
相关产品推荐

