zoukankan      html  css  js  c++  java
  • 性能测试环境与数据

    测试环境

    测试环境的要求

      测试环境是性能因素的重要组成部分,它是测试执行中使用的软硬件资源的总和。它一般包含了被测试系统环境、压力发起环境、传输路径、外联系统环境四种类型的环境。在测试环境的搭建中,要考虑三方面的问题,测试环境的有效性、独立性、稳定性。

    1.测试环境的有效性

    被测系统环境与真实应用是否一致?

      同样的系统,环境不一样,取得的性能测试结果也就完全不一样,因此从期望取得更准确的性能测试数据这一点来看,被测系统环境应该与真实应用完全一致。但实践中,很多用户的困难在于难以投入巨大的成本去构建一套与生产完全一致的测试环境。对于这种情况,一般有三种解决方法:

    1)临时性或只在特定时间段使用生产环境进行测试。此方法的风险在于可能会对生产数据造成破坏,因此需要在测试前进行数据全量备份。

    2)租用与生产配臵一致的设备来搭建临时测试环境。

    3)通过扩展性测试的方法来绘制系统的性能响应曲线,从而推断在生产环境中的性能指标。

    压力发起环境是否成为性能瓶颈?

      由于性能测试往往要模拟大量的并发用户,因此压力发起环境的设备性能是否足以承受所需的压力也非常重要。例如用户希望模拟1万名真实使用者来访问被测系统,却只有一台压力测试机,结果一定是压力全部堆积在压力发起端,甚至根本无法调起1万名用户来。在测试前,应该先验证压力发起设备可以产生的压力,然后根据需要调配相应的设备来组建压力发起环境。可以通过在压力机上不断增加并发用户试运行的方式来验证,但至少应确保在压力机上的用户增加到最大时,系统的CPU低于60%,内存使用低于60%,网络带宽占用低于20%。

    外联系统是否成为性能瓶颈?

      有些交易除了被测系统自身外,还需要外联系统的支持。例如银行系统的证券买卖功能就需要证券公司的系统的配合,对这样的交易进行性能测试时,如果外联系统存在性能瓶颈,就会严重影响性能测试的准确性。对于外联系统,在性能测试中最好是通过模拟器来模拟,而不要直接访问外部系统,以保证外联系统不会成为系统的瓶颈,当然对于双方的联合性能测试则除外。

    传输路径是否成为性能瓶颈?

      在测试环境中,传输路径也很重要,如果它存在性能瓶颈,则系统的压力就无法顺利到达被测服务器端。因此,在测试环境搭建时,需要对传输路径做性能分析,防止它成为测试中的瓶颈所在。实践中,为了保证这一点,常常会将传输路径简化,例如将互联网传输路径变为内网传输路径。但如果测试的目标中包含了传输路径,则应与真实应用一致。

    2.测试环境的独立性

      为了确保在性能执行过程中不受到干扰,被测试环境一般要求由性能测试完全独立占用。在一些用户那里,难以保证长时间的独立占用,则可以采用场景执行期间独立占用,其它时间释放的方式。

    3.测试环境的稳定性

      为保证测试数据的一致性,被测试环境、压力发起环境在测试执行过程中应防止出现以下方面的变更。

    1)软件变化。在测试执行全过程中,被测系统的应用版本应保持一致。此外,除非测试需要,一般也不要对被测试系统中的操作系统、参数配臵、数据库、中间件的版本进行改变。

    2)硬件配臵变化。在测试执行全过程中,被测系统的硬件配臵应保持一致,除非测试本身需要改变硬件的配臵。

    3)传输路径变化。在测试执行全过程中,传输路径应保持一致,除非测试本身需要改变传输路径。


     数据模型

      数据是性能测试的关键点之一,相比于功能测试只关注数据是否有正确地支持功能的实现,性能测试还需要关注数据的规模大小、分布规律等,甚至有时同样的数据的只要排列顺序变动一下,都可以导致性能测试的结果大相径庭。因此,对于性能测试的数据我们引入了数据模型这个概念来描述。

      性能测试的数据模型包括了两种数据:基础数据和使用数据。

    基础数据

      所谓的基础测试数据,就是在性能测试中,预先存放到系统中的背景数据,也可以称为基础数据。

      基础数据的特点是它不影响性能测试中关键业务运行,也就是说即使从系统中删除了基础数据,相应的关键业务同样能正确运行。既然如此,为什么还需要它呢。举一个简单的例子,同样从数据库中检索一条记录,数据库中仅有此一条记录和有十亿条记录,其查询所花费的时间差别可能是数量级的,十亿条完全相同的记录和十亿条完全不同的记录,其查询所花费的时间差别可能也是数量级的。为了更准确地获得系统的真实性能,我们需要仿造出与真实应用等量或同级别规模的数据。基础数据的要求:

    1)数据的一致性

      数据的规模与真实应用中一致。这一点在测试实践中要灵活运用,因为在实际应用中,系统的数据规模是一个变量,系统上线的第一天与第十天与第一百天,其数据规模可能大了几个数量级。

    2)时间原则

      应保证数据量应不低于系统预计生命周期开始一定时期的数据量,推荐值为20%,如系统设计使用5年,则测试数据量应达到使用1年时的数据量规模。

    3)量级原则

      应保证测试的基础数据量不低于系统预计生命周期顶点数据量的一定比例,推荐10%,如系统设计使用5年,到第5年时数据规模预计为10亿,则测试数据量不应低于1亿,也就是说数据量与顶点数据量在同一个量级内。

    4)数据的有效性

      数据的分布规律应尽可能与真实应用中一致。如果有生产存量数据,最好直接使用生产存量数据,考虑到安全方面的因素,可以先对生产数据进行脱密处理。

    使用数据

      所谓的测试使用数据,就是在性能测试中,支持被测业务正常运行所需要直接使用的数据,也可以称为使用数据。使用数据的特点是一般都具有时效性,有的使用数据甚至只能在特定的时间段内使用一次就无法使用了。使用数据的要求:

    1)充分性

      使用数据的数据量推荐按正常完成测试数据量的三到五倍来准备,或者还可以通过数据恢复机制来重臵测试环境,使测试使用数据可以继续应用。这主要是为了防止在测试过程中出现脚本停止运行、环境崩溃等各种可能导致测试中断,由于使用数据都是提前配臵到性能测试脚本或预臵到数据库中,一旦出现异常中断,难以判断数据中哪些被使用过、哪些未被使用过,因此只能整体更换所有使用数据。

    2)有效性

      在选择使用数据时,应充分考虑数据库索引、缓存等因素可能带来的性能影响,既要注意不能因此导致压力过小,同时也要防止压力过大。如查询条件重复时,除第一次真正使用了数据库外,后续的请求都可以直接从缓存中获取,系统的压力极小。

  • 相关阅读:
    dlib库+vs2017详细配置流程
    【网易云课堂】【中科院团队】深度学习:算法到实战——神经网络基础
    【网易云课堂】【中科院团队】深度学习:算法到实战——绪论
    matlab 读取多行txt文本
    LeetCode 228. Summary Ranges【未加入列表】
    LeetCode 438. Find All Anagrams in a String
    c++冷知识
    python项目实战——西游记用字统计
    LeetCode 101. Symmetric Tree
    LeetCode 63. Unique Paths II
  • 原文地址:https://www.cnblogs.com/yezhaohui/p/3236126.html
Copyright © 2011-2022 走看看