我在自动化网络服务时遇到了一些问题。
实际上我有一张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()
谢谢!
答案 0 :(得分:0)
似乎您希望从数据表中的每一行获取当前 testSuite 的下一个 testCase ,而不是在当前 testCase中执行操作< / em>每次。我不确定这是你的目标,但你可以从当前的 testSuite 中收集所有 testCases 并为每一行选择下一个 testCases ,就像这样可以做到这一点:
// 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 )
...
}
希望它有所帮助,