如何对Web应用程序进行负载测试

如何对Web应用程序进行负载测试,第1张

定义测试策略 到目前为止,您肯定参加过这样的会议,客户倚靠在宽大的会议桌上,问您:“这个系统能处理上千个用户吗?”传统的负载测试方法要求您编写脚本并执行测试,以试图给出此问题的精确答案。对于这种测试,您需要定义“处理”的含义以及 1000 名典型用户在站点活动时的情形。您需要定义测试用例以代表各种用户活动:例如,购买股票或注册新的帐户。接下来,您必须估计用户在这些测试用例上的分布。对以下数据进行假设,即模拟真实用户与应用程序交互时,需要多长的思考时间(或等待时间)。因此,负载测试期间活动的可从某个方面大致反映出同样数量的真实用户在站点活动时的情形。 这种方法有几个不足之处。首先,其结果不会比您做的假设更好。显然,不正确的假设将使结果出现偏差。 其次,估计真实用户需要大量客户端硬件。如果对每名虚拟用户给定需要的处理能力和内存量,则典型的客户端计算机可以处理大约 200 名虚拟用户。因此,对 2000 名用户并发处理级别的测试需要 10 台客户端计算机 — 这是一笔重大投资。测试使用 HTTPS 的站点将需要多得多的客户端硬件。 最终,此方法难以向您的开发团队提供以操作为导向的信息。当某处出现故障时,常常难以再现该问题。 作为备选方案,我们建议您围绕以下这些关键问题设计测试用例: �6�1 系统瓶颈在哪里?系统能同步处理多少个并发请求? �6�1 在响应时间变得不可接受之前,一台机器能处理多少名不同步的超级用户? �6�1 添加额外的硬件时,结果是线形增长的吗? �6�1 有任何稳定性问题会妨碍站点运行于生产环境中吗? 此方法将使用开发团队(此开发团队参与可能出现问题的领域)提供的附加信息。请关注这些领域。对于上一个示例,其瓶颈可能出在定单提交领域。从这里您可以派生出更具体的问题,例如“提交流程可以同时处理多少个请求?”攻击这些特定领域是最快且成本最小的方法,用来向开发团队提供以操作为导向的信息,以便他们能改进系统。在使用这种方法的同时,我们推荐您记住遵循以下建议。 关注负载测试正如我们已提到的那样,首先要做的是构建导致潜在瓶颈和稳定性问题的脚本。这种“数据第一,假设第二”的方法使您能够从应用程序收集原始数据,然后根据假设确定更高级别的结果。不用担心为识别低风险站点的脚本编写问题。例如,为站点的帮助领域或只读文档领域编写脚本不大可能出现系统瓶颈。 同步请求使用同步请求攻击瓶颈。此处的这个主意是模拟最坏的情况:即,站点上的用户精确地在同一时间攻击瓶颈。通过使用户同步,您可以重复进行此测试。如果不同步结果,则难以再现故障情况。可以使用同步点做到这一点,同步点是大多数较健壮(成本也较高)的测试工具中提供的一项功能。同步点迫使每名虚拟用户一直等到剩余的用户到达脚本中定义的点后,才能开始下一请求。它允许您精确并重复地确定站点的潜在瓶颈区域能处理的并发用户数。例如,下限可以是 7 名并发同步用户。 创建循环测试用例脚本使测试用例循环。在另一种方法中,每次测试用例迭代前后,站点应处于相同状态。这允许您长时间地重复运行测试用例。 使用超级用户最后,使用我们所称的超级用户。正如前面所提到的,超级用户运行时思考时间设置为零。请记住,思考时间假设是用于常规测试中,以使虚拟用户模拟真实用户。但是,如果将虚拟用户思考时间减半,则服务器的实际负载将加倍。在另一种方法中,服务器真正关心的与负载有关的变量是每秒的请求数。虚拟用户的数量及其思考时间结合起来生成该负载。 让我们进行一些数学运算以使此概念更清晰。下面的公式计算访问站点的真实用户生成的负载(请求数/秒): 例如,某个站点有 100 名并发用户,假设下载时间为 10 秒,思考时间为 30 秒,则每秒将生成 2.5 页。如果我们假设每页 3 个请求,则在 Web 服务器上将转化为每秒 7.5 个请求。 以超级用户运行测试时,观察每秒请求数,并与刚刚计算的值比较。根据我们的经验,真实用户数与超级用户数的比例通常约为 15:1。对于同一个示例,这意味着 (100/15) 名超级用户将生成与 100 名普通用户相同的负载。再举一个例子,假设在 10 名超级用户之后响应时间变得不可接受。请注意转换回真实用户数的该点每秒请求数。现在您可以进行任何希望的思考时间假设,甚至可以更改它而无需重新运行测试。在几天的测试之后,您将能根据直觉从超级用户数转换成真实用户数。此方法允许您保持用户数可控,减少所需的客户端硬件数量,并包含负载测试软件的成本。 这些超级用户测试用例对于多机测试很有用。要测试站点的可伸缩性,可添加第二台 Web 服务器和一个负载平衡器,并重复超级用户测试。理想情况下,在看见相同的相应次数之前,您将能加倍超级用户数量。 要回答稳定性问题,可运行测试,以在延长的时间段内维持合理数量的并发且未同步超级用户。我们在上一个项目中熬了很多个通宵,甚至 24 小时昼夜不停,但持续时间与应用程序有关。我们称之为“内置”测试。一旦您已采取步骤识别并潜在地解决了找到的瓶颈,则重复同步点测试,看下限是否有所增长。然后用所支持的新的并发用户数重新运行“内置”测试。以努力提高此数字为目标重复该循环,直到达到质量条。 但是有多少用户呢? 尽管此方法向开发团队提供了有价值的信息,但它使得您更难于回答会议室的问题。不过,您可以近似地估计答案。例如,假设站点的最坏情况瓶颈显示,每台计算机多于 20 名超级用户的情况下,响应时间超过 10 秒。根据您从我们建议的公式计算的结果,近似地估计有 300 名真实用户(20 名超级用户 × 15 名真实用户)。此时,您可以做出与常规用例中相同的假设。通常情况下,有百分之多少的用户正在使用站点的此领域?假设预期 50% 的用户正在使用此领域,而其他领域,例如文档或数据库读取,用户比例则没有这么大。这意味着具有一台 Web 服务器的系统将处理大约 600 名用户。 到目前为止,我们已讨论了在能明确地指向站点的一个瓶颈领域的情况下该如何做,但如果影响性能的领域不止一个时您又应如何做呢?答案是创建单独查看各个领域的测试脚本。首先孤立地运行这些脚本,然后一起运行。再比较结果,看站点的一个领域对另一个领域的影响有多大。

