了解最新技术文章
今天我将举几个例子,这些案例规模不足以保证需要全职性能测试人员,而“传统”“功能”测试人员和测试小组却站出来做这项工作。我将向您展示我做了什么,教您如何做,并在此过程中解释性能测试和性能工程之间的区别。
让我们开始吧。
早年在 Socialtext 工作时,我们发布了一个使用全新 Python 后端开发的新模块。测试人员对系统了解不多;我们当然不知道它会如何表现。我们向首席执行官(同时也是我们的代理工程副总裁)提出了这个问题,以及从头开始进行负载测试需要多长时间。我们的首席执行官想要投入生产,所以他告诉我们跳过它。
一周后,我参加团队回顾会,问题出现了。“为什么 QA 没有发现性能问题?” 该公司首席执行官回答说:“马特让我注意到了潜在的问题。他提出了一些选择。我决定冒一个经过计算的风险并跳过性能测试。下一步是什么?”
这让热度平息了一两周,但问题很快就开始了:QA 将如何进行性能测试?
简短的回答是,我们不需要。我们不需要测试软件来找出速度慢的地方。我们知道这很慢。我们甚至有关于每个唯一 URL“页面”加载所需时间的数据(指标)。这些指标是可排序的,包括平均值、中位数、四分位数、最慢 10% 平均值、最慢 1% 平均值等数据。这不是一个性能测试问题,而是一个性能修复问题。
这种说法,严格来说,是正确的。测试设计场景,运行测试,并提供在生产负载下保存页面需要六秒的数据。擦掉双手,开始下一项工作。
性能工程实际上试图找出系统中的弱点以及如何加强它们。实现此目的的经典方法是监视和分析,我将在接下来介绍。
适用于 QA 和开发团队的现代测试用例管理软件
还有一次是为一家保险公司工作。正如您所猜测的,这是大量的数据库工作,向系统添加新客户,处理覆盖范围的添加和删除,输入和处理索赔。ERP系统做了很多这样的工作;程序员自动输入、输出数据,然后“晃动所有东西”。(即网站、数据仓库和定制。)
作为“测试人员”,我被拉去帮助进行数据提取,该数据提取需要四个小时才能运行,而且速度越来越慢。如果它继续增长,它将必须运行过夜,然后它将进入批处理窗口,并且数据库连接将开始超时。我们大概有一个月的时间来修复它,没有出现任何问题,两个月的时间,没有出现严重的问题。这是一个简单的性能测试:它花费的时间太长。完毕。工程需要更多的工作。
分析将整个交易分解为尽可能小的部分。对于网站来说,这可能是渲染时间、服务器之间的延迟以及服务器上的时间。了解服务器上的时间后,您可以分析应用程序以查看每行代码花费了多少时间。这是我使用 Firefox、(T)ools->(D)eveloper->(N)etwork 并加载我的网站 xndev.com 获得的简单瀑布图。页面在 2 秒内加载并呈现,没有出现错误 - 但我确实想查看外部 HTML。
对于数据库困境,我使用Devel:Profiler 对用 Perl 编写的代码进行了分析。大多数流行的工具都有这样的程序。当程序完成时,它会输出结果,告诉我哪些方法花费了多少时间,以及调用它们的频率。该程序在运行 select 语句的行上花费了惊人的时间。这句话的速度并不慢,只用了几秒钟——但这句话却被调用了数万次。
程序员这样写了程序:
选择每个符合条件的 customer_id 对于每个 customer_id 选择 id=customer_id 的所有客户数据 导出客户数据 下一个
我这样重写:
选择符合一个查询结果的所有客户数据 对于每个 customer_id 导出客户数据 下一个
突然之间,这些时间消失了,应用程序在 45 分钟内运行完毕。保持数据库记录打开的时间很长,因此我添加了另一个步骤,将数据拉入内存数据结构,关闭数据库连接,然后运行 for循环。这将时间缩短到十五分钟。
这使得应用程序不仅具有高性能,而且可测试。我们可以将其分为两部分:数据收集器部分和导出器部分。
这种工程方法的有趣之处在于它没有预算。没有“性能工程师”角色。您不必购买新工具、聘请顾问或进行“方法论”转换。通常,工作可以在任意时间完成,而不会影响任何项目进度。
相反,人们需要关注问题并协作解决问题。
上面的例子是一个简单的系统;代码本身就是问题。我不必尝试进行后台监控来确定瓶颈是否是 CPU、磁盘、内存或网络,然后找出解决方法。通常,当我在这些“边缘”情况下发现性能问题时,问题本身确实就是这么简单。有人只需要潜入并获取数据。从性能测试转向性能工程是模糊角色之间界限、增加价值并防止“质量保证是沉重的”陈词滥调的好方法。
上一篇:性能测试也值得持续测试