如何在soapui中指定groovy脚本的工作目录



目前我在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")) 

最新更新