测试遇600秒超时错误:触发场景疑问及代码调整咨询
首先来看你提供的完整异常信息:
Maximum timeout of 600 seconds was reached while waiting for task to complete: C:\Program Files (x86)\NUnit 2.6.4\bin\nunit-console.exe "C:\Tests\resources\test_scripts\api-tests-hd\Installers\Test1\bin\Release\Test1.dll" /xml:"C:\Tests\Results\Test1\39.xml". 2018-05-17 06:49:01,933 ERROR StarterConsole.HttpPost - FileNotFoundException Writing to fileStream to dataStream in HttpUploadFile! System.IO.FileNotFoundException: Could not find file 'C:\Tests\Results\Test1\39.xml'. File name: 'C:\Tests\Results\Test1\39.xml' at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) at StarterConsole.HttpPost.HttpUploadFile(Uri postLocation, String file, String paramName, String contentType, Dictionary`2 postItems, Int32 retries) in C:\repos\starterconsole\StarterConsole\Http\HttpPost.cs:line 293
一、超时错误的触发时机
从异常日志可以明确判断:这个600秒超时错误是单次启动的NUnit控制台测试任务(也就是整个Test1.dll测试套件的执行过程)耗时超过600秒时触发的,和你for循环里的单步PowerShell脚本执行耗时无关。
日志里直接指出是等待nunit-console.exe运行测试DLL的任务完成时达到了超时上限,后续的FileNotFoundException只是连锁反应——因为测试进程被强制终止,NUnit没来得及生成指定的测试结果XML文件39.xml。
二、给定代码的有效性及调整建议
1. 代码能否解决当前问题?
如果这段代码:
process.WaitForExit(1000 * 60 * 60); //Wait up to one hour
正是用来等待上述nunit-console.exe进程完成的那段代码,那么它完全可以解决当前的超时问题——它把进程等待的超时时间从原来的600秒(10分钟)延长到了3600秒(1小时),给测试足够的时间完成执行。
2. 额外注意事项
- 一定要确认这段代码对应的是启动
nunit-console.exe的那个Process实例,如果这段代码是控制其他无关进程的,那对当前问题没有帮助。 - 如果你的测试实际执行时间可能超过1小时,可以继续调整这个数值(比如
1000 * 60 * 120表示2小时),但也要留意:测试耗时过长可能暗示存在其他问题(比如测试用例设计冗余、测试环境性能不足等),建议后续排查优化。 - 当超时问题解决后,后续的
FileNotFoundException会自动消失,因为NUnit能正常完成测试并生成结果XML文件了。
内容的提问来源于stack exchange,提问作者DeividasB

