Groovy 使用SOAPUI在多个测试用例中循环测试步骤

Groovy 使用SOAPUI在多个测试用例中循环测试步骤,groovy,soapui,Groovy,Soapui,我在自动化web服务方面遇到了一些问题 事实上,我有一个excel表格,包含所有需要的输入和输出 我编写了一个groovy脚本,用于检索输入、将其保存在属性中、执行查询、检索输出并将其与excel输出进行比较 我的问题是,所有流程都作为一个测试用例执行 我想“拉皮条”我的过程,这样我的Excel表格的每一行都作为一个测试用例处理 下面是groovy代码: import jxl.* import jxl.write.* Workbook workbook1 = Workbook.getWorkb

我在自动化web服务方面遇到了一些问题

事实上,我有一个excel表格,包含所有需要的输入和输出

我编写了一个groovy脚本,用于检索输入、将其保存在属性中、执行查询、检索输出并将其与excel输出进行比较

我的问题是,所有流程都作为一个测试用例执行

我想“拉皮条”我的过程,这样我的Excel表格的每一行都作为一个测试用例处理

下面是groovy代码:

import jxl.*
import jxl.write.*

Workbook workbook1 = Workbook.getWorkbook(new File("C:\\Users\\****\\Desktop\\GroovyPSSheet.xls"))
Sheet sheet1 = workbook1.getSheet(0)

for (int i=6; i<sheet1.getRows(); i++)
    {
        sleep 1000
        if (sheet1.getCell(0,i).getContents()=="")
        {
            i++
        }
        Cell clairance = sheet1.getCell(3,i)
        Cell etatpatho = sheet1.getCell(2,i)
        Cell idlReq = sheet1.getCell(1,i)
        Cell idprod = sheet1.getCell(0,i)
        Cell typeprod = sheet1.getCell(4,i)
        testRunner.testCase.setPropertyValue( "clairance", clairance.getContents() )
        testRunner.testCase.setPropertyValue( "etatpatho", etatpatho.getContents() )
        testRunner.testCase.setPropertyValue( "idlReq", idlReq.getContents() )
        testRunner.testCase.setPropertyValue( "idprod", idprod.getContents() )
        testRunner.testCase.setPropertyValue( "typeprod", typeprod.getContents() )
        sleep 500
        def ExecuteQuery = testRunner.testCase.testSteps['ExecuteQuery']
        ExecuteQuery.run( testRunner, context )
        sleep 1000
        groovyUtils = new com.eviware.soapui.support.GroovyUtils(context )
        holder = groovyUtils.getXmlHolder ("ExecuteQuery#Response")

        id_type_alerte = holder.getNodeValue("//id_type_alerte")
        testRunner.testCase.setPropertyValue( "id_type_alerte", sheet1.getCell(5,i).getContents() )

        idproduit = holder.getNodeValue("//idproduit")
        testRunner.testCase.setPropertyValue( "idproduit", sheet1.getCell(6,i).getContents() )


        typeproduit = holder.getNodeValue("//typeproduit")
        testRunner.testCase.setPropertyValue( "typeproduit", sheet1.getCell(7,i).getContents() )

        id_ter_per = holder.getNodeValue("//id_ter_per")
        testRunner.testCase.setPropertyValue( "id_ter_per", sheet1.getCell(8,i).getContents() )

        lib_ter_per = holder.getNodeValue("//lib_ter_per")
        testRunner.testCase.setPropertyValue( "lib_ter_per", sheet1.getCell(9,i).getContents() )

        id_ter_com = holder.getNodeValue("//id_ter_com")
        testRunner.testCase.setPropertyValue( "id_ter_com",sheet1.getCell(10,i).getContents() )

        id_typ_ter = holder.getNodeValue("//id_typ_ter")
        testRunner.testCase.setPropertyValue( "id_typ_ter", sheet1.getCell(11,i).getContents() )

        lib_ter = holder.getNodeValue("//lib_ter")
        testRunner.testCase.setPropertyValue( "lib_ter", sheet1.getCell(12,i).getContents() )

        id_nature_ci = holder.getNodeValue("//id_nature_ci")
        testRunner.testCase.setPropertyValue( "id_nature_ci", sheet1.getCell(13,i).getContents() )

        id_ter = holder.getNodeValue("//id_ter")
        testRunner.testCase.setPropertyValue( "id_ter", sheet1.getCell(14,i).getContents() )

        id_sequence_ter = holder.getNodeValue("//id_sequence_ter")
        testRunner.testCase.setPropertyValue( "id_sequence_ter", sheet1.getCell(15,i).getContents() )

        id_fic_ci = holder.getNodeValue("//id_fic_ci")
        testRunner.testCase.setPropertyValue( "id_fic_ci", sheet1.getCell(16,i).getContents() )
        sleep 1000

    }


workbook1.close()
导入jxl*
导入jxl.write*
工作簿工作簿1=Workbook.getWorkbook(新文件(“C:\\Users\\**\\Desktop\\GroovyPSSheet.xls”))
工作表sheet1=工作簿1.getSheet(0)

对于(int i=6;i似乎您希望从当前测试套件中为数据表中的每一行获取下一个测试用例,而不是每次都在当前测试用例中执行操作。我不确定这是否是您的目标,但您可以从当前测试套件中收集所有测试用例,并为每一行选择下一个测试用例,类似这样的你能做到这一点:

// get all testCases from the current testSuite as List
def allTestCases = testRunner.testCase.testSuite.testCases.collect{ name, testCase ->
    return testCase
}

// row iteration
for (int i=6; i<sheet1.getRows(); i++)
{
     // get a testCase
     def testCase = allTestCases.take(1);
     // drop the element from the list to change next iteration
     allTestCases = allTestCases.drop(1);
     ...
     ...
     // in the rest of your code use the testCase variable from the list
     // instead of using testRunner.testCase which always take the current one
     testCase.setPropertyValue("clairance", clairance.getContents())
     testCase.setPropertyValue("etatpatho", etatpatho.getContents())
     ...
     def ExecuteQuery = testCase.testSteps['ExecuteQuery']
     ExecuteQuery.run( testRunner, context )
     ...
}
//从当前testSuite中获取所有测试用例作为列表
def allTestCases=testRunner.testCase.testSuite.testCases.collect{name,testCase->
返回测试用例
}
//行迭代

对于(int i=6;iyes,如果您提供代码将更容易帮助
:)
@albciff code added!thx:)此代码在特定的测试用例中执行,并且您希望对于每一行,它在测试套件中取下一个测试用例,而不是始终获取此测试步骤:
testRunner.testCase.testSteps['ExecuteQuery']
来自当前测试用例?