运行py.test -sv B/时如何读取自定义命令行参数并写入文件
问题原因分析
- 第一次报错:你在conftest.py顶层直接调用标准库
argparse解析命令行参数,会和pytest自身的参数解析体系冲突,pytest识别不了你自定义的--val参数,你自己声明的argparse也会把pytest自带的-sv、B/等参数判定为非法输入,因此报参数不识别错误。另外你的代码存在笔误,把a_file.close()写成了a.file.close(),也会触发运行错误。 - 第二次报错:
pytest_addoption钩子传入的parser是pytest自定义的参数解析对象,不是标准库argparse.ArgumentParser的实例,不存在add_argument方法,添加自定义参数需要用pytest专属的addoption方法,同时参数解析是pytest内部完成的,不能在pytest_addoption中手动调用解析方法。
正确解决方法
你可以通过pytest官方提供的两个钩子配合实现需求:先用pytest_addoption注册自定义命令行参数,再用pytest_configure钩子在配置加载完成后获取参数值写入文件。
修正后的conftest.py代码
def pytest_addoption(parser): # 注册自定义命令行参数 parser.addoption( "--val", action="store", default="", help="需要写入文件的自定义参数值" ) # 保留你之前定义的--name参数 parser.addoption("--name", action="store", default="default name") def pytest_configure(config): # 从pytest配置中获取传入的--val参数值 input_val = config.getoption("--val") if input_val: # 用with上下文管理器自动处理文件关闭,避免笔误 with open("file_val", "w", encoding="utf-8") as f: f.write(input_val) print(f"参数值已写入file_val文件:{input_val}")
执行命令
py.test -sv B/ --val=Hello
运行后即可在当前目录生成内容为Hello的file_val文件。
内容的提问来源于stack exchange,提问作者user16092902
相关产品推荐
相关产品推荐

