2008-10-15 109 views
2

我必须对性能/负载测试一堆相互依赖的服务。他们都使用net.tcp,大多数使用双工合同和内部排队。 [使用锁定手动操作的POCO队列类(syncRoot){if(queue.Empty)Thread.Wait(); }]为WCF服务定义SLA

这里的方法,我想出来的:

  1. 确定WCF服务是性能测试
  2. 确定的初步认识性能计数器为每个服务
  3. 标识逻辑启动点是将采取通过服务正在测试
  4. 自动生成单元测试使用VS.Net每个服务
  5. 编写特定的功能测试(对于考试执行我可以拿一个用例 - “下订单” - 编写测试,使所有相关服务的调用,并通常几乎所有需要的功能excercise)
  6. 使用跟踪文件从运行#5生成单元测试[使用来自CodePlex的WCF负载测试](这在某种程度上似乎是在调试环境中重新生成用户错误的理想工具。免责声明:未使用该工具。从阅读项目DESC)展示
  7. 以上可以进行调整以自动产生的输入数据
  8. 介绍变化到输入端,以便不同的代码路径是从性能计数器瑞典克朗(SEK)
  9. 登录数据
  10. 分析使调用的测试并找出瓶颈

问题:

  1. 有没有更好的方法吗?
  2. 对于使用内部队列的服务,使用std性能计数器测量性能时出现问题。我可能需要定制计数器?
  3. 如果#1为真,是否有办法引入客户计数器而不更改被测试服务的代码?
  4. 我应该关心功能测试的结果吗?
  5. 有没有办法[非侵入式]实现WCF服务的SLA? (我认为如果我的计数器有足够的数据,例如请求服务,发生异常,响应时间等,我应该能够验证我的SLA - 在5分钟内为每个请求提供200,000个请求,响应时间为2秒 - 我的问题可能是我是否可以指定我的SLA,并且产品/工具可以完成场景背后的所有管道工作并为我提供一个列表答案?我知道......我知道......我是在做白日梦:))
  6. 另外:什么是在WCF服务内部排队请求的最佳方法?

回答

1

哇......标题绝对是冰山一角!希望我在这里根据我的反应没有任何偏见! :)的WCF服务

  1. 性能测试可以做许多不同的方法:使用测试工具,如微软团队测试,Borland的丝绸表演,Mercury LoadRunner的,或像LoadGen或自定义的测试工具。我的首选是尝试采用你在创建某种功能单元测试,然后将数据提供到该测试中的方法,同时使用测试工具启动该测试的多个并发实例(虚拟'用户') 。大多数商业测试工具的工具确实有助于这种类型的测试,因此很难在这里出错。维护测试用例和测试数据以支持测试应用程序通常会产生最大的挑战。

  2. WCF没有任何与性能相关的内置计数器。那实际上是一个盲点。当然,你可以看到服务器有多少连接,但这是粗略的信息,你可能想知道哪些服务正在服务这些请求。有传闻称,作为为WCF/WF提供丰富托管环境的一部分,微软的“都柏林”将包括演示托管服务的性能计数器。我们将不得不等待,看看实际发生了什么。

  3. 如果我需要在不影响现有代码库的情况下测试WCF服务,我会考虑可以从WCF行为中获得多少里程,以便将其应用于该服务。这种自定义行为可能会出现您想要的性能计数器。

  4. 是的。我会关心功能测试的结果(意思是性能?)。需要注意的是,可能会有一些可以忽略的启动(JIT)。我可能会考虑剖析功能测试的执行情况以获取执行指标 - 但在性能运行期间,我不打开代码性能分析。

  5. 对于SLA的再次定制行为可能是答案。您可以将运营指标记录到数据库中,然后报告。像Amberpoint和SOA Software这样的商业产品也将为此提供支持(包括性能计数器)。

  6. 将请求排队到wcf服务?我马上想到net.msmq绑定,特别是如果你想要使请求持久。