如何进行大数据测试
大数据测试通常是指对采用大数据技术的系统或者应用的测试。大数据测试可以分成两个维度,一个维度是数据测试,另一个维度是大数据系统测试和大数据应用产品测试。
大数据测试和传统数据测试的不同
| 对比项 | 大数据测试 | 传统数据测试 |
|---|---|---|
| 数据量级 | 需要处理的数据量级较高 | 设计的数据量级较低 |
| 数据结构 | 处理的数据包括结构化数据、非结构化数据、和半结构化数据 | 以结构化数据为主 |
| 验证工作 | 验证环节多,数据量大,较复杂 | 抽取数据来验证,相对简单 |
| 环境要求 | 依赖HDFS、YARN和Zookeeper等集群环境 | 依赖传统数据库 |
| 测试工具 | 依赖Hadoop生态系统组建和ETL 测试工具 | 依赖传统数据库和部分测试工具 |
| 测试人员 | 技能门槛高,需要测试人员掌握大数据相关技能 | 技术门槛相对较低 |
与其他类型的测试一样,大数据测试也需要遵循既定的策略和方法。
测试类型划分:功能测试、性能测试、和其他非功能性测试
功能测试常用的测试方法有数据完整性、数据一致性、和数据准确性测试。
数据完整性是指数据记录和信息完整,不存在缺失情况。数据缺失主要包括记录缺失和记录中某个字段信息缺失,两者都会导致统计结果不准确。需要关注两点,数据不多,和 数据不少。
数据不多
一般检查全表数据,重要枚举值数据是否重复,以及主键是否唯一
数据不少
一般检查全表数据或业务相关的重要字段(如日期、品牌、类目和枚举值等)是否缺失。
如果我们知悉数据量,如表中的品牌字段有X条数据,则检查品牌字段的是否有X条数据即可。
如果数据规模本身变动很大,可以通过对比历史数据条数来评估数据波动是否正常。
数据一致性主要包括数据记录规范一致、数据逻辑一致和多节点数据一致。
数据记录规范一致:数据编码和数据格式,如订单ID,从业务来源表到数据仓库每一层中的表都应该是同一种数据类型,且长度需要保持一致。
数据逻辑一致:多数据间的逻辑处理一致。
可以通过数据的diff测试来验证数据的一致性。
数据准确性测试主要包括数值检查、时间维度对比,空间维度对比
数值检查通常需要验证数据值是否在常规范围内,比如人数比例,理论上位于[0,1],是否在业务范围内,这依赖于对数据业务规则的理解。
时间维度对比,即对比同一组数据在不同时间的波动情况。
空间维度对比,即固定时间维度,将当前数据与其他数据进行对比,进一步保证准确性。
上下游数据对比。检查重要字段数据在上下游的加工过程中是否丢失。
与系统内的其他数据对比。
与系统外的其他数据对比。
BI报表如何测试,测试点如下:
1、罗列式:这个是非常简单的报表,就是将源数据根据规则进行罗列,不涉及任何计算。罗列式报表的测试重点是检查罗列项是否与需求一致(不缺项,不多项),罗列项的顺序是否正确,以及是否通过罗列方式正确获得预期数据。
2、统计式:单个源数据经过简单的加减乘除、求和、求平均值等计算方法得到的报表。使用抽查验证方法。还考虑到数据的多样性和偶然性等问题,需要进行多种情况组合抽样验证。
3、算法式:是由一个或者多个数据源,根据一定的公式计算汇总得到的报表。此类报表涉及多数据源、多表、和多业务流程,是报表测试的难点。
在测试的时候,需要重点关注数据来源,业务含义,和计算逻辑等。可以采用抽样统计法、直观观察法、和对照法。
对照法:是验证相同数据在不同报表中等效维度是否一致。
数据有效性:由于源数据会受到数据采集、转换和处理等因素影响,因此可能存在异常数据,这将导致报表出现无效的统计结果。
数据的易用性:是指报表数据能否被用户直观理解。例如数据精度统一,时间格式统一,数据换算单位准确。四舍五入保留统一2位等。
1、UI验证
对界面功能、交互设计的验证。验证报表页面布局样式、表格格式、字体格式、颜色搭配、报表标题和文案。
2、交互验证
主要包括:翻页、过滤器、提示、参数、上钻/下钻、多表联动、排序和导出等功能的验证。
3、更新验证
在源数据出现更新后,验证报表数据是否更新正确
4、及时验证
主要是针对实时报表生成的及时性验证,验证在及时性方面是否满足业务需求
5、安全测试
检查报表系统的用户权限,数据安全设置是和合理
6、性能测试
数据响应时间、报表生成耗时等性能指标进行测试,验证是否符合预期。
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack