在 SoapUI JDBC 测试步骤中格式化 SQL 查询
Formatting SQL queries in SoapUI JDBC test steps
如何使用 groovy 使 SoapUI 中 SQL 查询的内容与外部编辑器保持同步?
解决方案可能如下所示:
Groovy 导出 SoapUI TestSuite 或的所有查询的脚本
TestStep 进入 SQL 个文件。
使用外部编辑器编辑并保存 SQL。
Groovy 脚本根据更改更新 SoapUI 中的查询
文件。
初始问题:
如何访问测试步骤的查询?它不在那里
财产,是吗?
有没有办法在项目文件 (XML) 上 运行 步骤 1 和 3
来自测试本身(作为 setUp/tearDown 脚本)?
动机
SQL 查询 测试步骤JDBC 的输入字段
- 非常小而且
- 不提供任何代码格式,如 SQL 关键字的缩进、重新包装或大写(只有语法高亮显示)。
恕我直言,这在编写包含多个 where 子句甚至连接的查询时非常麻烦。
旁注:如果有人能指出一些功能(内置、插件?)直接在 SoapUI 中格式化 SQL 代码(不是专业版!),我很乐意继续 groovy脚本。
这些是我以 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
如何使用 groovy 使 SoapUI 中 SQL 查询的内容与外部编辑器保持同步? 解决方案可能如下所示:
Groovy 导出 SoapUI TestSuite 或的所有查询的脚本 TestStep 进入 SQL 个文件。
使用外部编辑器编辑并保存 SQL。
Groovy 脚本根据更改更新 SoapUI 中的查询 文件。
初始问题:
如何访问测试步骤的查询?它不在那里 财产,是吗?
有没有办法在项目文件 (XML) 上 运行 步骤 1 和 3 来自测试本身(作为 setUp/tearDown 脚本)?
动机
SQL 查询 测试步骤JDBC 的输入字段
- 非常小而且
- 不提供任何代码格式,如 SQL 关键字的缩进、重新包装或大写(只有语法高亮显示)。
恕我直言,这在编写包含多个 where 子句甚至连接的查询时非常麻烦。
旁注:如果有人能指出一些功能(内置、插件?)直接在 SoapUI 中格式化 SQL 代码(不是专业版!),我很乐意继续 groovy脚本。
这些是我以 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