目前,我正在编写一个JMeter插件,以测试只在我们的web应用程序负载过重时才会出现的错误修复。
作为允许编写负载/压力测试以测试web应用程序特定部分的通用解决方案,我想添加一个简单的restful服务来调用测试。这样做的主要原因是绕过浏览器,因为我们对这方面的测试感兴趣的是业务逻辑和数据库访问层(遗留内联SQL)。
这是否值得花费时间和精力,还是可以使用JMeter来测试一个复杂的web应用程序,该应用程序需要身份验证并大量使用Javascript和Ajax。
编辑
这些测试的目的是测试业务逻辑和数据访问层如何处理重负载情况,以确保不存在bug或并发问题。这是一个遗留的jsp web应用程序(即在90年代中期编写的),其中大部分是内联sql,正在移动到DAL层。
发布于 2011-08-05 01:13:46
只为负载测试公开一个特殊的API会带来几个好处:
现在剩下的就是估计创建这样一个API需要花费多少工作,以及这些好处是否值得。
发布于 2011-08-05 00:47:10
直接进入业务逻辑的问题在于,您永远无法确定在表示层中没有出现问题,这会给服务器带来额外的负载。单独测试业务逻辑可能意味着缺少可能的性能问题(例如,如果很多HTTP会话中有很多对象,服务器可能会花费大部分时间在垃圾收集器上,因为堆太低),因此我建议创建一个包含对服务器的所有调用的复杂测试计划。
实现这一目标的最简单方法是使用JMeter的HTTP代理,启动浏览器,并让HTTP代理为您记录测试计划。
关于如何开始使用代理,请参见基本JMeter代理。
这将记录从浏览器到服务器的所有调用(您对javascript本身不感兴趣,因为这发生在浏览器上,因此不会影响服务器负载,尽管AJAX调用会影响)。
HTTP代理创建的测试计划将对所有值进行硬编码,因此您可能需要通过它来确定每个调用中哪些值是不同的(例如,如果您有一个create选项返回一个新ID,则后续请求需要使用服务器返回的ID。
要获得这些值,可以将正则表达式提取器添加到请求中,并分配一个变量名,然后在后续请求中将其作为请求参数重用。遍历请求参数并确定哪些需要被需要从前几页解析的值替换可能有点繁琐,但并不难。
例如,如果页面在返回HTML中包含一个recordId
<input type="hidden" name="recordId" value="abcqwer123" />它需要在下一个请求中使用,您可以使用以下regex来提取它:
name="recordId"\s+value="([a-z0-9]+)"要记住的另一件事是确保您正在使用范围广泛的测试数据(例如,如果您模拟了多个用户登录,您将希望确保不是每个测试都使用相同的userId运行,因为缓存可能意味着只在第一次运行时执行大量的操作,例如DB查找。为了简化多个帐户的使用,您可以使用CSV数据集Config将一个值列表加载到变量中,然后在每次迭代中进行更改。
我的最后一个建议是研究如何在JMeter中运行分布式模式。这是在多个远程客户端上启动J抄服务器的地方,然后这些客户端都会执行相同的测试。这确保了测试客户端本身没有足够的CPU核心或网络带宽来创建瓶颈,从而创建了大量的同时请求。
发布于 2011-08-05 01:25:05
与编写REST服务并通过JMeter调用REST服务不同,如果您有JUnit测试,您可以使用JUnit取样器并重用数据访问和业务层的现有测试。
https://stackoverflow.com/questions/6950052
复制相似问题