编码的UI测试现在收到有关无法找到Newtonsoft.json的错误

时间:2015-03-24 20:11:56

标签: c# debugging json.net coded-ui-tests

我有一个简单的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系统运行测试?我尝试通过快照将其还原回原始用户(并在测试管理器中更改主机环境)。这样做会给我上面相同的结果。

我正在寻找任何进一步调试的方法或修复方法。我尝试了以下作为失败的修复程序:

  • 在解决方案中包括Newtonsoft.Json
  • 将库复制到c:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ PublicAssemblies
  • 恢复到已知的工作版本并运行它(仍会得到相同的错误)

值得注意的是最后一项。我有我知道在多台机器上工作和工作的构建。在任何机器上使用这些构建产生相同的结果。什么可能导致该错误消息并与机器/测试代码无关?

1 个答案:

答案 0 :(得分:0)

错误

错误消息是

  

无法加载文件或程序集' Newtonsoft.Json,Version = 4.5.0.0,   Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'或其中一个依赖。

这里要知道的一点是,这个错误有两个选择:

  1. 找不到Newtonsoft.Json
  2. 找不到依赖
  3. 分析

    分析此类问题的典型方法是使用Process Monitor [Microsoft SysInternals]

    如果您想完全手动完成,请按以下步骤操作:

    1. 运行Process Monitor
    2. 为具有问题的可执行文件添加过滤器
    3. 重现问题
    4. 一旦问题再现,请停止录制事件
    5. 艰巨任务:从底部查找错误Name not foundPath not foundAccess denied。您必须找到一个有问题的DLL,之后不会跟Success(如果在搜索路径的后期找到DLL,可能会发生这种情况)。
    6. 我已自动执行此过程并提供Process Monitor Log Analyzer下载。免责声明:我是这个免费工具的作者。

      使用该工具,步骤如下:

      1. 运行Process Monitor
      2. 为具有问题的可执行文件添加过滤器
      3. 重现问题
      4. 一旦问题再现,请停止录制事件
      5. 将Process Monitor日志另存为XML
      6. 在Process Monitor Log Analyzer中打开XML
      7. 从上到下浏览项目
      8. 您的问题

          

        接下来的问题是,为什么在更改用户后Coded UI系统运行测试后会开始?

        也许" old"用户有足够的访问权限和" new"用户没有。这不应该是管理员用户的原因(尽管仍然可能)。

        也许" old"用户在PATH和"新"中有不同的文件夹用户没有。

          

        有趣的是,Newtonsoft.Json(又名Json.Net)并未在项目中的所有或任何引用的库中使用。

        我想知道你是怎么检查的。请注意,您不能简单地将Dependency Walker用于.NET。您需要特定于.NET的内容,例如dotPeek [JetBrains],但dotPeek不会立即显示所有依赖项,您需要手动完成所有引用。但是,这不会找到丢失的本机DLL。因此,对我来说最可靠的方法是如前所述的Process Monitor。

          

        什么可能导致该错误消息并且机器/测试代码无关?

        与之前相同:用户特定配置。