为监控模块 Prometheus 的 exporter 添加单元测试用例和覆盖度报告

背景

OpenMLDB exporter 模块 (https://github.com/4paradigm/OpenMLDB/tree/main/monitoring) 是 OpenMLDB 连接监控平台 Prometheus 的 exporter,它的角色是作为一个 OpenMLDB 的 client 接入,通过 OpenMLDB Python SDK 做 SQL 语句查询,并将查询结果转化成 prometheus 指标。目前该模块并没有添加单元测试用例,也没有覆盖度报告,你需要为该模块添加上述两项内容。

编程语言

● Python
● GitHub workflow
● Poetry build tool & shell script

实现方案

  1. 需要添加测试用例的主要关注的代码在目录 monitoring/
    a. 项目使用 poetry 作为构建工具,功能代码在 openmldb_exporter 子目录下
  2. 调研合适的 python 测试和 coverage 库并引入到项目中,例如 pytest 和 coverage
    a. 将测试库引入 https://github.com/4paradigm/OpenMLDB/blob/af7a30760f354adfa07ae3b20b88adf4e164ffa6/monitoring/pyproject.toml#L1, 并可以通过 poetry 命令直接测试
  3. 设计实现合理的测试用例
    a. 为与 openmldb 解耦,需要调研 python 下能做 sql mock driver 的库,为查询用到的 sql 语句例如 show components, select 语句提供 mock 数据返回
    b. 如有必要,可以修改 https://github.com/4paradigm/OpenMLDB/blob/af7a30760f354adfa07ae3b20b88adf4e164ffa6/monitoring/openmldb_exporter/collector/collectors.py#L29 的接口实现
    c. UT 设计上可以参考 https://github.com/prometheus/mysqld_exporter
  4. 新增 monitoring 的 GitHub Workflow Job, 自动化完成监控测试和覆盖率报告上传
    a. 需要了解 GitHub Workflow 用法,具体阅读 GitHub 相关文档:https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions
    b. 使用 https://github.com/codecov/codecov-action 上传覆盖度报告
    c. 可以参考 .github/workflows 下其他 Jobs,例如 sdk.yml, coverage.yml

    GitHub Issue

    https://github.com/4paradigm/OpenMLDB/issues/1970