【问题标题】:How to test python function used to generate report using pytest?如何使用pytest测试用于生成报告的python函数?
【发布时间】:2021-01-24 19:19:34
【问题描述】:

我有一个读取 excel 文件并根据其内容生成报告的函数。如何在 pytest 中编写测试以检查文件是否生成并按预期创建报告?

import openpyxl

def create_report(file_path):
    #open an existing report
    xfile = openpyxl.load_workbook(file_path)
    
    sheet = xfile.get_sheet_by_name('Sheet1')
    sheet['A1'] = 'hello world'
    sheet['A3'] = 22
    sheet.cell(row=2, column=2).value = 2
    #Write data to excel sheet
    #save as new report
    xfile.save('test_report.xlsx')

在测试涉及创建新文件以生成报告的功能时,最佳做法是什么? 这个功能可以通过Mocking文件路径来测试吗?

【问题讨论】:

  • 您可以向函数添加report_path 参数,并在您的测试中创建一个临时目录,将路径传递到该目录并在测试后将其删除。这也很有帮助,因为报告文件名将不再是硬编码的。
  • @warownia1 我们可以在不使用模拟功能打开真实文件的情况下读取和写入excel文件吗?
  • 您应该能够从流而不是文件名加载和保存。将您的函数签名更改为create_report(input_file, output_file='test_report.xlsx')。您的程序将能够像以前一样使用它,只提供输入文件路径,但测试将通过两个内存缓冲区。
  • @warownia1 是否可以模拟作为 excel 文件的 input_file 而不是加载原始文件?

标签: python python-3.x pytest python-unittest pytest-mock


【解决方案1】:

只要有一个夹具用于从文件中读取数据,然后在您的测试中使用夹具,并测试数据。

但是,这取决于您要测试的具体内容,如果只是解析逻辑,或者您从该文件中查询数据的方式,您可以使用模拟数据(作为不同文件中的字符串),然后保存读取文件的时间和不必要的依赖。

【讨论】:

  • 在测试期间从原始文件读取数据是否被认为是一种好习惯?
  • 是的,在测试期间读写文件是一种常见的做法。您可以有单独的输入文件专用于测试。只需记住在完成后删除测试期间创建的所有文件。理想情况下在某个临时目录中创建它们。 tempfile 模块在这种情况下通常很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多