刻板印象的情景和结果
这是我遇到的一些定型观念:
- 一个功能版本包含一个新功能,该功能未经(甚至无法进行)充分的测试,从一开始就存在主要的性能问题。
- 对现有代码的更改(可能是细化或改进现有功能),或者客户未要求的更改,会带来灾难性的性能问题。
- 睡眠者:仅在一段时间后才发生的系统更改(例如,用完4字节整数串行列中的值,这意味着插入该表中需要数据库引擎扫描未使用的键)。
- 使用变更:它被设计为以一种方式使用,然后客户开始以另一种未曾预料的方式来使用它。
- 年龄:数据库变大,查询开始变慢,我听说这被称为“退化”,有点毛骨悚然。
解决这些陈规定型观念的一个共同方法是艰巨的努力:深夜和周末,人们在电话里问:“我的网站何时修复? 谁对此负责? 我听说过这种所谓的“英雄文化”。 这种心态可能会错误地奖励那些可能会希望预防该问题的人,因为他们是最有能力解决该问题的人。
解决之后,一段自我反省。 人们在问可以做什么来表现出解决问题的意愿。 也许是由专家进行的一次性性能调整练习,它可以解决当前问题。 但是,如果分析是由不属于团队的借调专家完成的,则该练习的经验教训不会被传播,并且是不可重复的。 这些谁不从过去中学习,是注定要重复它* 。
这可能是既成事实:如果性能测试的成本比解决定期生产问题的成本高,那么这是最合乎逻辑,最具成本效益的方法,许多系统可能由于成本或时间不足而没有以适合自动化测试的方式开发。 毕竟,当首次编写系统时,您可能不知道它是否会在商业上取得成功,因此,如果可能永远不需要维护系统,为什么还要花钱使系统可维护?
无法测试变更的性能可能意味着无法改善系统; 引入错误的成本无法降低。 人们开始担心变化,产品停滞不前。 一个年轻,更快,竞争者将从您的成功中学习。 他们Swift编写了更现代,更便宜的软件版本,并开始开展业务。
自动化性能测试
您如何实施呢? 您如何处理一个甚至可能不利于测试的系统,并对其进行更改,以使发行版变得更无缺陷且更健壮?
基础
在考虑进行性能测试之前,应确保代码库是可靠的。 这大部分是常识。
- 逐步更改和测试。
- 首先是错误,其次是功能; 新功能只会引入新的错误,因此请确保先修复所有错误。
- 使用成熟的已开发构建系统。
- 能够在您的代码上编写和执行单元测试。
一旦这些已经到位,可以考虑使用代码质量工具,如或 的Cobertura ,拿到指标和强制执行他们,没有建立对不符合某些最低标准。
整合测试
集成测试是迈向全面性能测试的第一步。 有很多框架,具体取决于用户或客户端的界面方式。 如果它是一个Web应用程序,那么您可以使用Selenium ,一个Web服务,一个ReST或SOAP客户端。 通常,流行的框架是一个更好的选择,因为它会鼓励您的其他团队采用。 问问自己–我是想学习一些有据可查,有趣且个人有价值的东西,还是与别人的手工虚荣项目搏斗? 无论如何,要运行集成测试,您将需要能够:
- 构建您的应用。
- 部署到测试环境。
- 执行测试。
- 报告结果。
理想情况下,您只需按一下按钮就可以执行此操作,否则您将是唯一执行此操作的人,并且您将失去很多工作价值。
当您这样做时,您会发现:
- 您可以更好地了解应用程序的体系结构。
- 您知道如何为其创建合适的环境。
- 您了解部署过程。
- 您可以自动部署它。
这些是自动化性能测试的关键。
性能测试
单元测试和某种程度上的集成测试具有二进制结果:它们通过并且每个人都很高兴,它们失败了,并且存在一个错误需要修复。 同样,这些工具也得到了很好的支持,每个人都知道如何使用它们。 性能测试是一门艺术。 最终,性能测试会产生一些度量:一系列数字,但是这些数字是好是坏? 你想猜吗? 单独使用一个度量标准可能并没有启发性,但是您可以查看其相对于先前度量标准的相对变化。 您需要(按顺序):
- 公开指标(请注意,您可能想引入新的指标,而不赞成使用旧的指标)。
- 采样指标。
- 从相同的基准运行相同的测试(例如,通过从新配置的服务器启动,向其加载数据并对其进行预热)。
- 在工具中报告结果。
再次按下一个按钮。
如果将应用程序部署到一台主机,那么您将在哪里运行测试? 他们可能对办公网络有何需求? 您需要多个主机和自己的局域网吗?
您需要首先公开自己的指标,并且有一些针对Java的商业和开源工具,例如JInspired或Metrics ,或者实际上您可以自己开发。 您可能想要的一项功能是通过JMX公开指标,从而可以进行抽样。 OpenNMS是一个网络管理应用程序,可以远程定期对JMX Bean进行采样,并且获取这些度量的图形相对简单。 当然,还有其他选择。
现在,如果您在每次提交时自动部署然后进行性能测试,则可以在敏捷墙上显示详细信息,以便团队可以看到性能何时发生变化以及出现任何热点。 最重要的是,一旦安装到位,您就无需做太多事情就能保持最新状态。
参考: 意见:来自JCG合作伙伴 Alex Collins的性能测试 ,位于Alex Collins的博客博客中。
翻译自: https://www.javacodegeeks.com/2012/10/opinion-performance-testing.html