从 Soapui 的测试套件属性中排除测试用例
Excluding testcases from testsuite properties in Soapui
我想根据某些测试套件属性的值禁用某些测试用例(即,如果 属性 IsActive1 = false,则将禁用 testcase1)。
我在测试套件设置脚本中使用了这段代码,但出现错误:
def testSuite = context.testCase.testSuite;
def totalTestCases = testSuite.getTestCases().size();
for(n in (0..totalTestCases-1)) {
if(testSuite.getTestCaseAt(n).name == "${#TestSuite#IsActive}"){
testSuite.getTestCaseAt(n).setDisabled(true)
}
}
我该怎么做?
您可以使用 Groovy 脚本来做到这一点。您可以将此脚本放在 testSuite Window 的 Setup script
选项卡中,以便脚本在 testSuite 之前执行], disabling/enabling testCases 取决于属性。
根据您的要求,此脚本可能类似于:
// get property names getting only
// the one which start with "isactive"
def isActiveList = testSuite.getPropertyNames().findAll {
it.toLowerCase().startsWith('isactive')
}
log.info isActiveList
// get testCaseList in order
def testCaseList = testSuite.getTestCaseList()
// for each "isactive" property
// enable or disable the corresponding
// testCase
isActiveList.each{ name ->
// get the value
def isActive = testSuite.getPropertyValue(name).toBoolean()
// get the order from the property name
def testCaseIndex = name.toLowerCase() - 'isactive'
log.info "testCase at index $testCaseIndex will be disabled ${!isActive}"
// get the testCase and enable/disable depend
// on isactive property
// NOTE: IsActive1 corresponds to array pos 0
// so a -1 is necessary
log.info testCaseList[testCaseIndex.toInteger()-1]?.disabled = !isActive
}
也许最好将基于 testCase 名称的属性重命名为 enable/disable 而不是使用数字;如果您更改 testCase 顺序或添加新顺序,以避免出现不良行为...
希望对您有所帮助,
以下是我将如何实现这一目标。
- 假设有一个带有测试用例的套件,即
TestCase1, TestCase2, TestCase3, TestCase4, TestCase5
。使用这种方法,只需更改 属性 值即可包含或排除要禁用的测试用例名称。我相信从一个地方(单个 属性)改变事情会更好,而不是为每个测试用例改变 IsActive
属性。如果您有更多案例要处理,这将是一个负担(针对每个案例并为 IsActive 修改 true 或 false)
- 在测试套件级别创建自定义 属性,例如
DISABLE_TESTS
的值(逗号分隔列表禁用)为 TestCase1, TestCase5
这是套件级别的 Setup Script
,可以实现选择性地执行测试用例。
/**
* Test Suite Setup Script
* Enable or disable selected list of test cases
* Based on the test suite property DISABLE_TESTS value
**/
//Disables a Test case
def disableTestCase(testCaze) {
log.info "Disabling test case : ${testCaze.name}"
testCaze.disabled = true
}
//Enables a Test case
def enableTestCase(testCaze) {
log.info "Enabling test case : ${testCaze.name}"
testCaze.disabled = false
}
//Read the test case names to enable and convert it to list
def disableList = testSuite.getPropertyValue('DISABLE_TESTS')?.split(',')?.collect { it.trim()} ?: []
log.info "List of test for disable: ${disableList}"
//Loop thru the test cases and enable or disable
testSuite.testCaseList.each { kase ->
//If the above list contains test case name disable, enable otherwise
if (disableList && disableList.contains(kase.name)) {
disableTestCase(kase)
} else {
enableTestCase(kase)
}
}
由于某些案例被禁用,最好将所有案例作为测试套件 Teardown
脚本的一部分启用。它看起来几乎一样,但不会有任何条件。
/**
* Test Suite Teardown Script
* Which enables all the test cases after selective execution
**/
//Enables a Test case
def enableTestCase(testCaze) {
log.info "Enabling test case : ${testCaze.name}"
testCaze.disabled = false
}
//Loop thru the test cases and enable
testSuite.testCaseList.each { kase ->
enableTestCase(kase)
}
我想根据某些测试套件属性的值禁用某些测试用例(即,如果 属性 IsActive1 = false,则将禁用 testcase1)。
我在测试套件设置脚本中使用了这段代码,但出现错误:
def testSuite = context.testCase.testSuite;
def totalTestCases = testSuite.getTestCases().size();
for(n in (0..totalTestCases-1)) {
if(testSuite.getTestCaseAt(n).name == "${#TestSuite#IsActive}"){
testSuite.getTestCaseAt(n).setDisabled(true)
}
}
我该怎么做?
您可以使用 Groovy 脚本来做到这一点。您可以将此脚本放在 testSuite Window 的 Setup script
选项卡中,以便脚本在 testSuite 之前执行], disabling/enabling testCases 取决于属性。
根据您的要求,此脚本可能类似于:
// get property names getting only
// the one which start with "isactive"
def isActiveList = testSuite.getPropertyNames().findAll {
it.toLowerCase().startsWith('isactive')
}
log.info isActiveList
// get testCaseList in order
def testCaseList = testSuite.getTestCaseList()
// for each "isactive" property
// enable or disable the corresponding
// testCase
isActiveList.each{ name ->
// get the value
def isActive = testSuite.getPropertyValue(name).toBoolean()
// get the order from the property name
def testCaseIndex = name.toLowerCase() - 'isactive'
log.info "testCase at index $testCaseIndex will be disabled ${!isActive}"
// get the testCase and enable/disable depend
// on isactive property
// NOTE: IsActive1 corresponds to array pos 0
// so a -1 is necessary
log.info testCaseList[testCaseIndex.toInteger()-1]?.disabled = !isActive
}
也许最好将基于 testCase 名称的属性重命名为 enable/disable 而不是使用数字;如果您更改 testCase 顺序或添加新顺序,以避免出现不良行为...
希望对您有所帮助,
以下是我将如何实现这一目标。
- 假设有一个带有测试用例的套件,即
TestCase1, TestCase2, TestCase3, TestCase4, TestCase5
。使用这种方法,只需更改 属性 值即可包含或排除要禁用的测试用例名称。我相信从一个地方(单个 属性)改变事情会更好,而不是为每个测试用例改变IsActive
属性。如果您有更多案例要处理,这将是一个负担(针对每个案例并为 IsActive 修改 true 或 false) - 在测试套件级别创建自定义 属性,例如
DISABLE_TESTS
的值(逗号分隔列表禁用)为TestCase1, TestCase5
这是套件级别的 Setup Script
,可以实现选择性地执行测试用例。
/**
* Test Suite Setup Script
* Enable or disable selected list of test cases
* Based on the test suite property DISABLE_TESTS value
**/
//Disables a Test case
def disableTestCase(testCaze) {
log.info "Disabling test case : ${testCaze.name}"
testCaze.disabled = true
}
//Enables a Test case
def enableTestCase(testCaze) {
log.info "Enabling test case : ${testCaze.name}"
testCaze.disabled = false
}
//Read the test case names to enable and convert it to list
def disableList = testSuite.getPropertyValue('DISABLE_TESTS')?.split(',')?.collect { it.trim()} ?: []
log.info "List of test for disable: ${disableList}"
//Loop thru the test cases and enable or disable
testSuite.testCaseList.each { kase ->
//If the above list contains test case name disable, enable otherwise
if (disableList && disableList.contains(kase.name)) {
disableTestCase(kase)
} else {
enableTestCase(kase)
}
}
由于某些案例被禁用,最好将所有案例作为测试套件 Teardown
脚本的一部分启用。它看起来几乎一样,但不会有任何条件。
/**
* Test Suite Teardown Script
* Which enables all the test cases after selective execution
**/
//Enables a Test case
def enableTestCase(testCaze) {
log.info "Enabling test case : ${testCaze.name}"
testCaze.disabled = false
}
//Loop thru the test cases and enable
testSuite.testCaseList.each { kase ->
enableTestCase(kase)
}