30分钟学会基准测试(上)

在软件开发中我们经常谈到测试,但是在郑州的很多网络公司实际上是并没有真正意义的测试岗位的。波波从事开发十多年,也唯独在上上一家公司有真正意义的软件测试。本篇笔记主要从理论结合实践出发,以及结合某专业测试的朋友整理而来,其目的是方便学习测试的朋友能够快速的入门。

30分钟学会基准测试

一、为什么要做测试:

要学习做测试首先要明白为什么要做测试,也就是我们测试的目的是什么。无论我们做什么,都不可能漫无目的的进行。测试的目的从系统宏观层面大体分为以下几种:

1、测量系统在给定的工作负载下会发生什么。

2、观察系统在不同压力下的行为,评估系统容量。

3、观察系统如何处理不同数据。

4、验证基于系统的一些假设,确认这些假设是否会符合实际情况。

5、重现系统中的某些异常行为,以解决这些异常。

6、测试系统当前的运行情况。如果不清楚当前系统的性能,就无法确认某些优化的效果如何。

7、模拟比当前系统更高的负载,以找出系统对着压力增加而可能遇到的扩展性瓶颈。

8、规划未来的业务增长。评估在项目未来的负载下,需要什么样的硬件,需要多大容量的网络,帮助降低系统升级和重大变更的风险。

二、基准测试的策略与指标:

1、基准测试的策略:

基准测试有两种主要的策略:一是针对整个系统的整体测试,另外是单独测试。这两种策略被称为集成式(full-stack)和单组件试(single-component)基准测试。

针对整个系统做集成式测试,原因主要有以下几点:

  • 测试整个应用系统,包括Web服务器、应用代码、网络和数据库是非常有用的,因为用户关注的并不仅仅是某个应用本身的性能,而是应用整体的性能。
  • 数据库并非总是应用的瓶颈,通过整体测试可以揭示这一点。
  • 只有对应用做整体测试,才能发现各个部分之间的缓存带来的影响。
  • 整体应用的集成式测试更能揭示应用的真实表现,而单独组件的测试很难做到这一点

有时候不需要了解整个系统的情况,而只需要关注单独应用的性能,至少项目初期可以这样做。

2、测试的指标:

开始基准测试甚至是设计基准测试之前,需要先明确测试的目标。测试决定选择什么样的测试工具和技术,以获取精确而有意义的测试结果。可以将测试目标细化为一些列问题,比如“增加缓存是否能够带来性能提升?”测试的指标大体分为以下几个:

  • 吞吐量
  • 响应时间和延迟
  • 并发性
  • 可扩展性

三、基准测试的常见方法:

规划基准测试的第一步是提出问题并明确目标。然后决定是采用标准的基准测试,还是设计专用的测试。

建立测试和结果文档化的规范,每轮测试都必须进行详细记录。文档规范可以很简单,可以采用电子表格或记事本,也可以是复杂的自定义数据库。需要记住的是,经常需要写一些脚本来分析结果,因此如果能够不用打开电子表格或者文本等额外操作是最好的。

执行基准测试时,需要尽可能的多手机测试系统的信息。最好为基准测试建立一个目录,并且没执行议论测试,都创建单独的子目录,将测试结、配置文件、测量指标、脚本和其他相关说明保存在其中。及时有些结果目前不需要,也应该保存下来。多余一些数据总比缺乏重要的数据摇号,二多余的数据以后或许用得着。需要记录数据包括系统状态和性能指标,诸如CPU使用率、磁盘I/O、网络流量、应用状态。

四、基准测试容易犯的错误:

  • 使用真实数据的自己而不是全集。例如应用需要处理几百GB的数据,但测试只使用1GB数据;或者只使用当前数据进行测试,却希望模拟未来业务大幅增长后的情况。
  • 使用错误的数据分布。例如使用均匀分布的数据测试,而系统的真实数据有很多热点区域(随机生成的测试数据通常无法模拟真实的数据分布)。
  • 使用不真实的分布参数,假定所有用户的个人信息都会平均的读取。
  • 在多用户的场景中,只做单用户的测试。
  • 在单服务器上测试分布式应用。
  • 与真实用户行为不匹配。例如Web页面中的”思考时间“。真实用户在请求道一个页面后,会阅读一段时间,而不是不停顿的一个接一个点击相关链接。
  • 反复执行同一个查询。真实的查询时不尽相同的,这可能导致缓存命中率降低。而繁芜执行同一个查询,在某种程度上,会全部或者部分缓存结果。
  • 没有检查错误。如果测试的结果无法得到合理的解释,比如一个本应该是很慢的查询突然变快了,就应该检查是否是有错误产生。基准测试后,一定要检查一下错误日志,这是基本要求。
  • 忽略了系统预热(warm up)的过程。例如系统重启后马上进行测试。有时候需要了解系统重启后需要多长时间才能达到正常的系统容量,需要特别留意预热的时间。反过来说,如果想分析正常的性能,需要注意,基准测试在重启后马上启动,则缓存是冷的,没有数据,这时候即使测试的压力相同,得到的结果和缓存已经装满数据时是不同的。
  • 使用默认的服务器配置。
  • 测试时间太短。基准测试需要持续一定时间

如果其他条件相同,就应该努力使测试尽可能的真实应用的情况。当然,有时候和实际情况晒为有些出入问题也不打。例如,实际应用服务器和数据库服务器分别部署在不同的机器。如果采用和实际部署完全相同的配置当然更真实,但也会引入更多变化,比如网路负载和速度。在单一节点上运行测试相对容易,在某些情况下结果也可以介绍,那么就在单一节点上进行测试。当然,这样的选择需要根据实际情况来分析是否合适。

五、常用的测试工具:

工欲善其事,必先利其器。做测试要么有自己的一整套工具,但能拥有自己独立测试工具的估计只有大公司才具备这个能力,很多小公司也只能使用别人开发出来的工具,这里波波推荐几款大家常用的测试工具。

  1. ab
  2. http_load
  3. JMeter
  4. siege
  5. TPCC-MySQL
  6. sysbench

六、小结

基准测试并不是仅仅用来解决业务问题的一种时间,也是一种很好的学习方法。学习如何将问题分解成可以通过基准测试来获得答案的方法,就和数学课上从文字题目中推到出方程式一样。首先正确的描述问题,然后选择合适的基准测试来回答问题。设置基准测试的持续时间和参数,运行测试,收集数据,分析结果数据。

如果经常执行基准测试,那么指定一个原则很有必要。选择合适的测试工具深入的学习。可以建立一个脚本库,用于配置基准测试,收集输出结果、系统性能和状态,以及分析结果。

 

 

你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!