我有一个简单的Coded UI测试来登录应用程序。该测试是数据驱动的,并使用来自TFS的数据。我们正在使用服务器和代理系统上的TfsTestAgent用户(具有管理员权限)。当我执行测试时,我看到以下错误:
The unit test adapter failed to connect to the data source or to read the data.
For more information on troubleshooting this error, see "Troubleshooting Data-Driven
Unit Tests" (http://go.microsoft.com/fwlink/?LinkId=62412) in the MSDN Library.Error
details: Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0,
Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The
system cannot find the file specified.
测试运行日志(UITestLog.html)显示:
I, 2524, 81, 2015/03/24, 13:27:09.815, 14494724802, QTAgent32_40.exe, ExtensionFramework : Reading extensions from custom dir 'C:\Program Files (x86)\Common Files\Microsoft Shared\VSTT\12.0\UITestExtensionPackages'
V, 2524, 81, 2015/03/24, 13:27:09.830, .\QTAgent32_40.exe, UnitTestExecuter.RunClassInitializeMethod: Acquiring m_runner.SyncRoot.
V, 2524, 81, 2015/03/24, 13:27:09.830, .\QTAgent32_40.exe, UnitTestExecuter.RunClassInitializeMethod: Acquired m_runner.SyncRoot.
V, 2524, 81, 2015/03/24, 13:27:09.830, .\QTAgent32_40.exe, CodedUITest : CodedUITestExtension.BeforeClassInitialize()
V, 2524, 81, 2015/03/24, 13:27:09.830, .\QTAgent32_40.exe, CodedUITest : CodedUITestExtension.AfterClassInitialize()
V, 2524, 81, 2015/03/24, 13:27:09.830, .\QTAgent32_40.exe, UnitTestExecuter.RunClassInitializeMethod: Released m_runner.SyncRoot.
V, 2524, 81, 2015/03/24, 13:27:09.830, .\QTAgent32_40.exe, UnitTestRunner.ExecuteDataDrivenTest: started.
V, 2524, 8, 2015/03/24, 13:27:10.377, .\QTAgent32_40.exe, CodedUITest : CodedUITestExtension.BeforeClassCleanup
V, 2524, 8, 2015/03/24, 13:27:10.377, .\QTAgent32_40.exe, CodedUITest : CodedUITestExtension.AfterClassCleanup
V, 2524, 8, 2015/03/24, 13:27:10.393, .\QTAgent32_40.exe, CodedUITest : CodedUITestExtension.Dispose()
I, 2524, 8, 2015/03/24, 13:27:10.393, .\QTAgent32_40.exe, UnitTestRunner.Dispose.
有趣的是,Newtonsoft.Json(又名Json.Net)并未在项目中的所有或任何引用的库中使用。从上面的日志中,我觉得这不在编码的UI测试之外,因为它没有被注册为脚本异常。
接下来的问题是,为什么在更改用户后,Coded UI系统运行测试?我尝试通过快照将其还原回原始用户(并在测试管理器中更改主机环境)。这样做会给我上面相同的结果。
我正在寻找任何进一步调试的方法或修复方法。我尝试了以下作为失败的修复程序:
值得注意的是最后一项。我有我知道在多台机器上工作和工作的构建。在任何机器上使用这些构建产生相同的结果。什么可能导致该错误消息并与机器/测试代码无关?
答案 0 :(得分:0)
错误消息是
无法加载文件或程序集' Newtonsoft.Json,Version = 4.5.0.0, Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'或其中一个依赖。
这里要知道的一点是,这个错误有两个选择:
Newtonsoft.Json
分析此类问题的典型方法是使用Process Monitor [Microsoft SysInternals]。
如果您想完全手动完成,请按以下步骤操作:
Name not found
,Path not found
或Access denied
。您必须找到一个有问题的DLL,之后不会跟Success
(如果在搜索路径的后期找到DLL,可能会发生这种情况)。我已自动执行此过程并提供Process Monitor Log Analyzer下载。免责声明:我是这个免费工具的作者。
使用该工具,步骤如下:
接下来的问题是,为什么在更改用户后Coded UI系统运行测试后会开始?
也许" old"用户有足够的访问权限和" new"用户没有。这不应该是管理员用户的原因(尽管仍然可能)。
也许" old"用户在PATH
和"新"中有不同的文件夹用户没有。
有趣的是,Newtonsoft.Json(又名Json.Net)并未在项目中的所有或任何引用的库中使用。
我想知道你是怎么检查的。请注意,您不能简单地将Dependency Walker用于.NET。您需要特定于.NET的内容,例如dotPeek [JetBrains],但dotPeek不会立即显示所有依赖项,您需要手动完成所有引用。但是,这不会找到丢失的本机DLL。因此,对我来说最可靠的方法是如前所述的Process Monitor。
什么可能导致该错误消息并且机器/测试代码无关?
与之前相同:用户特定配置。