使用命令行工具分析 Web 应用的覆盖率
如果您想自动化 Web 应用的覆盖率(例如,在持续集成中),可以使用 dotCover 命令行工具。
与 手动覆盖率不同,手动覆盖率是通过点击 获取快照 按钮获取覆盖率快照,而命令行工具仅在被分析的进程正确完成其工作后获取快照。 因此,要获取快照,您需要正确停止系统中的 IIS,或者运行第二个命令行工具实例,并显式向第一个运行的实例发送“获取快照并终止进程”命令。 第二个实例如何知道第一个实例的信息? 这很简单:运行第一个实例时,您可以使用 /Instance=<ID> 参数指定其 ID。 然后,您可以使用此 ID 向该实例发送命令。
根据您的覆盖目标以及应用程序是由 IIS 还是 IIS Express 托管,覆盖过程会有所不同。 主要有两种覆盖方案:
获取 Web 应用的覆盖率(IIS Express/IIS)。
在继续之前,请按照 此处所述安装 dotCover 命令行工具。
获取 Web 应用的覆盖率(IIS Express)
使用 dotCover 命令行工具,在覆盖模式下启动 IIS Express 和您的应用程序。 例如:
dotCover cover --TargetExecutable="C:\Program Files (x86)\IIS Express\iisexpress.exe" ^ --TargetArguments=/site:MyWebApp /systray:false ^ --Output=coverageReport.xml ^ --ReportType=XML ^ --Instance=1这里的
Instance是当前 dotCover.exe 实例的 ID。 您将使用此 ID 向该命令行工具发送命令。如果您并行启动多个 IIS Express 实例,
/systray:false参数就有意义了。在被覆盖的应用程序中,执行所需的场景或运行执行这些场景的测试。
运行第二个命令行工具实例,向第一个运行的实例发送“获取快照并终止进程”命令:
dotCover send --Command=GetSnapshotAndKillChildren ^ --Instance=1这里的
Instance是您在步骤 1 中指定的第一个 dotCover.exe 实例的 ID。发送命令后,IIS Express 和 dotCover.exe 实例将被停止,覆盖率快照将被保存。
获取 Web 应用的覆盖率(IIS)
确保您在服务器上具有管理员权限。
使用 dotCover 命令行工具,启动 IIS 服务的覆盖模式。 例如:
dotCover cover-iis ^ --Output=coverageReport.xml ^ --ReportType=XML ^ --Instance=1这里的
Instance是当前 dotCover.exe 实例的 ID。 您将使用此 ID 向该命令行工具发送命令。在被覆盖的应用程序中,执行所需的场景或运行执行这些场景的测试。
运行第二个命令行工具实例,向第一个运行的实例发送“获取快照并终止进程”命令:
dotCover send --Command=GetSnapshotAndKillChildren ^ --Instance=1这里的
Instance是您在步骤 2 中指定的第一个 dotCover.exe 实例的 ID。发送命令后,IIS 服务和 dotCover.exe 实例将被停止,覆盖率快照将被保存。
如果应用程序由测试运行,获取测试的覆盖率
使用 dotCover 命令行工具,在覆盖模式下启动测试。 例如,如果您使用 NUnit:
dotcover cover --TargetExecutable="C:\Program Files\NUnit 2.6\bin\nunit-console.exe" ^ --TargetArguments=C:\MyWebApp\bin\Debug\AppTests.dll ^ --Output=coverageReport.xml ^ --ReportType=XML ^ --Instance=1这里的
Instance是当前 dotCover.exe 实例的 ID。 您将使用此 ID 向该命令行工具发送命令。测试程序集的设置必须在 IIS Express / IIS 应用程序池中启动应用程序。
测试程序集的拆卸必须运行以下命令:
dotCover send --Command=GetSnapshotAndKillChildren ^ --Instance=1这里的
Instance是您在步骤 1 中指定的第一个 dotCover.exe 实例的 ID。命令发送后,IIS Express / IIS 应用程序池、dotCover.exe 实例以及执行测试的进程将被停止,覆盖率快照将被保存。