在测试中快速绘制matplotlib图的夹具
pytest-plt的Python项目详细描述
pytest plt
pytest-plt为 在测试中快速创建matplotlib图。
使用pltfixture在一行中创建pdf绘图。
deftest_rectification(plt):values=list(range(-10,11))rectified=[vifv>0else0forvinvalues]assertall(v>=0forvinrectified)plt.plot(values,label="Original")plt.plot(rectified,label="Rectified")plt.legend()
要使用这些固定装置,请使用
pip install pytest-plt
并传递--plots选项
pytest --plots
使用量
pltfixture允许您创建只有一行的pdf绘图。 它公开了matplotlib.pyplotinterface。
运行测试时, 传递--plots选项(带有可选目录名) 生成绘图 (在本例中,我们将它们保存到“My_Plots”目录):
pytest --plots my_plots
如果没有提供目录名, 绘图将保存到“绘图”目录:
pytest --plots
如果不传递--plots选项, 不会执行matplotlib命令, 加快测试执行。
自定义文件名和扩展名
pytest-plt尝试给出每个图 一个不太长的可读的名字。 有时默认名称不够好, 因此plt允许您使用plt.saveas更改它:
deftest_rectification(plt):values=list(range(-10,11))rectified=[vifv>0else0forvinvalues]assertall(v>=0forvinrectified)plt.plot(values,label="Original")plt.plot(rectified,label="Rectified")plt.legend()plt.saveas="test_rec.png"
plt.saveas属性包含 将出现在绘图目录中的文件名。 可以在测试中修改此属性 更改将要使用的文件名 保存给定测试函数的绘图。 在上面的示例中,使用 pytest --plots my_plots将导致 一个my_plots/test_rec.png文件。
应该注意的是,文件扩展名 保存绘图时将使用inplt.saveas。 也就是说,在上面的例子中, 生成的绘图将是一个真正的PNG文件, 不是扩展名不正确的.pngpdf。 可以使用以下代码段更改 特定测试中的文件扩展名 如果pdf格式不合适。
plt.saveas="%s.png"%(plt.saveas[:-4],)
配置
下面存在以下配置选项。plt_filename_drop
plt_filename_drop接受正则表达式列表 删除部分文件名。
默认情况下,打印文件名包含完整的nodeid 对于有问题的测试, 用点(.)替换目录分隔符(/)。 如果所有测试都位于同一项目目录中, 该名称将出现在所有打印文件名的开头, 使它们变得不必要的长。
在本例中,我们使用carat^来确保 我们的regex只匹配文件名的开头, 我们还删除了尾随的点(\.):
plt_filename_drop= ^project\.
如果您的测试始终位于具有特定名称的目录中 (例如“测试”), 无论这个名字出现在哪里,你都可以安全地删除它。 在这种情况下,我们不使用克拉来允许regex在任何地方匹配。 在文件名中。 小心,因为这将匹配任何目录 以“测试”(例如“其他测试”)结束, 并将删除这些目录名的结尾。
plt_filename_drop= ^project\. tests\.
使用plt_filename_drop时,请注意避免冲突 (两个不同测试的绘图情况 会以相同的名字结束)。 在这种情况下,后面的测试图 将重写具有相同名称的早期测试。
目录名
plt_dirname更改输出图的默认目录名。
默认的plt_dirname是"plots"。 例如,要将其更改为"test_plots",请添加以下内容 给你的pytest.ini。
plt_dirname=test_plots
命令行中提供的带有--plots标志的目录 优先于plt_dirname。
看到全部 documentation 有关更多详细信息和配置选项。
发布历史记录
1.0.0(2019年8月9日)
初版pytest-plt! 感谢所有的贡献者让这成为可能!