目前我在soap UI中运行的所有groovy脚本似乎都使用"…\SoapUI-5.2.1\bin"作为工作目录。根据这个问题的一个答案,我尝试设置项目的ResourceRoot属性,但这对groovy脚本使用的工作目录没有影响。
示例
在SoapUI中创建新项目。添加一个测试套件、测试用例和一个groovy脚本测试步骤。在测试脚本中简单地说:
log.info new File("").getAbsolutePath()
单击绿色箭头运行脚本。对我来说,这将始终返回SoapUI安装的bin文件夹的路径。
我在找什么
在像IntelliJ这样的工具中,可以在脚本的运行配置中指定一个工作目录。这允许工具从任何路径启动流程。除此之外,大多数其他工具将默认工作目录为项目文件夹,而不是像SoapUI那样的工具安装文件夹。
我当前的解决方法
我目前正在使用一个工作目录变量,我将该变量传递给脚本中所有相关的路径字符串。使用上面的例子,这看起来像:
String workingDir = "C:/somedir/"
log.info new File(workingDir + "somepath").getAbsolutePath()
虽然这很有效,但它不如我用上面提到的其他工具所能做的那么优雅。
Working
目录是与上下文相关的目录。它可能会根据调用相应进程的方式/从哪个目录调用而有所不同。
例如,SoapUI
可以从不同目录的命令行调用。
- 用户转到
%SOAPUI_HOME%bin
目录并运行soapui.bat
命令 - 用户打开命令提示符,并直接运行
soapui.bat
(它要求%SOAPUI_HOME%bin
位于%PATH%
中)
在这两种情况下,工作目录可能不同。
那么,如何在Groovy Script
中找到它
给你:
def pwd = new File('.').absolutePath
log.info "Current working directory is ${pwd}"
我还想澄清一下SoapUI的项目属性Resource Root
。SoapUI允许具有${projectDir}
或${workspaceDir}
,或者用户可以提供他的首选路径。
- ${projectDir}-这只是当前soapui项目的父目录
如果您想通过Groovy Script
获得此位置?使用以下两种方法之一:
def project = context.testCase.testSuite.project
log.info context.expand(project.resourceRoot)
或
def projectPath = new com.eviware.soapui.support.GroovyUtils(context).projectPath //gets the path of the project root
log.info projectPath
根据这里,您可以使用两种方法更改工作目录:
def processBuilder=new ProcessBuilder("ls")
processBuilder.redirectErrorStream(true)
processBuilder.directory(new File("Your Working dir"))
def process = processBuilder.start()
或
"your command".execute(null, new File("your working dir"))