作者简介:
- 王文艳,来自货拉拉/技术中心/质量保障部,测试专家,主要负责货拉拉大数据领域的质量保障和效能建设工作。
- 窦婷,来自货拉拉/技术中心/质量保障部,资深测试工程师,主要负责货拉拉大数据领域的质量保障和效能建设工作。
- 董帅,来自货拉拉/技术中心/质量保障部,高级测试工程师,主要负责货拉拉大数据领域的质量保障和效能建设工作。
随着货拉拉业务的高速发展,大数据在用户行为分析、广告定向投放、风险控制、用户画像、为公司管理层和运营团队提供决策帮助等方面,得到了越来越广泛的应用。
大数据的源数据来源于业务数据、埋点数据等,每天有百亿级的数据交互,业务数据的复杂性和快速增长的数据量级,也对质量保障有了更高的要求。我们需要从高质量、高效率、高可用、高主动性 4 个方面来保证大数据的质量。对于大数据测试人员来说也是很大的挑战,以下图片从技能、数据特点、效率三个方面分析了传统测试与数据测试区别,总结了货拉拉数据测试的早期的问题及大数据测试的痛点。
数据测试需要更高的技术要求。除了传统的黑盒、白盒、灰盒测试能力,数据测试还需要掌握以下几个方面的能力:
传统测试主要关注业务逻辑,数据量少,结构单一。大数据测试面临数据量大,结构复杂的挑战,同时对数据质量要求更高。大数据的源数据来源于业务数据,所以数据质量极易受到业务问题的影响,导致线上数据质量出现问题。想从海量数据中发现问题,犹如大海捞针,在早期,我们的数据测试手段是有限的,没有测试工具及平台来支撑,导致我们存在以下难点。
业务测试的标准是业务逻辑,对功能的测试结果是即时可见的。但数据测试的标准不仅是业务逻辑,还包括数据质量,数据质量的问题也会引发很大的问题。在早期,手工的数据测试、人员的紧缺、激增的数据业务需求,导致在测试效率方面存在很大的痛点。具体难点表现在如下:
针对货拉拉大数据测试保障的重点和难点,我们采用了以下几种解决方案:
大数据测试平台基于 Spring Boot 构建,并依赖于混合引擎进行数据计算。它提供了一系列强大的功能,包括数据质量模型构建、数据质量模型执行、数据质量任务管理、异常数据发现保存以及告警功能等。此外,该平台还提供了数据质量模型资源隔离和权限隔离等特性,确保了数据的安全性和私密性。该平台具备高并发、高性能和高可用的大数据质量管理能力,能够有效地满足用户在大数据测试和管理方面的需求。
大数据测试平台的架构设计精细且全面,主要包括应用层、服务层、数据层和存储层。
大数据测试平台主要涵盖四大核心功能:测试管理、规则执行、结果分析以及监控告警。在大数据测试流程中,我们有能力在平台上生成测试用例并沉淀这些测试用例,测试用例的生成是基于平台上配置的测试执行规则,这主要涉及到规则的定义。随后,我们会根据配置的测试规则进行计算。对于这些计算结果,我们将进行深度分析。此外,我们还可以设定任务定时运行,一旦运行失败或者结果未达到预期,平台将及时进行通知。接下来,我们将详细阐述这四大核心功能的特性和优势。
大数据测试平台的测试管理能力主要由两大模块构成:用例模板模块和用例管理模块。
select
[count( case when {{emptyFields}} is null or {{emptyFields}} ='' then 1 end )/count(1) as {{emptyFields}}_rate $,;emptyFields$]
from {{tableName}}
where 1=1 and [{{partField}} = date_sub(current_date(),1) $and;partField$] ;
根据模版生成测试用例核心代码【代码已简化,只保留核心逻辑】:
//解析模版,转化成规则配置类
MonitorRuleTemple monitorRuleTemple = covertFromModule(config,MonitorAgreement.class);
//获取规则配置中的sql语句
String sql =monitorRuleTemple.getSql();
/*处理sql语句中带[]符号的部分,[]部分为循环部分,[表达式 $连接符号;循环变量$]
如下的表达式,
[{{partField}} = date_sub(current_date(),1) $and;partField$]
若partField的实际参数值为2个字段:dt、city_id时,根据如上表达式,生成的结果为:"dt ='2024-06-15' and city_id=1000"
*/
if(Objects.nonNull(sql)){
sql =sqlProcess(sql,paramsMap);
monitorRuleTemple.setSql(sql);
}
/*
处理sql语句中,除了[]之外的{{param}}参数。这里会根据实际参数替换表达式中的值,
如下表达式:{{param}},若param的值为:city_id时,则会将sql语句中所有的{{param}}都替换为city_id字段。
*/
ruleProcess(monitorRuleTemple,paramsMap);
return monitorRuleTemple;
规则执行是大数据测试平台的核心能力,主要由规则配置、规则计算两个功能组成。
//货运规则配置中脚本中数据源的类型
DataSourceType sourceType = DataSourceType.findByTypeByte(dataSourceType);
//根据数据源的类型,获取不同的数据源客户端执行方法
switch (sourceType) {
case INTERFACE_CURL:
queryTask = curlClient;
break;
case INTERFACE_HTTP:
queryTask = httpClient;
break;
case HIVE:
queryTask = idpClient;
break;
case MYSQL:
queryTask = mySqlClient;
break;
case HBASE:
queryTask = hbaseClient;
break;
case PHOENIX:
queryTask = phoenixClient;
break;
default:
queryTask = null;
}
return queryTask;
在大数据测试执行结果出来之后,我们就需要对其进行深入分析。在协议配置中,我们支持结果预设,且支持多种规则比较的类型如大于、大于等于、小于、小于等于、等于、不等于、同环比、范围比较等。除此之外,规则配置中还支持原始指标和转换指标,对于 SQL 的运行结果,我们可以对执行结果进行表达式再计算之后再进行规则比较。
规则比较核心代码【代码已简化,只保留核心逻辑】
//这里举其中一种比较规则的实现方式:范围的比较的实现方式
//首先检查输入的数据的类型,仅支持数值类型
RuleCheckTypeStrategy.checkNotSupportNonNumeric(ruleResultContext.getActualResult(), this);
//获取预期的范围
Double expectRange = Double.valueOf(ruleResultContext.getExpectRange());
//计算实际值的差值的范围
Double acutalRangeBoundary = RuleCheckTypeStrategy.computeThresholds(ruleResultContext.getActualResult(), this);
//若实际值的范围在预期范围内,则规则比较通过,否则不通过
boolean flag = true;
flag = compareRange(expectRange,acutalRangeBoundary);
return flag
执行结果展示
大数据测试平台还提供了定时调度、告警通知的能力,任务中支持定时运行的配置,定时配置是使用 corn 表达式方式,可以灵活支持用户的定时运行的需求。平台还提供了告警通知能力,任务配置中可以配置失败告警通知人或通知群,在配置的规则每天定时运行的结果出现问题时,我们可以及时收到告警通知。这些功能可以满足大数据测试的监控告警的需求。
随着货拉拉大数据测试质量平台能力已经具备,接下来我们将从三个阶段介绍如何使用平台能力赋能货拉拉大数据质量全流程测试
大数据测试时,我们会根据业务需求转换成规则配置,然后对规则做分析和预置,使用模版功能可以一键生成用例,并且支持一键执行用例。
功能测试完成之后,我们可将一些用例一键沉淀成自动化用例,可用于需求的自动化回归测试。
无论实时或离线的大数据平台任务和库表数据,都需添加监控任务以便及时发现并解决问题。大数据测试平台已提供了一套完整的线上质量监控功能,实现全天候的数据质量保障。
我们已针对以下类型添加了监控告警:
监控类型 | 描述 |
---|---|
数据指标监控 | 对字段级的监控,监控规则如:数据掉底、同环比、枚举值、数据范围、字段关系等 |
横向数据监控 | 大数据的产品和公司其他职能部门的同类产品指标的横向对比,如大数据和业务数据的实时横向对比等 |
竖向数据监控 | 大数据不同产品间的同类指标的对比,如实时数据和离线数据的对比,不同产品间履约类指标的对比等 |
业务逻辑异动监控 | 不同业务数据反映了该业务正常运营的情况,业务数据的异动同时也代表该业务有可能出现问题,如画像人群名称的监控,交易金额倒挂的监控等 |
数据应用链路监控 | 监控数据应用全流程的数据准确性、及时性、一致性 |
随着监控内容的丰富,线上质量得到了更好的保障。在配置监控告警时,我们可以设置不同的警告级别,并根据级别以不同方式通知负责人,如电话、短信、飞书等。
飞书告警示例:
随着智能化的发展,未来我们希望大数据的测试能够更智能更高效,达到智能化一体化。