想象一下,您正在设计一个系统,并且希望开始编写测试,以确定功能性,以及性能和可扩展性。在不同的环境中,有什么可以共享的技术来处理大型数据集吗?
我强烈建议在进行性能和可扩展性测试之前,优先考虑功能测试(使用TDD作为开发工作流)。TDD将确保您的代码设计良好且松散耦合,这将使创建自动化性能和可扩展性变得更加容易。当您的代码是松散耦合的时,您可以控制您的依赖关系。当您可以控制依赖项时,您可以为要编写的任何高级测试创建任何所需的配置。
做一些功能测试。考虑一些风险管理技巧参考这篇文章如何在大数据中处理风险管理这将对你有所帮助。
分离不同类型的测试。
- 功能测试应该放在第一位,以小的模拟数据量
- 接下来,集成测试,使用少量数据存储中的数据,尽管显然与存储大型数据集
- 您也许可以通过提高性能来减少开发工作量以及可扩展性测试
一个重要提示:您的测试数据集应该尽可能真实。使用生产数据,必要时匿名。因为大数据的性能取决于数据中的统计分布,所以您不希望使用合成数据。例如,如果你使用了一百万次基本上具有相同用户信息的虚假用户数据,你会得到非常不同的可伸缩性结果,而不是具有广泛值分布的真实混乱用户数据。
要获得更具体的建议,我需要了解您正在使用的技术。在Hadoop中,看看MRUnit。对于关系数据库,DBUnit。Apache Bigtop可以提供灵感,尽管它针对的是Hadoop上的核心项目,而不是特定的应用程序级别项目。
我遇到了两种情况:
-
大型HDFS数据集,用作其他应用程序的数据仓库或数据汇
-
具有HBASE或其他分布式数据库的应用程序
两种情况下的单元测试提示:-
a。首先测试应用程序的不同功能组件,大数据应用程序没有特殊规则;就像任何其他应用程序一样,单元测试应该确定应用程序上的不同组件是否按预期工作;然后,如果适用的话,你可以集成功能/服务/组件等来进行SIT
b。特别是如果有HBASE或任何其他分布式数据库,请测试数据库的要求。例如,分布式数据库通常不像传统数据库那样支持ACID属性,而是受到CAP定理(一致性、可用性、分区容差)的限制;通常保证3个中的2个。对于大多数RDBMS,它是CA,通常对于HBASE,它是CP和Cassandra AP。作为一名设计师或测试规划师,你应该知道,根据你的应用程序功能,这是分布式数据库的CAP约束,并相应地创建测试计划来检查真实情况
-
关于性能——同样,这在很大程度上取决于基础设施和应用程序设计。此外,有时某些s/w实现比其他实现更费力。您可以检查分区的数量,例如,它的所有基于案例的
-
关于可扩展性,大数据实现的优势在于,与传统架构相比,它易于扩展。我从来没有想过这是可测试的。对于大多数大数据应用程序,你可以很容易地进行扩展,特别是横向扩展非常容易,所以不确定是否有人考虑测试大多数应用程序的可扩展性。
为了测试和测量性能,可以使用静态数据源和输入(可以是巨大的转储文件或sqlite DB)。
您可以创建测试并将其包含在您的集成构建中,这样它特定的函数调用需要超过X秒,抛出错误。
当你构建更多的系统时,你会看到这个数字在增加,并破坏你的测试。
你可以花20%的时间来获得80%的功能,剩下的80%用于性能和可扩展性:)
可扩展性-考虑面向服务的架构,这样您就可以在两者之间设置负载均衡器,并且只需向系统中添加新的硬件/服务即可提高状态/处理能力。