mcpField
L
lookml-tests

lookml-tests

github.com/lkrdev测试与质量1655 次安装22 周前更新
代码仓库

关于 lookml-tests

为 LookML 语义模型测试提供规范,涵盖测试文件组织,以及完整性、准确性和业务逻辑检查的编写方式。适用于验证模型行为和底层数据假设的团队。

主要功能

  1. 01每个 Explore 单独设测试文件
  2. 02使用查询与断言编写测试
  3. 03检查主键唯一性
  4. 04验证度量值准确性
  5. 05编写业务逻辑断言
  6. 06用筛选条件限制扫描

适用场景

  1. 01通过主键检查发现关联扇出
  2. 02核对度量值是否符合预期
  3. 03检查业务计算约束

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/lkrdev/lookml_skills --skill lookml-tests

安装后在 Claude Code 中输入/lookml-tests确认已加载。

详细介绍

LookML 测试规范

测试对于维护数据可信度至关重要。LookML 测试可让我们验证语义模型是否按预期运行,以及底层数据是否符合我们的假设。

1. 文件组织

  • 位置:在 tests/[explore_name].test.lkml 中定义测试。
  • 每个 Explore 一个测试套件:每个文件应包含特定 Explore 的所有测试定义。
  • 命名约定:[explore_name].test.lkml(例如,orders.test.lkml)。

2. 测试结构

每项测试都由一个 explore_source 查询和一条 assert 语句组成。

test: [test_name] {
  explore_source: [explore_name] {
    column: [column_name] { field: [view_name].[field_name] }
    filters: {
      field: [view_name].[field_name]
      value: "[value]"
    }
  }

  assert: [assertion_name] {
    expression: ${[view_name].[field_name]} [operator] [value] ;;
  }
}

3. 测试类型

A. 完整性检查(关键)

验证联接后主键是否保持唯一。这是防范由不正确的 one_to_many 联接定义导致的“扇出”错误的最佳方法。

示例:主键唯一性

test: orders_pk_is_unique {
  explore_source: orders {
    column: order_id {}
    column: count {}
    # Limit to recent data to save costs/time if table is large
    filters: {
      field: orders.created_date
      value: "last 7 days"
    }
  }

  assert: order_id_is_unique {
    expression: ${orders.count} = 1 ;;
  }
}
B. 准确性测试

根据已知常量或预期值验证特定度量值。

示例:收入为正

test: revenue_is_positive {
  explore_source: orders {
    column: total_revenue {}
    filters: {
      field: orders.created_date
      value: "yesterday"
    }
  }

  assert: revenue_greater_than_zero {
    expression: ${orders.total_revenue} >= 0 ;;
  }
}
C. 业务逻辑验证

确保计算结果符合预期。例如,检查 gross_margin 是否始终不大于 revenue,或者活跃用户的 lifetime_orders 是否始终不为 NULL。

示例:逻辑检查

test: margin_less_than_revenue {
  explore_source: orders {
    column: total_revenue {}
    column: total_margin {}
  }
  
  assert: margin_is_valid {
    expression: ${orders.total_margin} <= ${orders.total_revenue} ;;
  }
}

4. 最佳实践

  • 描述性扩展名:为测试(orders_pk_is_unique)和断言(order_id_is_unique)使用清晰易懂的名称。
  • 性能:对于大型表,使用筛选条件(例如,last 7 days)限制扫描范围,除非需要验证完整历史数据。
  • 模型包含:确保模型文件包含 test 文件(例如,include: "/tests/*.test.lkml")。

评论

支持 Markdown