【问题标题】:.NET Automated Testing for Long Running Processes.NET 自动测试长时间运行的进程
【发布时间】:2011-11-03 23:39:37
【问题描述】:

我们希望对需要将数据发送到外部源然后验证数据已正确显示在其网站上的流程进行一些自动化集成测试。

但是,数据显示在网站上可能需要几个小时。

传统的 NUnit 或 MSTest 的问题是测试将等待数小时等待结果。

我见过PNUnit 可以用来并行运行所有测试,但它对我来说似乎不是一个优雅的解决方案。如果有 1000 个测试怎么办?这不会在服务器上创建大量进程/线程吗?以及如何跟踪所有这些。

那么有人解决了这个问题吗?您是否在家开发了解决方案,或者是否有针对此的开源解决方案?

【问题讨论】:

  • 感谢大家的回答。好主意。我希望得到实施过类似事情的人的回应。我认为解决这个问题的最佳方法是磨练一些 C# 并从第一原则创建一些东西。我不确定 NUnit/MSTest 等能否以优雅的方式做到这一点。
  • 我认为您的测试范围太广,并且包含许多可能出错的条件,这些条件不在您的代码中。因此,它不再是“单元”测试,而是“系统”测试,这就是为什么您发现很难将其放入单元测试模型中的原因。单元测试应该是小的独立的功能块(“单元”)。甚至经常作为构建过程的一部分运行。我认为您正在寻找更多的系统测试,并且应该搜索负载测试器或客户端模拟测试器等工具......其中许多工具都是为长时间运行的流程而构建的。

标签: .net asynchronous automated-tests parallel-processing long-running-processes


【解决方案1】:

这个问题可以通过分离测试数据插入和验证来轻松解决。只需将所有可用的测试数据加载到系统中,等待几个小时直到处理完成,然后执行验证测试。

【讨论】:

  • 好主意。我不认为任何测试框架都适合这个吗?例如 Nunit,您运行测试,它们通过或失败。您是否建议继续从其他进程运行测试,然后使用 NUnit 验证最后一天收集的数据库中的数据?
  • “所有”框架都适合这种技术!您只需要加载一些您稍后查找的预定测试数据,或者将您的测试数据保存在“插入/上传”测试中到文件系统,然后稍后在“验证”测试中读取该文件以进行检查。诀窍在于时机,这就是为什么我认为这首先不是一个合适的单元测试,而是一个“系统测试”。
  • 单元测试框架通常具有“SetUp”功能,通常用于准备测试环境。您可以使用它将测试数据插入系统。 nunit.org/index.php?p=setupFixture&r=2.4
  • 感谢您的回答,但没有 NUnit MSTest 等不是为此而设计的。它们完全同步,合而为一,立即运行,通过或失败。也许有一个测试框架可以处理长时间运行的异步并提供适当的接口和工具集。我希望有人知道其中一个以及使用它的细节。
【解决方案2】:

似乎 PNUnit 将是一个很好的解决方案。如果您担心服务器上的“进程/线程太多”,只需限制 PNUnit 一次可以运行多少测试(例如,Max N);测试完成后,安排下一次测试。我并不是说 PNUnit 知道如何做到这一点。您可能必须实现此自定义。

【讨论】:

    【解决方案3】:

    NUnit-Discuss Google Group 目前正在讨论这个问题:http://groups.google.com/group/nunit-discuss/browse_thread/thread/645ecaefb4f978fa?hl=en

    我希望这会有所帮助:)

    【讨论】:

    • 谢谢,我认为他们也在努力寻找解决方案。也许目前这是一个太棘手的问题:-)
    【解决方案4】:

    Martin,在我提出我的解决方案之前,对于单元测试,在我看来,您似乎只想测试您可以控制的内容。以上更像是我所说的回归测试。我假设“他们的”网站是别人的网站。请问如果您遵循界面/集成规则但屏幕上没有任何内容会发生什么,而您会或能做些什么可能是个问题?此外,当他们更改网站或算法时会发生什么?您最终将需要根据他们所做的糟糕的事情来编写代码。

    也就是说,如上所述,您可以将加载测试和验证数据测试分开。我承认我对 PNunit 一无所知,但简单地向它抛出线程并不能解决每次往返测试的 3 小时延迟问题。

    如果需要同步运行,可以在 ClassInitialize() 中加载所有数据,然后休眠,直到验证并运行实际测试。

    如果是我,我只会有一个用于加载测试的测试项目,然后是几个小时后验证结果的一个项目。除了在测试结果之前确保先决条件通过之外,让它同步似乎不会给您带来太多好处,这也可以通过其他方式处理。

    【讨论】:

    • 感谢您的建议。似乎现在加载然后稍后验证很受欢迎。问题是似乎没有框架支持这一点,所以选择只是“自己动手”或启动开源计划。
    • 我试图解释为什么我认为没有框架这样做,很可能是另一个网站是一个黑匣子,并且验证黑匣子应该在该解决方案中而不是消耗的测试应用程序,但这只是我的意见。沿着关注点分离的路线
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多