2016-08-29 7 views
1

Webサービスの自動化に問題があります。SOAPUIを使用した複数のテストケースのループテストステップ

実際に私は必要なすべての入力および出力を含むExcelシートを持っています。

私は出力を取得し、Excelの出力でそれらを比較、クエリを実行し、プロパティに保存、入力を取得Groovyのスクリプトを書きました。

私の問題は、すべてのプロセスが1つのテストケースとして実行されることです。

私はExcelシートのすべての行がテストケースとして扱われているように、私のプロセスを「ヒモ」にしたいです。

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

はい、あなたがコードを提供すれば ':'を助けやすくなります。 – albciff

+0

@albciffコードが追加されました! thx :) –

+0

このコードは特定の* testCase *内で実行され、常に* testStep *を取得するのではなく、* testSuite *の次の* testCase *を各行に渡します: 'testRunner.testCase.testSteps [ ExecuteQuery '] '現在の* testCase *から? – albciff

答えて

0

は、あなたの代わりに現在ののTestCaseたびに動作を行う、あなたのデータシートの行ごとに現在のテストスイートから次のTestCaseを取得したいようです。私はこれがあなたの目標であることはよく分からないが、あなたはテストスイート現在からすべてのテストケースを収集し、各行ごとに次のいずれかを選択することができ、このようなものは、トリックを行うことができます。

// 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) 
    ... 
} 

希望すれば、

関連する問題