2010-11-19 19 views
0

渴望聽到關於如何實現這一點的反饋A)不那麼難看B)堅持至少一些基本的編碼原則!我使用的是SOAPUI,因此對屬性的任何引用都意味着某些內容正在存儲在測試用例屬性步驟中。Groovy代碼通過GET請求和計數節點進行循環

我想使用字典,但我失去了應該從哪裏開始。我只知道下面的if語句是針對一些非常醜陋和容易出錯的代碼。

所有的建議,但重要的是歡迎。我渴望改善!

import java.text.* 
    import java.util.* 

    def xmlSlurper = new groovy.util.XmlSlurper() 

    // Get the previous total for number of journals 
    def journalCountProp = testRunner.testCase.getTestStepByName("Properties") 
    def journalCountTotal = journalCountProp.getPropertyValue("journalCount") 
    log.info " Previous JournalCount from last run: "+journalCountTotal 

    def lastOffsetProp = testRunner.testCase.getTestStepByName("Properties") 
    def lastOffsetHolder = lastOffsetProp.getPropertyValue("offset") 
    log.info " Previous offset from last run: "+lastOffsetHolder 

    // Get the response for a given timeline 
    def response = xmlSlurper.parseText(context.expand('${GET Journal using Offset#Response}')); 
    def currentJournalCount = response.Journals.Journal.size() 
    log.info " Number of Journals in this Run: "+currentJournalCount 

    //Getting the date from the last Journal (including an offset as the array count starts at 0) 
    def lastDate = response.Journals.Journal[currentJournalCount-1].JournalDate 
    log.info " Date from this response: "+lastDate 

    //Add up the Journals total for a given date. 
    journalCountProp.setPropertyValue("journalQueryDate", String.valueOf(lastDate)) 

    def countJournalAsInt 
    def offsetCountAsInt 

    def accTypeBank = context.expand('${Properties#accTypeBankProp}').toInteger() 
    //log.info "AccountType - BANK : "+accTypeBank 
    def accTypeBankProp = testRunner.testCase.getTestStepByName("Properties") 
    def accTypeBankTotal = accTypeBankProp.getPropertyValue("accTypeBankProp") 

    def accTypeCURRENT = context.expand('${Properties#accTypeCURRENTProp}').toInteger() 
    //log.info "AccountType - Current : "+accTypeCURRENT 
    def accTypeCURRENTProp = testRunner.testCase.getTestStepByName("Properties") 
    def accTypeCURRENTTotal = accTypeCURRENTProp.getPropertyValue("accTypeCURRENTProp") 

    def accTypeCURRLIAB = context.expand('${Properties#accTypeCURRLIABProp}').toInteger() 
    //log.info "AccountType - CURRLIAB : "+accTypeCURRLIAB 
    def accTypeCURRLIABProp = testRunner.testCase.getTestStepByName("Properties") 
    def accTypeCURRLIABTotal = accTypeCURRLIABProp.getPropertyValue("accTypeCURRLIABProp") 

    def accTypeDEPRECIATN = context.expand('${Properties#accTypeCURRLIABProp}').toInteger() 
    //log.info "AccountType - DEPRECIATN : "+accTypeDEPRECIATN 
    def accTypeDEPRECIATNProp = testRunner.testCase.getTestStepByName("Properties") 
    def accTypeDEPRECIATNTotal = accTypeDEPRECIATNProp.getPropertyValue("accTypeDEPRECIATNProp") 

    def accTypeDIRECTCOSTS = context.expand('${Properties#accTypeCURRLIABProp}').toInteger() 
    //log.info "AccountType - DIRECTCOSTS : "+accTypeDIRECTCOSTS 
    def accTypeDIRECTCOSTSProp = testRunner.testCase.getTestStepByName("Properties") 
    def accTypeDIRECTCOSTSTotal = accTypeDIRECTCOSTSProp.getPropertyValue("accTypeDIRECTCOSTSProp") 

    def accTypeEQUITY = context.expand('${Properties#accTypeEQUITYProp}').toInteger() 
    //log.info "AccountType - EQUITY : "+accTypeEQUITY 
    def accTypeEQUITYProp = testRunner.testCase.getTestStepByName("Properties") 
    def accTypeEQUITYTotal = accTypeEQUITYProp.getPropertyValue("accTypeEQUITYProp") 

    def accTypeEXPENSE = context.expand('${Properties#accTypeEXPENSEProp}').toInteger() 
    //log.info "AccountType - EXPENSE : "+accTypeEXPENSE 
    def accTypeEXPENSEProp = testRunner.testCase.getTestStepByName("Properties") 
    def accTypeEXPENSETotal = accTypeEXPENSEProp.getPropertyValue("accTypeCURRLIABProp") 

    def accTypeFIXED = context.expand('${Properties#accTypeFIXEDProp}').toInteger() 
    //log.info "AccountType - FIXED : "+accTypeFIXED 
    def accTypeFIXEDProp = testRunner.testCase.getTestStepByName("Properties") 
    def accTypeFIXEDTotal = accTypeFIXEDProp.getPropertyValue("accTypeFIXEDProp") 

    def accTypeLIABILITY = context.expand('${Properties#accTypeLIABILITYProp}').toInteger() 
    //log.info "AccountType - LIABILITY : "+accTypeLIABILITY 
    def accTypeLIABILITYProp = testRunner.testCase.getTestStepByName("Properties") 
    def accTypeLIABILITYTotal = accTypeLIABILITYProp.getPropertyValue("accTypeLIABILITYProp") 

    def accTypeOTHERINCOME = context.expand('${Properties#accTypeOTHERINCOMEProp}').toInteger() 
    //log.info "AccountType - OTHERINCOME : "+accTypeOTHERINCOME 
    def accTypeOTHERINCOMEProp = testRunner.testCase.getTestStepByName("Properties") 
    def accTypeOTHERINCOMETotal = accTypeOTHERINCOMEProp.getPropertyValue("accTypeOTHERINCOMEProp") 

    def accTypeOVERHEADS = context.expand('${Properties#accTypeOVERHEADSProp}').toInteger() 
    //log.info "AccountType - OVERHEADS : "+accTypeOVERHEADS 
    def accTypeOVERHEADSProp = testRunner.testCase.getTestStepByName("Properties") 
    def accTypeOVERHEADSTotal = accTypeOVERHEADSProp.getPropertyValue("accTypeOVERHEADSProp") 

    def accTypeREVENUE = context.expand('${Properties#accTypeREVENUEProp}').toInteger() 
    //log.info "AccountType - REVENUE : "+accTypeREVENUE 
    def accTypeREVENUEProp = testRunner.testCase.getTestStepByName("Properties") 
    def accTypeREVENUETotal = accTypeREVENUEProp.getPropertyValue("accTypeREVENUEProp") 

    def accTypeSALES = context.expand('${Properties#accTypeSALESProp}').toInteger() 
    //log.info "AccountType - SALES : "+accTypeSALES 
    def accTypeSALESProp = testRunner.testCase.getTestStepByName("Properties") 
    def accTypeSALESTotal = accTypeSALESProp.getPropertyValue("accTypeSALESProp") 

    def accTypeTERMLIAB = context.expand('${Properties#accTypeTERMLIABProp}').toInteger() 
    //log.info "AccountType - TERMLIAB : "+accTypeTERMLIAB 
    def accTypeTERMLIABProp = testRunner.testCase.getTestStepByName("Properties") 
    def accTypeTERMLIABTotal = accTypeTERMLIABProp.getPropertyValue("accTypeTERMLIABProp") 

    def journalLineItems = response.Journals.Journal.JournalLines 

    if(currentJournalCount < 100) 
     { 
     log.info " Nothing to see here - looks like we've reached the end of the journals" 
     //add existing total to current response total 
     log.info " JournalCount: "+(journalCountTotal.toInteger() + currentJournalCount.toInteger()) 
     offsetCountAsInt =journalCountTotal.toInteger() + currentJournalCount.toInteger() 
     journalCountProp.setPropertyValue("journalCount",String.valueOf(offsetCountAsInt)) 


     for (lineItem in journalLineItems.JournalLine) 
     { 
      log.info "NOTE: From <100 Loop: "+lineItem.AccountType 
      if (lineItem.AccountType == 'BANK') 
      {   
       accTypeBank++ 
       accTypeBankProp.setPropertyValue("accTypeBankProp",String.valueOf(accTypeBank)) 
       } 
      if (lineItem.AccountType == 'CURRENT') 
      { 
       accTypeCURRENT++  
       accTypeCURRENTProp.setPropertyValue("accTypeCURRENTProp",String.valueOf(accTypeCURRENT))   
       } 
      if (lineItem.AccountType == 'CURRLIAB') 
      { accTypeCURRLIAB++ 
       accTypeCURRLIABProp.setPropertyValue("accTypeCURRLIABProp",String.valueOf(accTypeCURRENT)) 
       } 
      if (lineItem.AccountType == 'DEPRECIATN') 
      {   
       accTypeDEPRECIATN++ 
       accTypeDEPRECIATNProp.setPropertyValue("accTypeDEPRECIATNProp",String.valueOf(accTypeDEPRECIATN)) 
       } 
      if (lineItem.AccountType == 'DIRECTCOSTS') 
      {   
       accTypeDIRECTCOSTS++ 
       accTypeDEPRECIATNProp.setPropertyValue("accTypeDIRECTCOSTSProp",String.valueOf(accTypeDIRECTCOSTS)) 
      } 
      if (lineItem.AccountType == 'EQUITY') 
      {   
       accTypeEQUITY++ 
       accTypeEQUITYProp.setPropertyValue("accTypeEQUITYProp",String.valueOf(accTypeEQUITY)) 
       } 
      if (lineItem.AccountType == 'EXPENSE') 
      {   
       accTypeEXPENSE++ 
       accTypeEXPENSEProp.setPropertyValue("accTypeEXPENSEProp",String.valueOf(accTypeEXPENSE)) 
       } 
      if (lineItem.AccountType == 'FIXED') 
      {   
       accTypeFIXED++ 
       accTypeFIXEDProp.setPropertyValue("accTypeFIXEDProp",String.valueOf(accTypeFIXED)) 
      } 
      if (lineItem.AccountType == 'LIABILITY') 
      {   
       accTypeLIABILITY++ 
       accTypeLIABILITYProp.setPropertyValue("accTypeLIABILITYProp",String.valueOf(accTypeLIABILITY)) 
       } 
      if (lineItem.AccountType == 'OTHERINCOME') 
      {   
       accTypeOTHERINCOME++ 
       accTypeOTHERINCOMEProp.setPropertyValue("accTypeOTHERINCOMEProp",String.valueOf(accTypeOTHERINCOME)) 
       } 
      if (lineItem.AccountType == 'OVERHEADS') 
      {   
       accTypeOVERHEADS++ 
       accTypeOVERHEADSProp.setPropertyValue("accTypeOVERHEADSProp",String.valueOf(accTypeOVERHEADS)) 
      } 
      if (lineItem.AccountType == 'REVENUE') 
      {   
       accTypeREVENUE++ 
       accTypeREVENUEProp.setPropertyValue("accTypeREVENUEProp",String.valueOf(accTypeREVENUE)) 
       } 
      if (lineItem.AccountType == 'SALES') 
      { 
       accTypeSALES++ 
       accTypeSALESProp.setPropertyValue("accTypeSALESProp",String.valueOf(accTypeSALES)) 
       } 
      if (lineItem.AccountType == 'TERMLIAB') 
      {   
       accTypeTERMLIAB++ 
       accTypeTERMLIABProp.setPropertyValue("accTypeTERMLIABProp",String.valueOf(accTypeTERMLIAB)) 
       } 

     } 

     } 
    else 
     { 
     countJournalAsInt = journalCountTotal.toInteger() + currentJournalCount.toInteger() 
     journalCountProp.setPropertyValue("journalCount", String.valueOf(countJournalAsInt)) 

     log.info "last offset "+lastOffsetHolder 
     offsetCountAsInt = lastOffsetHolder.toInteger()+100 

     journalCountProp.setPropertyValue("offset",String.valueOf(offsetCountAsInt)) 

     for (lineItem in journalLineItems.JournalLine) 
     { 
      log.info "NOTE: From main loop: "+lineItem.AccountType 
      if (lineItem.AccountType == 'BANK') 
      {   
       accTypeBank++ 
       accTypeBankProp.setPropertyValue("accTypeBankProp",String.valueOf(accTypeBank)) 
       } 
      if (lineItem.AccountType == 'CURRENT') 
      { 
       accTypeCURRENT++  
       accTypeCURRENTProp.setPropertyValue("accTypeCURRENTProp",String.valueOf(accTypeCURRENT))   
       } 
      if (lineItem.AccountType == 'CURRLIAB') 
      { accTypeCURRLIAB++ 
       accTypeCURRLIABProp.setPropertyValue("accTypeCURRLIABProp",String.valueOf(accTypeCURRENT)) 
       } 
      if (lineItem.AccountType == 'DEPRECIATN') 
      {   
       accTypeDEPRECIATN++ 
       accTypeDEPRECIATNProp.setPropertyValue("accTypeDEPRECIATNProp",String.valueOf(accTypeDEPRECIATN)) 
       } 
      if (lineItem.AccountType == 'DIRECTCOSTS') 
      {   
       accTypeDIRECTCOSTS++ 
       accTypeDEPRECIATNProp.setPropertyValue("accTypeDIRECTCOSTSProp",String.valueOf(accTypeDIRECTCOSTS)) 
      } 
      if (lineItem.AccountType == 'EQUITY') 
      {   
       accTypeEQUITY++ 
       accTypeEQUITYProp.setPropertyValue("accTypeEQUITYProp",String.valueOf(accTypeEQUITY)) 
       } 
      if (lineItem.AccountType == 'EXPENSE') 
      {   
       accTypeEXPENSE++ 
       accTypeEXPENSEProp.setPropertyValue("accTypeEXPENSEProp",String.valueOf(accTypeEXPENSE)) 
       } 
      if (lineItem.AccountType == 'FIXED') 
      {   
       accTypeFIXED++ 
       accTypeFIXEDProp.setPropertyValue("accTypeFIXEDProp",String.valueOf(accTypeFIXED)) 
      } 
      if (lineItem.AccountType == 'LIABILITY') 
      {   
       accTypeLIABILITY++ 
       accTypeLIABILITYProp.setPropertyValue("accTypeLIABILITYProp",String.valueOf(accTypeLIABILITY)) 
       } 
      if (lineItem.AccountType == 'OTHERINCOME') 
      {   
       accTypeOTHERINCOME++ 
       accTypeOTHERINCOMEProp.setPropertyValue("accTypeOTHERINCOMEProp",String.valueOf(accTypeOTHERINCOME)) 
       } 
      if (lineItem.AccountType == 'OVERHEADS') 
      {   
       accTypeOVERHEADS++ 
       accTypeOVERHEADSProp.setPropertyValue("accTypeOVERHEADSProp",String.valueOf(accTypeOVERHEADS)) 
      } 
      if (lineItem.AccountType == 'REVENUE') 
      {   
       accTypeREVENUE++ 
       accTypeREVENUEProp.setPropertyValue("accTypeREVENUEProp",String.valueOf(accTypeREVENUE)) 
       } 
      if (lineItem.AccountType == 'SALES') 
      { 
       accTypeSALES++ 
       accTypeSALESProp.setPropertyValue("accTypeSALESProp",String.valueOf(accTypeSALES)) 
       } 
      if (lineItem.AccountType == 'TERMLIAB') 
      {   
       accTypeTERMLIAB++ 
       accTypeTERMLIABProp.setPropertyValue("accTypeTERMLIABProp",String.valueOf(accTypeTERMLIAB)) 
       } 


     } 


     testRunner.gotoStepByName("GET Journal using Offset") 
     } 

回答

2

一個改進可以做到:

def testRunnerMap = testRunner.testCase.getTestStepByName("Properties").with { 
    // Add all properties you want to get from the testRuner to this array 
    [ 'journalCount', 'offset', 'accTypeBankProp', 'accTypeCURRENTProp' ].collectEntries { prop -> 
    [ "$prop":getPropertyValue(prop) ] 
    } 
} 
+0

感謝蒂姆 - 我給這個一杆。 – 2010-11-20 04:26:58