我遇到了 TeamCity 的问题,该问题运行了我为运行 SpecFlow 测试而创建的批处理文件。
批处理文件运行SpecRun.exe
,我应该看到 Chrome 弹出,测试开始运行。 (这不是本地应用程序,因此不需要运行IIS等。)测试是针对站点运行的selenium测试。从命令行运行批处理文件时,所有工作都按预期工作。
我在 TeamCity 中有一个构建步骤,它通过命令行构建步骤运行批处理文件。但是当我运行构建步骤时,我在日志中得到Success
,它告诉我批处理文件已经运行,但没有弹出 Chrome 窗口,也没有实际运行测试。< / p>
我的批处理文件内容是:
cd C:\Users\carlb\Documents\Visual Studio 2015\Projects\SITS_Automation\packages\SpecRun.Runner.1.2.0\tools
start SpecRun.exe run ../../SITS_Automation/default.srprofile /report:../../SITS_Automation/TestResults/SITS_Report.html
我的批处理代码中的错误导致硒测试没有完成?
答案 0 :(得分:1)
start命令启动SpecRun和另一个进程中的任何其他程序,因此不会等待它的completition。 删除开始或向其添加/ WAIT参数。
答案 1 :(得分:0)
设置当前目录的路径包含空格。
因此你需要
cd "C:\Users\carlb\Documents\Visual Studio 2015\Projects\SITS_Automation\packages\SpecRun.Runner.1.2.0\tools"
甚至更好
cd /D "%USERPROFILE%\Documents\Visual Studio 2015\Projects\SITS_Automation\packages\SpecRun.Runner.1.2.0\tools"
可以通过在命令提示符窗口中运行cmd /?
来读取最后一页输出,其中包含空格或以下字符&()[]{}^=;!'+,`~
之一的字符串必须包含在双引号。
使用选项/D
命令 CD 进程也切换到与当前驱动器不同的驱动器上的目录。预定义环境变量USERPROFILE
包含当前用户的配置文件目录的路径。
如果start
是一个控制台应用程序,则删除命令SpecRun
,以便在同一命令进程中运行此应用程序,暂停执行批处理文件,直到此控制台应用程序自行终止。
但如果SpecRun
是GUI应用程序,请使用
start "SpecRun" /wait SpecRun.exe run ..\..\SITS_Automation\default.srprofile /report:..\..\SITS_Automation\TestResults\SITS_Report.html
双引号中的 "SpecRun"
只是一个窗口 title 字符串,对于空字符串也可以只是""
,或者在此命令行中完全省略,因为没有其他参数用双引号括起来。如果 start 行中的任何字符串都用双引号括起来,则可选 title 通常是必需参数,因为命令 start 会将第一个双引号字符串解释为标题字符串。因此,如果只是一个空字符串,则指定使用 start 始终是标题字符串更安全,以避免意外行为。
您还应该在目录或文件的路径中使用\
而不是/
,因为反斜杠是Windows上的目录分隔符,而不是Unix / Linux / Mac上的正斜杠。命令处理器cmd.exe
在执行批处理文件时用文件和目录路径中的反斜杠替换正斜杠。但是,最好为Windows指定具有正确目录分隔符的文件和文件夹路径,但启动的应用程序需要正斜杠,因为(非常)从* nix移植到Windows。
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
cd /?
start /?