Asp.net mvc 3 在集成(WATIN+;NUNIT)测试期间检测ELMAH异常

Asp.net mvc 3 在集成(WATIN+;NUNIT)测试期间检测ELMAH异常,asp.net-mvc-3,watin,elmah,Asp.net Mvc 3,Watin,Elmah,以下是我的设想: 我有一套WATIN GUI测试,针对每个内置CI的ASP.net MVC3 web应用程序运行。测试验证GUI在给定特定输入时的行为是否符合预期 web应用程序使用ELMAH xml文件记录异常 问题:如何验证在每次测试运行期间没有发生意外异常。如果确实发生异常,在NUNIT输出中提供异常的ELMAH详细信息的链接也很好 Elmah在web应用程序中运行,该应用程序是与测试运行程序分离的进程。没有简单的方法可以直接截获未处理的错误。 首先想到的是查看保存ElmahXML错误

以下是我的设想:

  • 我有一套WATIN GUI测试,针对每个内置CI的ASP.net MVC3 web应用程序运行。测试验证GUI在给定特定输入时的行为是否符合预期

  • web应用程序使用ELMAH xml文件记录异常


问题:如何验证在每次测试运行期间没有发生意外异常。如果确实发生异常,在NUNIT输出中提供异常的ELMAH详细信息的链接也很好

Elmah在web应用程序中运行,该应用程序是与测试运行程序分离的进程。没有简单的方法可以直接截获未处理的错误。 首先想到的是查看保存ElmahXML错误报告的文件夹(App_Data?)

您可以在每个测试开始时清除文件夹中的错误报告,并在测试结束时检查它是否仍然为空。如果文件夹不为空,则可以将错误报告复制到测试输出中

这种方法不是防弹的。检查文件夹时,可能发生错误,但XML文件尚未(完全)写入。例如,当web应用程序超时时。如果试图读取仍在编写的XML文件,则可能会遇到文件锁定问题


您可以将Elmah配置为登录到数据库并从那里读取错误报告,而不是从磁盘读取XML文件。如果出现文件锁定问题,这将有助于您解决问题。

为什么不在WatiN测试设置中转到Elmah reporting视图(可能是Elmah.axd),并读取其中记录的最新错误的时间戳。然后在测试之后执行同样的操作,并断言时间戳是相同的


很容易从同一行读取此最新错误的url,并将其记录在失败断言的消息中,该消息随后将出现在nunit输出中

我的测试就是这样做的:

  • 在测试设置过程中,记录时间
  • 运行测试
  • 在测试拆卸过程中,浏览(elmah.axd/download)并解析elmah CSV
  • 筛选出与正在运行WATIN测试的用户不匹配的行,以及UNIX时间早于(1)中记录的时间的行
  • 如果有行,则向NUNIT报告异常消息和错误URL
    看起来效果不错,我们已经发现了几个bug,这些bug在人类测试应用程序之前是不会出现的

    我尝试了Marnix van Valen提出的“查看应用程序数据文件夹”的想法,但正如所指出的那样,当发生异常时,您不能始终确保已写入xml文件。我认为ELMAH有时会将异常数据保存在内存中,直到浏览到AXD和特定异常。SQL已退出,因为我们希望避免依赖关系。我将尝试的另一个途径是下载和解析ELMAH提供的CSV日志。将发布结果。感谢您的帮助。reporting视图(elmah.axd)中的time列只显示一分钟。日志的CSV(elmah.axd/download)有一个UNIX时间列,我最终使用它来获得所需的时间精度。