我必须对一堆相互依赖的服务进行性能/负载测试。他们都使用 net.tcp 并且大多数使用双工合同和内部排队。[使用 lock(syncRoot) { if(queue.Empty) Thread.Wait(); 处理 POCO 队列类 }]
这是我想出的方法:
- 确定要进行性能测试的 WCF 服务
- 确定每个服务的相关性能计数器
- 确定将通过正在测试的服务执行的逻辑起点
- 使用 VS.Net 为每个服务自动生成单元测试
- 编写特定的功能测试(例如,我可以使用一个用例 - “下订单” - 并编写对相关服务进行所有调用并通常执行几乎所有所需功能的测试)
- 使用运行 #5 中的跟踪文件生成单元测试 [使用 CodePlex 的 WCF 负载测试](在我看来,这似乎是在调试环境中重新创建生产/字段中的用户错误的理想工具。免责声明:未使用该工具。印象从阅读项目描述)
- 可以调整上面的测试以使用自动生成的输入数据进行调用
- 为输入引入变化,以便执行不同的代码路径
- 来自性能计数器的日志数据
- 分析和识别瓶颈
问题:
- 有更好的方法吗?
- 对于使用内部队列的服务,使用标准性能计数器测量性能是一个问题。我可能需要自定义计数器?
- 如果 #1 为真,有没有办法在不更改被测试服务代码的情况下引入客户计数器?
- 我应该关心我的功能测试的结果吗?
- 有没有办法 [非侵入式] 为 WCF 服务实施 SLA?(我认为,如果我的计数器有足够的数据,例如服务的请求、发生的异常、响应时间等,我应该能够验证我的 SLA - 在 5 分钟内处理 200,000 个请求,每个请求的响应时间为 2 秒 -反对这些数字。我的问题也许是我是否可以仅指定我的 SLA,并且产品/工具可以在幕后完成所有工作并为我提供表格答案?我知道...我知道...我做白日梦:))
- 旁白:在 WCF 服务内部对请求进行排队的最佳方法是什么?