【问题标题】:Exclude test initialization time in a test run duration in C#在 C# 中的测试运行持续时间中排除测试初始化​​时间
【发布时间】:2016-04-06 22:10:18
【问题描述】:

我有几个延迟测试(基本上是单元测试)来测试特定的服务器 API,我必须准确地知道从请求到响应需要多少时间。我遇到的问题是,在调用测试之前,我必须进行一些数据初始化(对于每次测试运行,所以如果我进行运行 100 次的延迟测试,数据也必须初始化 100 次)这需要一些时间,但是我不想数它。

初始化数据有两种方式:[MethodInitialization]和[ClassInitialization]。

MethodInitialization - 在每次运行之前初始化数据,但当测试完成时,其持续时间 = 测试初始化​​时间 + 测试运行

ClassInitialization - 只初始化一次数据(这对我不起作用),但测试持续时间 = 测试运行

我知道秒表,但是使用起来会很痛苦,因为我也从 AppInsights 中获取数据,并希望尽可能地将其自动化,如果我在简单运行后可以得到清晰的结果,那就只是很棒。

有没有办法在每次测试运行之前初始化测试数据但不包括其持续时间?

UPD 1: 我还尝试创建自定义属性,因为可以在其构造函数中执行一些操作,但即使我运行测试 10 次,属性构造函数也只会调用一次。

【问题讨论】:

  • 如果您的测试目的是断言您的 API 保持在某个延迟阈值内,我可以想到比秒表更好的机制来测量延迟,之后您可以做出您需要的断言.我在stackoverflow.com/questions/28334337/… 遇到的解决方案取决于在 MSTest/VSTest 中运行的测试。这是您用来运行测试的工具吗?

标签: c# performance visual-studio unit-testing


【解决方案1】:

我猜你需要一个专业的工具,比如 ANTS Performance Profiler。它会捕捉你日常工作(类或方法)的每一步——你可以设置“里程碑”并丢弃其他的。

但是,我正在考虑您上面提到的有关 METHOD 时间的内容...我认为这是正确的方法,因为您不能在日常工作中放弃该步骤。

如果我是您的客户,并且您的例程在加载数据期间消耗大量时间但运行速度非常快,那么我将知道我对性能的判断所需的全部时间。我不会将您的例程分为两个模块:准备和执行。

我希望我对你有所帮助。 祝你好运。

【讨论】:

  • 感谢您的回复,大卫。我不能使用 ANTS Performance Profiler,因为它用于 ASP.Net 解决方案(据我所知),但我所拥有的只是一个带有一堆 REST API 的服务器。这也是不能选择计算数据初始化时间的情况,因为它使用来自同一服务器的其他 API,这些 API 必须单独测试
  • 嗯....所以,我想您唯一的独特选择是使用 Stopwatch 并将结果捕获到一个列表中,以便在所有运行过程之后通过 RESPONSE 发送它以查看结果...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 1970-01-01
  • 2018-08-29
  • 2021-05-21
  • 2021-02-08
相关资源
最近更新 更多