在 SoapUI JDBC 测试步骤中格式化 SQL 查询

Formatting SQL queries in SoapUI JDBC test steps

如何使用 使 SoapUI 中 SQL 查询的内容与外部编辑器保持同步? 解决方案可能如下所示:

  1. Groovy 导出 SoapUI TestSuite 或的所有查询的脚本 TestStep 进入 SQL 个文件。

  2. 使用外部编辑器编辑并保存 SQL。

  3. Groovy 脚本根据更改更新 SoapUI 中的查询 文件。

初始问题:

动机

SQL 查询 测试步骤JDBC 的输入字段

  1. 非常小而且
  2. 不提供任何代码格式,如 SQL 关键字的缩进、重新包装或大写(只有语法高亮显示)。

恕我直言,这在编写包含多个 where 子句甚至连接的查询时非常麻烦。

旁注:如果有人能指出一些功能(内置、插件?)直接在 SoapUI 中格式化 SQL 代码(不是专业版!),我很乐意继续 groovy脚本。

这些是我以 Groovy 测试步骤的形式实现的 -脚本(它们也可能是 setUp/tearDown 脚本,但我更喜欢单独的测试步骤清晰可见,我可以轻松切换 activity):

将 SoapUI 测试用例的所有 JDBC/SQL 查询导出 到 SQL 文件中。这可能是测试用例的最后一步。

def testCase = testRunner.testCase
def testSuite = testCase.testSuite
def project = testSuite.project

// Remove .xml extension from filename
String pathToProjectDir = project.path.replaceAll(~/\.\w+$/, '')

File projectDir = new File(pathToProjectDir)
File suiteDir = new File(projectDir, testSuite.name)
File caseDir = new File(suiteDir, testCase.name)

caseDir.mkdirs()
assert caseDir.exists()
assert caseDir.isDirectory()

log.info "Exporting to '${caseDir}'."

testCase.getTestStepsOfType(com.eviware.soapui.impl.wsdl.teststeps.JdbcRequestTestStep)
    .each{testStep ->
        String filename = "${testStep.name}.sql"
        File file = new File(caseDir, filename)
        file.text = testStep.query
        log.info "'${filename}' written."
    }

log.info "Files written."

使用外部编辑器编辑并保存SQL。

根据更改的文件更新 SoapUI 中的查询。忽略丢失或空文件,以免破坏现有项目。

def testCase = testRunner.testCase
def testSuite = testCase.testSuite
def project = testSuite.project

// Remove .xml extension from filename
String pathToProjectDir = project.path.replaceAll(~/\.\w+$/, '')

File projectDir = new File(pathToProjectDir)
File suiteDir = new File(projectDir, testSuite.name)
File caseDir = new File(suiteDir, testCase.name)

assert caseDir.exists()
assert caseDir.isDirectory()

log.info "Importing from '${caseDir}'."

testCase.getTestStepsOfType(com.eviware.soapui.impl.wsdl.teststeps.JdbcRequestTestStep)
    .each{testStep ->
        String filename = "${testStep.name}.sql"
        File file = new File(caseDir, filename)
        if (file.exists()) {
            if (file.text) {
                testStep.query = file.text
                log.info "'${filename}'"
            } else {
                log.warn "Ignoring '${filename}'"
            }
        } else {
                log.warn "'${filename}' does not exist."
        }
    }

log.info "Files imported."

文件放置在以下目录结构中: 从 SoapUI 项目文件 path/to/project.xml 本身开始,每个 JDBC 测试步骤(创建并)填充一个 SQL 文件的树: path/to/project/${name of TestSuite}/${name of TestCase}/${name of TestStep}.sql