VTest 无法使用代码 1 启动 OWASP ZAP 进程

VTest is failing to start a OWASP ZAP process with code 1

我一直在尝试以自动方式根据我的代码获取 OWASP ZAP tool 到 运行。我已经成功地编写了一种方法,该方法可以在我的本地计算机上通过 Visual Studio 2017 的文本资源管理器界面始终如一地工作。但是,每当我尝试使用由 TFS 触发的远程测试命令行工具来使用我的一个自动测试框 运行 时,它总是失败并显示代码 1,并且没有其他错误文本。

我在本地和测试盒上 运行 使用相同版本的 windows 10。我在每个上都安装了相同版本的 visual studio,所以我希望他们使用相同版本的 VTest 来 运行 测试。我实际上不确定是否涉及 VTest,因为我已转换为 Selenium,而且这是 运行 作为没有 GUI 组件的单元测试。

我已经尝试在 .bat 文件和它调用的 .exe 文件上设置安全性以授予经过身份验证的用户完全访问权限,因为我认为这可能是权限问题。

我查看了事件日志,但其中没有显示任何详细信息。就像没发生过一样。

我在测试箱尝试 运行 这个特定测试时观察它,它甚至从未尝试为新的 zap 进程启动单独的命令 window,在此之前它失败了曾经发生过。但是,它肯定在测试盒上找到 运行 的正确文件,因为我尝试更改 URL 并收到一个特定的错误,说它不再能找到。

我还尝试通过命令行手动执行我尝试 运行 的命令,当我在测试盒上手动执行时,它可以完美运行。 TFS 框已登录并 运行 以我尝试手动测试的用户身份登录,该用户是该框的本地管理员。

因为这在我的机器上本地工作,并且因为我能够在测试盒上手动成功地 运行 命令,问题组件似乎是 TFS 远程代理。远程代理成功启动另外两个进程进行Selenium测试,一个是IE驱动,一个是WinAppDriver; WinAppDriver 在启动时有一个单独的命令 window 与之关联。不过,这两个进程都是由Selenium wrapper启动的,我不是自己直接启动的。

您可以在下面看到我用来启动 zap 进程的代码的摘录。有谁知道为什么它在我最好的盒子上可能会失败?

        string ZapBatLocation = @"C:\Program Files\OWASP\Zed Attack Proxy\zap.bat";
        var last_idx = ZapBatLocation.LastIndexOf('\');

        var _ZapProc = new System.Diagnostics.Process();
        _ZapProc.StartInfo = new System.Diagnostics.ProcessStartInfo(ZapBatLocation.Substring(last_idx + 1), "-daemon") { WorkingDirectory = ZapBatLocation.Substring(0, last_idx), UseShellExecute = true, CreateNoWindow = false };
        _ZapProc.ErrorDataReceived += ErrOutputHandler;

        _ZapProc.Start();
        System.Threading.Thread.Sleep(2000); // give it time to launch and die if it is going to
        if (_ZapProc.HasExited)
            throw new Exception($"Unable to launch ZAP process, exited with code {_ZapProc.ExitCode}.");

编辑: 日志文件似乎表明某种配置损坏。也许某个地方的配置文件存在安全问题?以下是日志中经常出现的主要错误的摘录:

2019-05-30 16:26:34,178 [AWT-EventQueue-0] INFO Control - New Session 2019-05-30 16:26:34,209 [AWT-EventQueue-0] INFO Control - Create and Open Untitled Db 2019-05-30 16:26:34,240 [AWT-EventQueue-0] INFO ENGINE - dataFileCache commit start 2019-05-30 16:26:34,240 [AWT-EventQueue-0] INFO ENGINE - dataFileCache commit end 2019-05-30 16:26:34,256 [AWT-EventQueue-0] INFO ENGINE - Database closed 2019-05-30 16:26:34,396 [AWT-EventQueue-0] INFO ENGINE - open start - state not modified 2019-05-30 16:26:34,459 [AWT-EventQueue-0] INFO ENGINE - dataFileCache open start 2019-05-30 16:26:34,475 [AWT-EventQueue-0] INFO ENGINE - dataFileCache open end 2019-05-30 16:26:35,615 [ZAP-cfu] ERROR ExtensionAutoUpdate - Unable to load the configuration org.apache.commons.configuration.ConfigurationException: Unable to load the configuration at org.apache.commons.configuration.XMLConfiguration.load(XMLConfiguration.java:955) at org.apache.commons.configuration.XMLConfiguration.load(XMLConfiguration.java:908) at org.apache.commons.configuration.XMLConfiguration$XMLFileConfigurationDelegate.load(XMLConfiguration.java:1583) at org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:324) at org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:261) at org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:238) at org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.load(AbstractHierarchicalFileConfiguration.java:184) at org.zaproxy.zap.utils.ZapXmlConfiguration.(ZapXmlConfiguration.java:88) at org.zaproxy.zap.extension.autoupdate.ExtensionAutoUpdate.getPreviousVersionInfo(ExtensionAutoUpdate.java:883) at org.zaproxy.zap.extension.autoupdate.ExtensionAutoUpdate.getNewAddOns(ExtensionAutoUpdate.java:902) at org.zaproxy.zap.extension.autoupdate.ExtensionAutoUpdate.gotLatestData(ExtensionAutoUpdate.java:1139) at org.zaproxy.zap.extension.autoupdate.ExtensionAutoUpdate.run(ExtensionAutoUpdate.java:983) Caused by: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 3-byte UTF-8 sequence. at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(Unknown Source) at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipChar(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source) at org.apache.commons.configuration.XMLConfiguration.load(XMLConfiguration.java:942) ... 11 more 2019-05-30 16:26:45,052 [Thread-10] INFO ENGINE - dataFileCache commit start 2019-05-30 16:26:45,052 [Thread-10] INFO ENGINE - dataFileCache commit end 2019-05-30 16:26:45,084 [Thread-10] INFO ENGINE - Database closed 2019-05-30 16:26:45,193 [Thread-10] INFO Control - OWASP ZAP 2.7.0 terminated.

我清除了日志文件,并尝试 运行 自动化测试,它如预期的那样失败了,但没有在日志文件中添加任何内容。然后我在命令提示符下手动尝试 运行ning ZAP,在我退出程序后它填满了日志文件,包括上述错误。

所以看起来 ZAP 日志文件直到成功启动后才真正创建,或者至少比我在自动化中获得的启动更多。

我不确定这是否可以称为答案,但问题已不存在,所以就这样吧。

在与那个相当奇怪的问题进行了一周的斗争之后,我被其他任务拉走了,无法再专注于它。两周后,我终于有时间重新调查这个问题,令我惊讶的是,它不再是一个问题。 .bat 文件现在每次都能正确启动,我没有做任何更改。

我最好的猜测是 windows 可能已经卡住了,一些 windows 更新导致过去两周的某个时间重新启动,导致一切开始工作。为什么在我不知道的所有故障排除过程中我从未尝试过基本的系统重启,将其归因于愚蠢。

附带说明一下,如果其他人遇到类似问题,我的下一个故障排除步骤是创建一个包含以下内容的自定义 .bat 文件:

echo 'hi'
pause

然后在启动 ZAP .bat 文件的调用正上方的代码中插入对它的调用。只是为了看看代码是否可以启动任何东西,或者它是否是特定于 ZAP .bat 文件的东西。

var bt = new System.Diagnostics.Process();
bt.StartInfo = new System.Diagnostics.ProcessStartInfo("C:\selenium\test.bat");
bt.Start();