在测试中快速绘制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()
https://i.imgur.com/2BFq2G2.png

要使用这些固定装置,请使用

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! 感谢所有的贡献者让这成为可能!

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JavaBridge errno=10054被Remotehost关闭   javafx如何在每次调用方法中的变量时更新它?(爪哇)   java mod_群集在发现后未平衡负载   Java软件编辑器/语法高亮   java为什么不能强制转换数组的结果。asList()到ArrayList?   java HIBERNATE:无法使用HIBERNATE从MySQL中提取数据   java在Google地图片段上添加布局   java在AbstractTableModel中执行setValueAt之前,我如何做一些事情?   java在整个Tomcat运行时保存变量   java如何在Thymeleaf模板中获取环境变量的值?   java Selenium Chrome驱动程序针对属性的标签   java正则表达式捕获未知数量的重复组