一般的网站,在进入业务功能前先需登录,然后才能访问业务功能。基本框架如下

详细步骤:

1 .用badboy录制登录,访问随意一个网址。

2.用jmeter打开,一会自己写的时候可以参考里面的参数名称或路径什么的。如果对http熟悉可以省略这两部直接写脚本

3.新建一个线程组

选择 测试 计划,按右键-》添加-》threads(users)线程组

线程组能设置以多少个线程并发做压力测试。在”循环次数”设置不选择永远,循环次数设置1。

4.设置登录http请求,选择线程组,右键――添加――》sampler-―》http 请求。

在“服务器名称或ip”设置localhost或网址,端口设置:80,“方法”设置post,路径设置网站登录的地址。登录需传入用户、密码。在“同请求一起发送参数”列表中添加参数。参数值根据web应用设置。如login_user=0001login_password=1actFlag=login。具体怎么设置可以拷贝刚才录制的内容。

5.登录成功后,网站一般将跳入主页面。在jmap中可做判断,判断是否登录后按预想进入主页面(此步骤也可不设)。选择4中的“http请求“,右键――》添加――》断言――》响应断言。“Apply to”设置Main smaple only;“要测试的响应字段”设置“url样本”;“模式匹配规则”设置“包括”,“要测试的模式”增加页面跳转到的主页面

6.一般网站登录后,在tomcat中生成了session,之后访问其他页面将无需再次登录,前提是浏览器需支持cookie。在jmap中也同样,如要继续访问其他页面,还需做下面关键的设置。

选择“线程组”――》右键――》添加――》配置元件――》Http cookie管理器。加了此步骤后,http请求将具备cookie功能,即登录成功后访问其他页面将不会跳转到登录页面重新登录。

7.对目标页面反复压力测试。

7.1 如何使被测页面反复访问达到测压效果。选“线程组”―》右键――》逻辑控制器――》循环控制器。循环次数中选择“永远”。

7.2 选择刚加的“循环控制器”,右键――》添加――》sampler-―》http 请求,按4步骤设置ip、端口,http请求方法为“get”,路径为被压力测试的url

按上面的设置后,已完成配置,可做压力测试。只需点菜单“运行”――》启动,即运行压力测试。

8.jmeter提供了许多压力结果查看工具。是压力测试时非常好的分析工具。下面几种查看工具可有选择的添加。

8.1 察看结果树。他记录每次请求发送数据、响应返回数据。选择“线程组”――》右键――》添加――》察看结果树。

8.2 用表格查看结果。可查看每次请求的响应时间等。选择“线程组”――》右键――》添加――》用表格查看结果。

8.3 Summary Report。可查看平均响应时间、最长响应时间等。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/461520.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-04
下一篇2023-06-04

发表评论

登录后才能评论

评论列表(0条)

    保存