我不能完全解释这个问题,因为我自己也不明白。我很感激在定义/定位/处理问题方面获得帮助。
设置
我有一个运行测试的 Win10 VM,还有一个运行这些测试的 Jenkins VM (Windows Server 2008)。我正在使用一个名为 JSystem 的测试应用程序。遗憾的是,它不正式支持 Windows 10,因为它使用 Telnet 与目标 SUT 通信(已从 Windows 10 中删除),因此我必须创建一种使用 WinRM 与该类型 VM 通信的方法。
问题
它的要点是,在某个时间点,对 Jenkins 的测试只是“冻结”了。连接仍处于“已建立”状态,VM(主机和客户端)仍在工作。它不会每次都发生,它可能会在测试开始后几分钟或几个小时后发生。导致的测试几乎永远不会相同,但是当 SUT 和测试 VM 之间存在某种形式的通信时,它自然会发生。它可以是文件传输,也可以是像“dir”这样的简单命令。它可以在请求命令发生期间发生,或者在发送回结果时发生。
更多信息
我确实收集了更多可能有帮助的信息。
- 当我尝试从自己的开发环境(即不使用 Jenkins 作为媒介)运行测试时,我没有看到它发生 - 但是,这可能是因为我不走运并且没有足够的尝试。我自己的环境也是 Windows 10,而不是 VM。
- 查看 SUT 上的事件查看器,出现警告“时间服务”事件 ID 50,在冻结发生一分钟后出现 NTPClient 时间同步问题。但是,Jenkins VM 根本没有任何事件。也就是说,该事件在 SUT 上重复很多次,它并不总是冻结测试,但如果它发生在 VM 之间的通信尝试期间,它可能会导致干扰。
- 我仍然可以使用 WinRM 连接到 SUT,与其他来源一样好,并且它也响应。
- 与其冻结,更像是 SUT 正在等待 Jenkins 的请求,而 Jenkins 正在等待 SUT 的响应。然而,奇怪的是,通常这些测试的超时时间为 30-60 秒,在测试步骤失败之前,它不应该等待比这更长的时间(当然,除非在测试中另外配置)。
- 我不能确定这是否与它有关,但我确实有虚拟机之间的时间同步问题。我在另一个问题中询问了如何解决它,所以如果这是您认为的问题,请告诉我,特别是如果您有解决方案。
解决这个问题的好方法是什么?