Bokeh项目测试编写指南:从单元测试到视觉回归测试

Bokeh项目测试编写指南:从单元测试到视觉回归测试

bokeh bokeh/bokeh: 是一个用于创建交互式图形和数据的 Python 库。适合用于数据可视化、数据分析和呈现,以及创建动态的 Web 应用。特点是提供了一种简洁、直观的 API 来描述和处理数据,并生成交互式的可视化效果。 bokeh 项目地址: https://gitcode.com/gh_mirrors/bo/bokeh

为什么测试对Bokeh项目如此重要

在Bokeh可视化库的开发过程中,测试是确保代码质量和功能稳定性的关键环节。作为数据可视化工具,Bokeh不仅需要保证代码逻辑正确,还需要确保可视化输出的一致性和准确性。本文将全面介绍如何在Bokeh项目中编写各类测试。

Python测试编写规范

单元测试基础

Bokeh的Python单元测试位于tests/unit/bokeh目录下,其结构反映了Bokeh的Python模型组织结构。每个测试文件以test_开头,后接模块名称。

最佳实践建议:

  1. 使用绝对导入而非相对导入
  2. 导入被测模型时使用as语法简化引用
  3. 优先使用pytest而非unittest框架

测试示例

# 正确导入方式示例
import bokeh.plotting.graph as bpg

def test_graph_rendering():
    # 测试代码
    pass

BokehJS测试体系

单元测试编写

BokehJS单元测试采用TypeScript编写,位于bokehjs/test/unit/目录。测试框架使用describe()it()函数组织测试用例,断言则通过expect()assert()实现。

常用断言方法:

  • to.be.equal:深度值比较
  • to.be.instanceof:类型检查
  • to.be.null/to.be.undefined:空值检查
  • to.be.above/to.be.below:数值比较
describe("DataRange1d", () => {
  it("should have null start and end initially", () => {
    const r = new DataRange1d()
    expect(r.start).to.be.null
    expect(r.end).to.be.null
  })
})

视觉回归测试

视觉测试是BokehJS特有的测试类型,用于验证可视化输出的像素级准确性。这些测试位于bokehjs/test/integration/目录。

视觉测试特点:

  1. 使用display()替代常规的show()
  2. 使用fig()替代常规的figure()
  3. 包含文本基线(.blf)和图像基线(.png)两种验证方式
import {display, fig} from "./_util"

describe("Line glyph", () => {
  it("should display dashed line", async () => {
    const p = fig([200, 200], {title: "Dashed line"})
    p.line([1, 2, 3], [1, 3, 2], {line_dash: [6, 3]})
    await display(p)
  })
})

回归测试编写指南

修复Bug时应添加回归测试,防止问题重现。回归测试文件位于:

  • bokehjs/test/unit/regressions.ts
  • bokehjs/test/integration/regressions.ts

回归测试规范:

  1. 在"Bug"描述的describe()块中添加测试
  2. 在测试描述中包含issue编号
  3. 明确描述修复的问题
describe("in issue #9522", () => {
  it("disallows arrow to be positioned correctly in stacked layouts", async () => {
    // 测试代码
  })
})

视觉测试开发流程

  1. 编写测试脚本:使用fig()display()创建最小化测试场景
  2. 本地验证:通过node make test:integration运行测试
  3. 基线生成:首次运行会生成基线文件
  4. CI集成:通过CI系统获取多平台基线文件
  5. 结果审查:使用开发工具服务器检查测试结果

注意事项:

  • 保持测试图像尽可能小但可辨识
  • 设置合理的像素容差阈值
  • 只提交CI生成的基线文件

示例测试管理

Bokeh的示例测试自动包含examples目录下的文件。如需特殊配置,可编辑tests/examples.yaml文件来包含或排除特定示例。

通过遵循这些测试编写规范,开发者可以确保Bokeh项目的代码质量和可视化输出的一致性,为这一强大的数据可视化工具贡献高质量的代码。

bokeh bokeh/bokeh: 是一个用于创建交互式图形和数据的 Python 库。适合用于数据可视化、数据分析和呈现,以及创建动态的 Web 应用。特点是提供了一种简洁、直观的 API 来描述和处理数据,并生成交互式的可视化效果。 bokeh 项目地址: https://gitcode.com/gh_mirrors/bo/bokeh

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柯晶辰Godfrey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值