Groovy 从Soapui中的testsuite属性中排除测试用例

Groovy 从Soapui中的testsuite属性中排除测试用例,groovy,soapui,Groovy,Soapui,我想根据一些测试套件属性的值禁用某些测试用例(即,如果属性IsActive1=false,那么testcase1将被禁用) 我在测试套件设置脚本中使用了此代码,但出现错误: def testSuite=context.testCase.testSuite; def totalTestCases=testSuite.getTestCases().size(); 对于(0..totalTestCases-1)中的(n){ if(testSuite.getTestCaseAt(n.name==“${{

我想根据一些测试套件属性的值禁用某些测试用例(即,如果属性IsActive1=false,那么testcase1将被禁用)

我在测试套件设置脚本中使用了此代码,但出现错误:

def testSuite=context.testCase.testSuite;
def totalTestCases=testSuite.getTestCases().size();
对于(0..totalTestCases-1)中的(n){
if(testSuite.getTestCaseAt(n.name==“${{testSuite}IsActive}”){
testSuite.getTestCaseAt(n).setDisabled(true)
}
}
我怎样才能做到这一点呢?

您可以使用Groovy脚本来做到这一点。您可以将此脚本放置在testSuite窗口的
设置脚本
选项卡中,以便在testSuite之前执行脚本,根据属性禁用/启用测试用例

根据您的要求,此脚本可能类似于:

// 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名称重命名属性以启用/禁用,而不是使用数字;为了避免在您更改测试用例顺序或添加新的测试用例顺序时出现不希望出现的行为


希望能有所帮助,

以下是我将如何实现这一目标

  • 假设有一个包含测试用例的套件,即
    TestCase1、TestCase2、TestCase3、TestCase4、TestCase5
    。使用这种方法,只需简单地更改属性值,即可包含或排除要禁用的测试用例名称。我认为最好从一个地方(单个属性)更改内容,而不是为每个测试用例更改
    IsActive
    属性。如果您有更多的案例需要处理,这将是一个负担(转到每个案例并修改IsActive的true或false)
  • 在测试套件级别创建一个自定义属性,例如
    DISABLE\u TESTS
    ,其值(要禁用的逗号分隔列表)为
    TestCase1、TestCase5
下面是套件级别的
设置脚本
,可以实现选择性地执行测试用例

/**
*测试套件安装脚本
*启用或禁用选定的测试用例列表
*基于测试套件属性禁用\u测试值
**/
//禁用测试用例
def禁用测试用例(testCaze){
log.info“禁用测试用例:${testCaze.name}”
testCaze.disabled=true
}
//启用测试用例
def启用测试用例(testCaze){
log.info“启用测试用例:${testCaze.name}”
testCaze.disabled=false
}
//读取测试用例名称以启用并将其转换为列表
def disableList=testSuite.getPropertyValue('DISABLE_TESTS')?.split(',')?.collect{it.trim()}?:[]
log.info“禁用测试列表:${disableList}”
//循环测试用例并启用或禁用
testSuite.testCaseList.each{kase->
//如果上面的列表包含测试用例名称disable,则启用其他名称
if(disableList&&disableList.contains(kase.name)){
禁用测试用例(kase)
}否则{
enableTestCase(kase)
}
}
由于某些案例已禁用,因此最好将所有案例作为测试套件
拆卸
脚本的一部分启用。它看起来基本相同,但不会有任何条件

/**
*测试套件拆卸脚本
*这将启用选择性执行后的所有测试用例
**/
//启用测试用例
def启用测试用例(testCaze){
log.info“启用测试用例:${testCaze.name}”
testCaze.disabled=false
}
//循环测试用例并启用
testSuite.testCaseList.each{kase->
enableTestCase(kase)
}

您能详细说明一下您的用例吗?您的意思是基于某种条件禁用测试用例吗?是的,我想在测试套件自定义属性中添加一个属性,并将其称为例如IsActive with value true或false如果IsActive value为true,则将启用测试用例如果该值为false,则将禁用测试用例,并且我的测试套件至少包含5个测试用例,你知道如何处理吗?你想要任何特定的测试用例列表来启用或禁用吗?您可以编写测试套件安装脚本。我尝试过这样做,但始终不起作用。我只想导入测试套件自定义属性文件,并根据IsActive的值启用或禁用测试用例。我在测试套件安装脚本中使用了此代码,但出现错误:def testSuite=context.testCase.testSuite;def totalTestCases=testSuite.getTestCases().size();对于(0..totalTestCases-1中的n)){if(testSuite.getTestCaseAt(n).name=“${{testSuite#IsActive}”)testSuite.getTestCaseAt(n).setDisabled(true)}@MarwaAbdelgawad很高兴能帮助你
:)
@Rao oouchh。。。你赢了
@albciff,你真是太棒了,很有运动精神,而且总是乐于助人。也许我得到了分数,但你赢了我。我相信Marwa不能接受两个,否则她会这么做的。:)@饶哈哈哈。。。你让我脸红了,兄弟。
:)。不要担心接受度,这是“游戏”的一部分@albciff我真的尝试接受两种解决方案,但我只能接受一种,但真的非常感谢你们的支持,你们两位,已经将两种解决方案都保存在我的库中了