大数据测试,在当前的测试领域是一个相对比较新的领域,而且难度也非常大。大数据测试从某种意义来说和人工智能测试有点类似,测试数据的量比较大,而test oracle又不像传统测试那样容易定义。另外大数据测试人员还必须懂得大数据的专业工具比如hadoop、HDFS、HiveQL、 Pig等,同时最好也需要懂python等语言,对测试人员的综合要求非常高。
之前,我也写过一篇文章《浅谈大数据测试》,但是比较基础,下面的这篇我翻译的文章将会更加具体的谈大数据测试方方面面的知识。
原文在:http://tryqa.com/big-data-testing/
01
什么是大数据
大数据是指传统数据库无法处理的海量数据。当我们有合理数量的数据时,我们通常使用传统的关系数据库,如Oracle、MySQL、SQL Server来存储和处理数据。然而,当我们有大量的数据时,传统的数据库将无法处理这些数据。
传统数据库擅长处理可以存储在行和列中的结构化数据。但是,如果我们有不遵循结构的非结构化数据,那么使用关系数据库就不是正确的选择。
在大数据的情况下,我们有大量的数据,可以是任何格式的图像,平面文件,音频等,其结构和格式可能不一样的每一个记录。
与传统数据库相比,大数据的规模,即不时生成的数据量,可能要大得多。这将很难处理传统数据库。
大数据具有大数据量、产生速率快和数据多样性的特征。
- 数据量:组织收集的数据量很大,来自不同的来源,如传感器、水表读数、商业交易等
- 速率:数据以高速创建,必须快速处理和处理。物联网设备、RFID标签、智能电表等设备以前所未有的速度自动生成数据
- 多样性:数据以各种格式出现。它可以是音频,视频,数字,文本,电子邮件,卫星图像,大气传感器等
02
大数据的例子和使用
存储数据而不分析数据就想从数据中获得有意义的价值是一种资源浪费。在我们研究大数据测试之前,了解它在现实世界中是如何使用的是很有用的。
电子商务
亚马逊(Amazon)、Flipkart和其他电子商务网站每天都有数百万的访问者,拥有数十万种产品。亚马逊使用大数据来存储关于产品、客户和购买的信息。
除此之外,这些数据还包括产品搜索、视图、添加到购物车的产品、购物车废弃、一起购买的产品等。
所有这些数据都被存储和处理,以建议客户最有可能购买的产品。
如果您打开一个产品页面,您可以在“经常一起购买”、“购买了此商品的客户也购买了”和“查看了此商品的客户也查看了”部分中看到这一点。
这些信息还用于推荐交易/折扣和在搜索结果中对产品进行排序。所有这些数据都必须快速处理,这在传统数据库中是不可行的。
社交媒体
社交媒体网站产生大量的图片、视频、点赞、帖子、评论等数据。数据不仅存储在大数据平台中,还会被处理和分析,以提供您可能喜欢的内容建议。
推特
- Twitter每月有3.1亿活跃用户
- Twitter上一共创建了13亿个账户
- 每天有5亿条推文是由用户发送的,大约每秒6000条
- 2014年世界杯决赛期间,一分钟内就有超过618725条推文被发送
脸谱网
- Facebook每月有19亿活跃用户
- 每天有超过12.8亿用户登录Facebook
- 每天有3.5亿张照片被上传
- 每分钟更新51万条评论和29.3万条状态
- 每天都会产生4 pb的新数据
- 每天的视频产生80亿的浏览量
- 每个月有7亿人使用Instagram
- Instagram上分享了400亿张照片
- 用户每天喜欢42亿张图片
- 每天有9500万张照片被上传
数据不仅存储在大数据平台上,还会被处理和分析,以提供您可能感兴趣的事物的建议。
例如,如果你在亚马逊上搜索洗衣机,然后登陆Facebook, Facebook会显示同样的广告。
这是一个大数据用例,因为有数百万的网站在Facebook上做广告,而Facebook有数十亿的用户。
传统数据库无法在相同的时间内存储和处理这些信息,从而向正确的用户显示正确的广告。
用正确的广告定位正确的客户是很重要的,因为搜索洗衣机的人更有可能点击洗衣机的广告,而不是电视广告。
医疗保健
- FDA和CDC创建了GenomeTrakr程序,该程序处理17tb的数据,用于识别和调查食物传播的疾病暴发。这有助于FDA确定一个花生酱生产中心是多州沙门氏菌爆发的源头。FDA暂停了工厂的生产,从而阻止了疫情的爆发。
- 安泰保险公司在一年内处理了60万份化验结果和1800万份索赔,以评估患者的风险因素,并将治疗重点放在对患者健康有显著影响和改善的一两个方面。
03
大数据中的数据格式
人们常问的一个问题是——为什么我们不能使用传统的关系数据库来处理大数据。要回答这个问题,首先我们需要了解大数据中不同的数据格式。
大数据中的数据格式可以分为三类。它们是:
- 结构化数据
- 半结构化数据
- 非结构化数据
结构化数据
- 这指的是高度组织的数据。
- 它可以轻松地存储在任何关系数据库中。
- 这也意味着可以使用简单的查询轻松地检索/搜索它。
结构化数据的例子
下图描述了一个应用程序的数据模型。在这里可以看到表和表中相关的列。在这个例子中,用户表t_user存储用户名、密码、电子邮件、电话号码等详细信息。字段的长度及其数据类型是预先定义的,并且具有固定的结构。
半结构化数据
- 半结构化数据并不是严格按照一种便于访问和搜索的格式组织的。
- 半结构化数据通常不存储在关系数据库中。
- 但是,经过一些处理后,它们可以存储在关系数据库中,并转换为结构化格式。
- 半结构化数据介于结构化和非结构化数据之间。
- 它们可以包含标签和其他元数据来实现层次结构和顺序。
- 在半结构化数据中,相同类型的实体可能具有不同顺序的不同属性。
半结构化数据的例子
CSV、XML和JavaScript对象表示法(JSON)是几乎在所有应用程序中使用的半结构化数据的示例。
下面给出了一个XML文件的示例。我们可以看到,XML文件引用了目录和作为目录一部分的书籍。通过一些处理,这些数据可以存储在关系数据库中。
下面给出了示例JSON内容。在下面的示例中,我们有用户的地址和电话号码以及其他一些详细信息。处理后还可以将这些信息存储在关系数据库中。
非结构化数据
- 非结构化数据没有任何预定义的格式。
- 它不遵循结构化数据模型。
- 它没有组织成预定义的结构。
- 图像、视频、word文档、mp3文件可以被视为非结构化数据,即使它们有一个内部结构
- 这种结构的缺乏使得从关系数据库中存储和检索这样的数据变得很困难
- 在一个组织中产生的多达80%的数据是非结构化数据
非结构化数据的例子
图片、视频、word文档、演示文稿、mp3文件等
04
为什么传统的关系数据库不能支持大数据
传统的关系型数据库如Oracle、MySQL、SQL Server等不能用于大数据,因为我们拥有的大部分数据都是非结构化的。
各种数据——数据可以是图像、视频、图片、文本、音频等形式。可以是军事记录、监控录像、生物记录、基因组数据、研究数据等。此数据不能以RDBMS的行和列格式存储。
大数据中存储的数据量是巨大的。这些数据需要快速处理,这就需要数据的并行处理。RDBMS数据的并行处理将是非常昂贵和低效的。
传统的数据库不能存储和处理大容量的数据。例如:美国的卫星图像,世界的路线图,Facebook上的所有图片。
数据创建速度——传统数据库无法处理创建大量数据的速度。例如:每秒创建6000条tweet。每分钟有51万条评论。传统数据库无法处理这种存储或检索数据的速度。
05
测试大数据应用的策略和步骤
在大数据项目的流程/工作流中有几个需要进行测试的领域。大数据项目中的测试通常与数据库测试、基础设施和性能测试以及功能测试相关。有一个清晰的测试策略有助于项目的成功。
大数据应用的数据库测试
与软件组件的测试相比,测试工作的很大一部分将花费在数据验证上。
在进一步讨论之前,让我们先了解一下大数据应用程序中的数据流。该工作流如下图所示。
- 数据可以从各种来源流入大数据系统,如传感器、物联网设备、扫描仪、CSV、普查信息、日志、社交媒体、RDBMS等。
- 大数据应用程序将使用这些数据集。可能需要对这些数据进行清理和验证,以确保继续使用正确的数据。
- 由于这些数据将是巨大的,我们将不得不把它带到Hadoop(或类似的框架)中,在那里我们可以处理这些数据。
- 一旦数据在Hadoop中,我们将必须验证数据是否已正确导入到Hadoop中。
- 我们必须测试数据的正确性和完整性。
- 为了使用Hadoop,您应该了解Hadoop中使用的命令。
- 为了验证源数据,您应该了解SQL,因为数据源可以是RDBMS系统
- 大数据应用程序将对Hadoop中的数据进行处理,并按照所需的逻辑进行处理
- 虽然我们的大数据应用程序在Hadoop中处理数据,但我们也希望验证它是否按照客户的要求被正确地处理了。
- 为了测试应用程序,我们使用测试数据。Hadoop中可用的数据是巨大的,我们不能使用所有的数据进行测试。我们为测试选择数据的子集,我们称之为测试数据。
- 我们还必须根据客户的要求对测试数据运行相同的过程。
- 然后将其与大数据应用的处理结果进行对比,以确认该应用正在正确处理数据。
- 为了处理测试数据,您将需要一些Hive、Pig脚本、Python和Java方面的知识。您将开发用于提取和处理测试数据的脚本。
- 您可以将大数据应用程序看作是开发人员编写的处理大量数据的应用程序。例如:假设你在Facebook工作,开发人员开发了一个大数据应用程序,其中任何包含短语“免费信用卡优惠”的评论都被标记为垃圾信息。这是一个过于简化的例子,通常应用程序更复杂,涉及到识别数据中的模式,并使用数据科学提出预测,从而将垃圾评论与合法评论区分开来。
- 然后将处理后的数据存储在数据仓库中。
- 数据存储在数据仓库后,可以通过大数据应用程序再次验证数据,以确保数据与处理后生成的数据一致。
- 数据仓库中的数据通常以可视格式进行分析和描述,以便从中获得业务智能(BI)。一些组织使用来自SAP、Oracle等供应商的商业智能工具,或者使用R之类的语言来可视化数据。
- 数据一旦被可视化地表示出来,就必须对其进行验证
- 可以使用Web服务将数据从数据仓库传输到BI系统。在这种情况下,还必须测试web服务,测试人员应该具有测试web服务的知识。
从以上步骤可以看出,数据库测试将是大数据应用测试的重要组成部分。综上所述,以上步骤可分为3大类:
- 数据分段验证:这里我们验证来自不同来源的数据,如传感器、扫描仪、日志等。我们还验证推入Hadoop(或类似框架)的数据。
- 过程验证:在此步骤中,测试人员验证通过大数据应用处理后得到的数据是否准确。这还包括测试从Map Reduce或类似过程中生成的数据的准确性。
- 输出验证:在这个步骤中,测试人员验证来自大数据应用程序的输出是否正确地存储在数据仓库中。他们还验证数据在业务智能系统或任何其他目标UI中得到了准确的表示。
06
大数据应用的性能测试
大数据项目涉及在短时间内处理大量数据。这种操作需要大量的计算资源和网络中流畅的数据流。
系统中的体系结构问题可能导致流程中的性能瓶颈,从而影响应用程序的可用性。这反过来又会影响项目的成功。
为了避免上述问题,需要对系统进行性能测试。这里我们度量的指标包括吞吐量、内存利用率、CPU利用率、完成任务所需的时间等。
还建议运行故障转移测试,以验证系统的容错能力,并确保如果某些节点失败,其他节点将接管处理工作。
大数据/ Hadoop性能测试
大数据应用的性能测试主要集中在以下几个方面。
- 数据加载和吞吐量:在这个测试中,测试人员观察数据从不同来源(如传感器、日志等)进入系统的速率。测试人员还检查在数据存储中创建数据的速度。对于消息队列,我们测试处理一定数量的消息所花费的时间。
- 数据处理速度:在这个测试中,我们测量使用MapReduce作业处理数据的速度。
- 子系统性能:在这个测试中,我们测量作为整个应用程序一部分的各个组件的性能。隔离测试组件以识别应用程序中的瓶颈可能是有益的。这包括MapReduce过程的测试,查询的性能等等。
07
性能测试方法
大数据应用的性能测试方法如下图所示。
- 为了开始性能测试,需要设置将要测试的大数据集群。
- 必须标识和计划将作为性能测试的一部分执行的负载和作业。
- 编写可能需要的自定义脚本/客户端
- 运行性能测试并研究结果。
- 如果结果不令人满意,系统不符合性能标准,则必须对组件进行优化,并重新运行测试。
- 必须重复前面的步骤,直到达到性能要求。
08
大数据应用的功能测试
大数据应用的功能测试是基于用户需求对前端应用进行测试。前端可以是基于web的应用程序,它与Hadoop(或类似的后端框架)交互。
前端应用程序生成的结果必须与预期的结果进行比较,以便验证应用程序。
应用程序的功能测试在本质上与普通软件应用程序的测试非常相似。
09
大数据应用中测试人员的角色和职责
- 测试人员应该能够处理非结构化数据和半结构化数据。它们还应该能够处理数据仓库或源RDBMS中的结构化数据。
- 由于模式可能随着应用程序的发展而变化,软件测试人员应该能够处理变化的模式。
- 由于数据可以来自各种不同的数据源,并且在结构上也有所不同,因此他们应该能够根据自己对数据源的了解来开发自己的结构。
- 这可能需要他们与开发团队以及业务用户一起工作来理解数据。
- 在一般的应用中,测试人员可以在手动测试时使用抽样策略,或者在使用自动化工具时使用详尽的验证策略。然而,在大数据应用中,由于数据集庞大,即使提取一个准确代表数据集的样本,也可能是一个挑战。
- 测试人员可能必须与业务和开发团队一起工作,并且可能必须在提出策略之前研究问题领域
- 测试人员必须进行创新,以获得能够在保持高测试生产力的同时提供足够测试覆盖率的技术和工具。
- 测试人员应该知道如何使用Hadoop、HDFS等系统。在一些组织中,他们可能还需要具备或获得设置系统的基本知识。
- 测试人员可能需要了解Hive QL和Pig Latin。也可以要求他们编写MapReduce程序,以确保应用程序的完整测试。
- 大数据应用测试需要大量的技术技能,而拥有这些技能的测试人员需求量很大。
10
使用大数据/ Hadoop的优势
- 可伸缩:大数据应用程序可用于处理大量数据。这些数据的单位可以是pb或更多。Hadoop可以根据处理需求和数据轻松地从一个节点扩展到数千个节点。
- 可靠性:大数据系统被设计成容错和自动处理硬件故障。Hadoop自动将失败的任务从机器转移到其他机器。
- 经济:使用商品硬件和Hadoop提供的容错能力,使其成为处理涉及大型数据集的问题的非常经济的选择。
- 灵活:大数据应用可以处理不同类型的异构数据,如结构化数据、半结构化数据和非结构化数据。由于数据的并行处理,它可以非常快地处理数据。
11
使用大数据/ Hadoop的缺点
- 技术复杂性——大数据项目所涉及的技术复杂性明显高于正常项目。系统的每个组件都属于不同的技术。确保这些项目的硬件和软件顺利运行所涉及的管理费用和支持也同样高。
- 物流变化——想要使用大数据的组织可能不得不修改数据如何流入他们的系统。他们将不得不使他们的系统适应不断流动的数据,而不是成批的数据。这可以转化为对现有IT系统的重大更改。
- 熟练的资源——从事大数据项目的测试人员和开发人员需要有很高的技术含量,并且能够独立掌握新技术。寻找并留住高技能人才可能是一个挑战。
- 昂贵的——虽然大数据承诺使用低成本的机器来解决计算挑战,但此类项目所需的人力资源是昂贵的。此类项目所需的数据挖掘专家、数据科学家、开发人员和测试人员的成本高于普通开发人员和测试人员。
- 结果的准确性——从数据中提取正确的数据和准确的结果是一个挑战。例如:Gmail有时会将合法的电子邮件标记为垃圾邮件。如果许多用户将来自某人的电子邮件标记为垃圾邮件,那么gmail将开始将来自该发件人的所有电子邮件标记为垃圾邮件。
12
Hadoop架构
Hadoop是大数据项目中使用最广泛的框架之一。虽然测试人员可能从测试的角度对大数据感兴趣,但是对Hadoop架构有高级的理解是有益的。
上图展示了Hadoop的高级架构。每个节点(客户端、主节点、从节点)代表一台机器。
Hadoop安装在客户端机器上,它们通过加载集群数据、提交MapReduce作业和配置数据处理来控制正在进行的工作。它们还用于查看结果。所有这些机器组成一个集群。网络中可以有许多集群。
主节点有两个关键职责。首先,它们使用namenode处理分布式数据存储。其次,数据的并行处理(MapReduce),由JobTracker进行协调。次要的NameNode充当备份的NameNode。
从节点构成了服务器的主体。他们存储和处理数据。每个从节点都有一个DataNode和一个TaskTracker。
DataNode是NameNodes的slave,它接收来自NameNodes的指令并执行数据存储,如下所示。
TaskTracker是JobTracker的slave,它接收JobTracker的指令。它使用MapReduce处理数据,这是一个两步的过程。Map流程的工作流程如下图所示。
Reduce过程的事件序列如下所示:
13
大数据工具/通用术语
- Hadoop是一个开源框架。它用于使用机器集群的大型数据集的分布式处理和存储。它可以从一台服务器扩展到数千台服务器。它通过识别硬件故障并在应用程序级别处理它们,从而使用廉价的机器提供高可用性。
- Hadoop分布式文件系统(HDFS)——HDFS是一个分布式文件系统,用于跨多台低成本机器存储数据。
- MapReduce是一种并行处理大数据集的编程模型
- Hive是一个数据仓库软件,用于处理存储在分布式文件系统中的大型数据集
- HiveQL—HiveQL类似于SQL,用于查询存储在Hive中的数据。HiveQL只适用于平面数据结构,不能处理复杂的嵌套数据结构。
- Pig Latin—Pig Latin是一种高级语言,与Apache Pig平台一起使用。Pig Latin可用于处理复杂的嵌套数据结构。Pig Latin是基于语句的,不需要复杂的编码。
- 商品服务器——在处理大数据时,你会遇到像商品服务器这样的术语。这指的是用于并行处理数据的廉价硬件。这种处理可以使用廉价的硬件来完成,因为这个过程是容错的。如果一个普通服务器在处理一条指令时发生故障,Hadoop会检测并处理它。Hadoop将任务分配给另一台服务器。这种容错允许我们使用廉价的硬件。
- Node - Node指的是存储和处理数据的每台机器。像Hadoop这样的大数据框架允许我们处理多个节点。节点可能有不同的名称,如DataNode、NameNode等。
- datanode——这是用来存储数据和处理数据的机器。
- NameNode——NameNode是所有节点的中心目录。当客户机想要定位文件时,它可以与NameNode通信,后者将返回文件/数据所在的datanode服务器列表。
- 主节点——使用MapReduce监控数据存储和数据并行处理的主节点。它使用NameNode来存储数据,使用JobTracker来管理数据的并行处理。
- JobTracker——它接受任务,分配任务,识别出故障的机器
- 工作节点——它们是虚拟机的主体,用于存储和处理数据。每个工作节点运行一个DataNode和一个TaskTracker——用于与主节点进行消息传递。
- 客户节点——Hadoop安装在客户节点上。它们既不是主节点,也不是工作节点,用于设置集群数据、提交MapReduce作业、查看结果。
- 集群——集群是一起工作的节点的集合。这些节点可以是主节点、工作节点或客户机节点。
14
大数据自动化测试工具
测试大数据应用程序比测试常规应用程序要复杂得多。大数据自动化测试工具有助于自动化测试中涉及的重复性任务。
任何用于大数据应用程序自动化测试的工具都必须满足以下需求:
- 允许整个软件测试过程的自动化
- 由于数据库测试是大数据测试的重要组成部分,通过MapReduce算法和其他ETL转换处理后,当数据从源数据转换到目标数据时,数据库测试应该支持对数据的跟踪。
- 可伸缩,但同时,它应该足够灵活,可以随着应用程序复杂性的增加而合并更改
- 与不同的系统和平台如Hadoop、Teredata、MongoDB、AWS、其他NoSQL产品等集成
- 与开发运维解决方案集成,支持持续交付
- 良好的报告功能,帮助您识别系统中的不良数据和缺陷
15
大数据测试服务
如何在满足项目需求的同时,找到测试大数据项目所需的技术资源、留住这些资源、管理更高的工资成本和发展团队,是一个挑战,而大数据测试服务提供商解决了这个问题。
提供大数据测试服务的组织有高度技术化的团队成员。他们能够快速学习新技术并独立解决问题。他们拥有跨越大量技术、平台和框架的经验,这在测试大数据应用程序时是至关重要的。
大数据测试服务商拥有一批在大数据测试方面经验丰富的技术资源。他们能够快速地将这些资源部署到项目中。
如果一个组织要在内部发展大数据团队,它将花费大量的时间和成本来雇佣熟练的资源。这可能会影响到具有特定时间表的项目。除此之外,他们还必须保留和管理希望在该领域发展的团队成员的职业抱负。
在传统组织中,大数据项目可能是一个小项目,也可能是众多项目中的一个。然而,大数据项目是提供大数据测试服务的组织的重点领域。这使得该领域的专家可以在组织中成长的同时,提高他们的技术技能和领域知识。
因此,大数据测试服务提供商对于那些想要获得专业知识但又没有时间或资源来开发内部团队的组织来说是一个很好的解决方案。