Odoo单元测试函数打印指定报告及修改代码保存到特定文件夹的方法
Odoo单元测试导出报告解决方案
可行性说明
Odoo完全支持在单元测试函数中生成、打印并保存指定报告,你给出的原有代码已经完成了报告PDF二进制流的获取,仅需补充本地文件写入逻辑即可实现保存到指定文件夹的需求。
修改后的完整代码
import os def test_report_rent(self): # 获取需要生成报告的租赁协议记录 data = self.env['rentalagreement'].search([('id','=',4)]) # 调用Odoo报告引擎生成PDF二进制内容 # 注:Odoo 13及以上版本使用_render_qweb_pdf,低于13版本可保留原有get_pdf写法 pdf = self.env['ir.actions.report'].sudo()._render_qweb_pdf( 'building_management.report_building_agreement_my', res_ids=data.ids, data=None )[0] # 方法返回(二进制内容, 文件类型)元组,取第一个元素即为PDF内容 # 替换为你实际需要的保存文件夹绝对路径,确保Odoo运行用户有该路径读写权限 save_dir = "/your/target/save/path" # 自动创建不存在的文件夹 if not os.path.exists(save_dir): os.makedirs(save_dir, exist_ok=True) # 拼接完整保存路径,用记录ID命名避免重名 save_path = os.path.join(save_dir, f"租赁协议_{data.id}.pdf") # 二进制写入本地文件 with open(save_path, 'wb') as f: f.write(pdf) # 测试阶段可选打印路径验证 print(f"报告已保存至:{save_path}")
注意事项
- 单元测试环境下一般不需要通过
request对象调用报告模型,直接用self.env调用即可 - 多公司测试环境下注意补充对应公司的上下文参数,避免出现报告跨公司访问权限报错
- 如果是CI/CD自动测试场景,建议将保存路径设置为测试日志的归档目录,方便后续排查问题
内容的提问来源于stack exchange,提问作者Chhugani Jay
相关产品推荐
相关产品推荐

