作者:郝阔君 GrowingIO QA Lead,曾任职于中国惠普、奇虎 360。带领 QA 团队负责 GrowingIO
全产品线质量保证工作,目前专注于 DevOps 实践,帮助团队提升质量和效率。
1.问题背景
「事件分析」是 GrowingIO 为用户提供的一个非常灵活、强大的基于大数据平台的交互式多维分析工具,下面是一个简单的单指标、单维度、带过滤条件的事件分析图表:
如何对事件分析产生的图表进行测试呢?经过分析,我们发现一个事件分析图表包含指标、维度、目标用户、过滤条件、时间范围、粒度、排序多个因素,这些因素会影响其查询结果。
而每个因素又有多个取值,有的取值多达几十种,即使每个因素都使用等价类划分取最小值,其组合产生的测试用例数为:
指标数(23) * 维度数(9) * 目标用户数(6) * 过滤条件(无过滤条件(1) + 维度数(9) * 过滤类型(6)=55) * 时间范围(14) * 粒度(4) * 排序(5) = 22314600。
即使仅选取其中最关键的指标、维度、目标用户、过滤条件 4 个因素,其组合数也高达 23 * 9 * 7 * 55 = 79695 。如此多的测试用例数量,如何测试呢?
2.寻找测试方案
显然,通过手工测试的方式是无法完成如此海量的测试任务的,必然需要使用自动化测试的方式。但如果采用 UI 自动化方式,其实现成本高,执行慢,不稳定,结果判定难, API 测试显然更合适。
GrowingIO 的可视化图表数据都来自 Charts 服务,Charts 服务定义了一种强大灵活的被称为 GQL(GrowinIO Query Language) 的 DSL,用于描述图表查询(可以类比 SQL)。以上面事件分析图表为例其 GQL 简化的表达如下:
{
"metrics": [
{
"id": "pv",
"name": "页面浏览量"
}
],
"dimensions": [
"city"
],
"granularities": [
{
"id": "tm",
"interval": 86400000
}
],
"filter": {
"op": "a