如何配置PyBuilder,使其能读取测试同目录下的本地测试所需文件?
解决PyBuilder测试时无法访问同目录文件的问题
我之前也碰到过PyBuilder这个坑!测试脚本里用相对路径读同目录的CSV文件总是找不到,核心原因就是PyBuilder默认在项目根目录运行测试,而不是测试脚本所在的目录。给你几个实用的解决办法,按推荐程度排序:
方法一:在测试脚本中动态获取绝对路径(最推荐)
这个方法不需要修改PyBuilder的构建配置,直接让测试代码自己定位文件,不管测试 runner 在哪运行都能找到目标文件。
利用Python的__file__变量获取当前测试脚本的路径,再用os.path模块拼接CSV文件的绝对路径:
import os # 获取当前测试脚本所在的绝对目录 current_test_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接同目录下的CSV文件路径 csv_file_path = os.path.join(current_test_dir, "你的测试文件.csv") # 接下来正常读取文件即可 with open(csv_file_path, "r", encoding="utf-8") as f: # 处理CSV数据 pass
方法二:配置PyBuilder的测试工作目录
如果你希望保持测试代码里的相对路径不变,可以修改PyBuilder的配置,让测试任务在测试脚本所在的目录运行。
在项目根目录的build.py中添加以下代码:
from pybuilder.core import after, project @after("prepare") def set_test_working_dir(project): # 获取PyBuilder默认的测试脚本目录(一般是src/unittest/python) test_source_dir = project.get_property("dir_source_unittest_python") # 将测试任务的工作目录设置为测试脚本所在目录 project.set_property("unittest_working_dir", test_source_dir)
这样运行测试时,工作目录就会切换到测试脚本所在的文件夹,直接用相对路径"你的测试文件.csv"就能找到文件了。
方法三:复制测试资源到运行目录
如果上面两种方法都不适合,还可以通过自定义PyBuilder任务,把测试目录下的CSV文件复制到测试运行的临时目录(比如target/unittest-runner)。
在build.py中添加以下代码:
from pybuilder.core import task, depends import shutil import os @depends("prepare") def copy_test_resources(project): # 测试脚本所在目录 test_src_dir = project.get_property("dir_source_unittest_python") # 测试运行的目标目录 test_run_dir = project.expand_path("$dir_target/unittest-runner") # 复制所有CSV文件到运行目录 for filename in os.listdir(test_src_dir): if filename.endswith(".csv"): src_path = os.path.join(test_src_dir, filename) dst_path = os.path.join(test_run_dir, filename) shutil.copy(src_path, dst_path)
这个任务会在测试执行前自动把CSV文件复制到测试运行目录,测试代码里用相对路径就能访问到。
内容的提问来源于stack exchange,提问作者CrizR
相关产品推荐
相关产品推荐

