2010-07-26 145 views
1

我们在经典的ASP环境中实现了一个新的解决方案,它使用COM interop来安装.NET组件来完成一些工作。该解决方案运行良好,我们的团队负责人希望确保它在负载下运行良好,因为这是我们第一次在我们的网站上使用.NET组件。如何正确加载测试Web服务器上的新组件?

我需要考虑做一个适当的测试,以确保我引入的新代码不会在负载下中断?


我已经在做什么:

我做了一个简单的ASP网页调用基于查询字符串信息的新组件。查询字符串也有一个“off switch”参数,所以我可以在没有组件的情况下测试页面作为默认值。除了返回表示组件是否成功,失败或被跳过的值之外,页面本身是裸露的。

我写了一个简单的控制台应用程序,它使用HttpWebRequest在每次调用时使用来自数据库的唯一数据对ASP页进行迭代调用。它所做的一切,并检查页面返回的值并保存数据。

然后,我将控制台应用程序部署到我们内部网络上的四台不同PC上。在一次测试中,我在每台计算机上设置了一个应用程序实例,而在另一个实例中,我在每台计算机上设置了五个应用程序实例,并将它们配置为同时开始同时启动开发服务器。每个应用程序实例向Web服务器发出150次迭代请求。

对于每个场景(每台机器上一个实例&在每台机器上有五个实例),我运行了两次测试,一次没有调用组件,一次调用组件。在这两种情况下,被调用的组件的性能比未调用该组件时花费的时间大约是完成请求的2.2倍。考虑到我们正在处理的大量处理以及数据库更新数据的次数,我们认为这并不是很昂贵。另外,因为在我们用4个并发连接访问服务器的情况下,以及当我们用20个并发连接访问服务器的情况下,2.2x比率看起来都很合适,所以似乎运行正常。

20个实例的测试肯定会给我们的开发服务器带来很多负载,无论是否运行新组件,但新组件在压力下看起来都不错。但是,我想确保我以正确的方式进行操作,并没有指出通过弱测试的正面过程来证明我的组件在高峰负载下不会使服务器满足其需求。

回答

1

Visual Studio有一个负载测试组件,但你所做的事实质上是一回事。 Visual Studio解决方案的好处在于,您可以看到性能可能出现的瓶颈。

关键看你通过或未测试不应该是“是完成比好了时间?”,而是“是好的,相比定负载的总响应时间?”。因此与新组件的比较是相关的。

您的测试似乎是足够严格的说“不负载下破”,但在现场的硬件和真正的网页任何其他处理的隔离测试,它不是一个保证。

你有没有衡量每秒请求的总数是多少?如果该值是高于你期望的峰值负载下的实际应用和响应时间是合理的,那么你就必须在测试的结果有一定的信心,成为一个真正的利好。

+0

感谢您的答复。我测量完成请求的平均时间,所以我想你可以说我每秒测量的请求数。我想我的观点是,在重负荷和轻负荷下,引入我的组件可以将响应时间增加相同的百分比。 – 2010-07-29 02:30:02

+0

另外,是不是测试组件只在VS 2010终极版,这是$ 10,000 SKU?我记得理查德在dotNetRocks Road Show上做了一个很酷的演示。 – 2010-07-29 02:31:00

+0

它也是在2008年的测试版。 具有相同的比率表明这是一个可预测的努力量​​,这是一个相当好的迹象,但最终的衡量标准将在绝对条件下“花费太长时间”,无论持续多久。如果你真的敲击了组件,它仍然以X秒作为响应(无论你认为响应时间需要多长时间),你可以给它一个“勾号”。 – Nat 2010-07-29 21:55:50

1

有像Push-to-Test和Gomez这样的公司,我们已经用它来证明大规模应用程序可以工作。两者都模拟大量的用户通过你的应用程序采取指定的路径。 (就戈麦斯而言,他们有实际用户的机器,他们向运行测试的业主支付便士)。他们可以模拟数千个并发用户并提供其他服务,例如正常运行时间监控。

两者都是付费服务,但Push-to-Test基于Selenium的软件,因此您可能能够构建(或查找)构建于其上的负载测试框架。