专栏首页软件测试经验与教训DI/FS/ETL系统中数据准确性验证的羽量级实现

DI/FS/ETL系统中数据准确性验证的羽量级实现

DI/ETL/FS系统是什么?

DI :数据集成,数据集成系统是为用户访问多个有效的、异构的数据源提供统一的应用系统,从而使用户真正将注意力集中在他们想要的特定结果上,而不必关心如何获得这些结果。现在一些企业在做的数据整合平台就是数据集成系统。

FS :财务系统。

ETL:数据仓库,也可以称为DW或DWH。是数据库概念的升级。从逻辑上理解,数据库和数据仓库没有区别,都是通过数据库软件实现存放数据的地方,只不过从数据量来说,数据仓库要比数据库更庞大德多。数据仓库主要用于数据挖掘和数据分析,辅助领导做决策。

这三类系统有一种共通点,就是数据量庞大,且“抽数”、“洗数”的动作较多,而且很可能没有直接观察的页面,所以在测试过程中验证如何验证数据的准确性是一道难题。

DI/ETL/FS系统测试的痛点

测试该类系统的痛点:

  1. 数据来源于不同数据库,又缺少集成的页面来比对数据,导致数据比对工作量巨大且过程繁琐易出错。我们希望能有一款工具,用它来跨多数据库类型进行数据比对;
  2. 数据量庞大,只能抽检,难以保证每条数据都正确,测试结果受到质疑。若人工比对,显然不可接受,我们希望能有工具进行自动化比对;
  3. 测试环境造数困难,难以做到仿真的数据量和各种异常数据;
  4. 系统“抽数”、“洗数”的动作决定了我们要对来源数据(即数据进入数据库之前或者被系统处理之前)进行准备和校验,对数据处理结果进行校验,我们希望有工具能帮助我们快速、准确且全面的完成这个过程。
  5. ......

这个过程的测试比较复杂,今天我们先讲讲如何应对第一个痛点。

若要解决这个问题,理想的工具应该具备哪些基本功能呢?

  • 可以连接不同数据库,执行SQL或者类SQL脚本;
  • 可以对数据库返回结果进行判断;
  • 可以把判断结果打印输出;

这样的工具有很多,今天以JMeter比较ORACLE和MYSQL内两表数据为例,说明如何操作:

(1)建立ORACLE和MYSQL的连接:

(2)在源表和目的表分别执行SQL操作:

(3)将SQL返回存入变量:

vars.put("result1",String.valueOf(prev.getResponseDataAsString()));

vars.put("result2",String.valueOf(prev.getResponseDataAsString()));

(4)比较两变量并做出判断:

if (!vars.get("result1").equals(vars.get("result2"))) {

Failure = true; FailureMessage = "错了,两个SQL返回不一致";

}

else {

FailureMessage = "靠谱";

}

(5)打印输出判断结果(不符合期待输出):

(5)打印输出判断结果(符合期待输出):

羽量级实现是什么?

之所以称为羽量级实现:

  • 需要掌握的语法点只有四处:String.valueOf()、vars.put()、.equals()、if_else,其他都在JMeter图形界面中配置,学习成本很低;
  • JMeter是开源工具,随手可得,安装方便;
  • 执行效率很高,笔者尝试对源表和目的表50字段,百万行数据,10表UNION查询结果进行比对,执行时间不超过20秒,时间消耗主要在数据库端;
  • SQL语法灵活,为后期比对方便,可以在SQL里插入TO_CHAR()、TRIM()等函数;
  • JMeter可以轻松嵌套判断循环等逻辑,能够将比对异常结果定义到具体某一行位置;
  • 可以连接多种类型数据源,只要下载对应驱动,无额外成本,即使Hadoop这样的非关系数据库。

能力不在于掌握了多少奇巧,在于你对解决问题的渴望。

再多一句,JMeter是个好东西,有机会和大家聊聊用JMeter做UI自动化测试。 作者:9016 链接:https://www.jianshu.com/p/b331f2e83645

本文分享自微信公众号 - 软件测试经验与教训(udatest),作者:9016

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 性能测试项目中遇到的问题和解决方法

    张树臣
  • 看图说话:SQL注入(SQL Injection)漏洞示例

    不知道有没有测试同仁遇到过类似这样的情景:登录或者查询数据失败的时候,程序给出了一个包含SQL脚本的提示框。作为测试人员,我们隐约感觉这样的提示信息不友...

    张树臣
  • 一个比较实用的测试方法

    张树臣
  • 【QMonitor新特性】SQL性能历史跟踪及SQL执行计划变更历史

    业界通常把DBA分为系统DBA和应用DBA两种。对于系统DBA来说,主要的职责是确保数据库系统的稳定和高效的运行。而应用DBA主要是优化应用,以求得一种“更经济...

    沃趣科技
  • 「ShardingSphere」SQL 解析器源码剖析

    自从上周写了一个 ShardingSphere 简单入门之后,突然对这个产品产生了浓厚的兴趣。

    FoamValue
  • SQL SERVER 时间换空间,空间换时间 以及什么是好SQL

    希望这期不要掉粉,因为在说SQL SERVER 但实际上这期如果你放到所有的数据库上去看,也是有营养的,虽然放到了一般不会发文的周六,也没想有多少观众,就当自己...

    AustinDatabases
  • 翻过那座山,就能看见海|kubernetes让DBA更优雅地管理数据库

    标题中的DBA其实包含两层含义:Database Architect 与 Database Administrator,我在这里都简称DBA了。

    沃趣科技
  • 数据库防火墙:数据库防火墙应具备哪些能力

    互联网时代,由数据库引发的安全事件越来越多,数据库防火墙作为保护数据库安全必不可少的防御工事,也越来越受到企业关注。

    数据安全
  • 分布式 SQL 数据库新的演变方向

    随着各个组织先后将其业务转向云端环境时,他们很快地意识到:在一些最关键的应用背后,那些旧式的关系型数据库不但限制了迁移的速度,而且根本无法有效地实现灵活的业务扩...

    民工哥
  • NO

    N ---- 非关系型数据库( Not Only SQL):这个词听起来几乎就是「SQL,结构化查询语言」的反义词,SQL 是传统的关系型数据管理系统(RDBM...

    Albert陈凯

扫码关注云+社区

领取腾讯云代金券