【问题标题】:How to specify working directory for groovy scripts in soap ui?如何在soap ui中为groovy脚本指定工作目录?
【发布时间】:2017-01-26 16:22:08
【问题描述】:

目前我在soap UI 中运行的所有常规脚本似乎都使用“...\SoapUI-5.2.1\bin”作为工作目录。从this question 的答案之一我尝试设置我的项目的 Resource Root 属性,但这对 groovy 脚本使用的工作目录没有影响。

示例

在 SoapUI 中创建一个新项目。添加一个测试套件、测试用例和一个 groovy 脚本测试步骤。在测试脚本中简单地说:

log.info new File("").getAbsolutePath()

点击绿色箭头运行脚本。对我来说,这将始终返回 SoapUI 安装的 bin 文件夹的路径。

我在寻找什么

在诸如 IntelliJ 之类的工具中,可以在脚本的运行配置中指定工作目录。这允许该工具从任何路径启动该过程。除此之外,大多数其他工具会将工作目录默认为项目文件夹,而不是像 SoapUI 那样的工具安装文件夹。

我目前的解决方法

我目前正在使用一个工作目录变量,我将它传递给我的脚本中的所有相关路径字符串。使用上面的示例,它看起来像:

String workingDir = "C:/somedir/"
log.info new File(workingDir  + "somepath").getAbsolutePath()

虽然这行得通,但它不如我用上面提到的其他工具做的那样优雅。

【问题讨论】:

  • 你想达到什么目的?请提供一些上下文?
  • @Rao 我只是认为处理相对路径比使用必须添加到每个路径字符串的变量更优雅。这可以在 IntelliJ/Eclipse 等其他工具中完成,所以我想知道在 SoapUI 中是否也可以这样做?
  • 那么究竟在您链接到的答案中不满足您的要求吗?你能提供你的脚本minimal reproducible example吗?
  • @SiKing 就像我已经解释过的那样:我链接到的答案建议在 SoapUI 中设置 Resource Root 属性,这似乎对 SoapUI 中 groovy 使用的工作目录没有影响。我认为我的问题与任何特定脚本没有任何联系,它适用于在 SoapUI 中运行的任何 groovy 脚本。我将从问题中删除 groovy 标记以避免将来出现任何混淆。
  • @EJS,还不确定这个问题。您是否在寻找soapui 项目的Resource Root 价值?可能是您显示您拥有的脚本。你也可以用例子来解释 - 你期望什么,你得到什么?

标签: groovy soapui


【解决方案1】:

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

【讨论】:

  • 在这里您也可以看到Resource Root 项目属性并设置您想要的值,而不是在下拉列表中。顺便问一下,上面推荐的方法都试过了吗?
【解决方案2】:

根据here,您可以使用两种方法更改工作目录:

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")) 

【讨论】:

  • .execute(null, new File("$rootLocation")) if variable
猜你喜欢
  • 1970-01-01
  • 2010-12-13
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 2023-02-03
  • 2011-04-26
  • 2017-11-09
相关资源
最近更新 更多