Groovy脚本来编辑csv文件中的每一行

时间:2019-01-31 12:19:42

标签: csv groovy soapui

我正在编写一个用于SOAP UI的常规脚本,该脚本读取帐号的CSV文件,然后以某种XML使用帐号。我将需要遍历大约5000个帐号,以循环进行SOAP UI测试用例。

由于该帐号只能使用一次,所以我的想法是编辑CSV文件并说该行已被使用,然后向Groovy添加逻辑以使其不再使用该行。

我已经成功读取了CSV文件并对其进行了循环,我的特定问题是我想将CSV的当前行设置为“是”(否则任何变量都可以:)。我可以附加到文件的末尾,但是我需要附加到特定的行(即循环的当前行)。

我已经尝试过诸如inputFile [rowsData] .append(“ Yes”)之类的各种东西,我觉得我已经很近了,但是还不很到位(这是我第一次使用Groovy和CSVs)

def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )  
wrapUp = groovyUtils.getXmlHolder( "WrapUp#Request" ) 
import com.eviware.soapui.support.UISupport
import groovy.io.FileType
import org.apache.commons.io.FileUtils

def csvFilePath = "file.csv"
context.fileReader = new BufferedReader(new FileReader(csvFilePath))
def inputFile = new File("file.csv")
rowsData = context.fileReader.readLines()
int rowsize = rowsData.size()

for(int i =0;  i < rowsize;  i++)
 {
    rowdata = rowsData[i]
    String[] data = rowdata.split(",")

   // if the third column is not yes, we haven't used the data
    if (data[2].toString() != "YES") {
     testRunner.testCase.setPropertyValue("ACCOUNT_NUMBER",data[1])
     testRunner.testCase.setPropertyValue("SORT_CODE",data[0])

     // this inputs to the end of the csv, needs to go to the current row

     inputFile.append("Yes")
break;
}
else
     log.info "OUT OF ACCOUNT NUMBERS"
}

1 个答案:

答案 0 :(得分:0)

您将行读入rowsData数组变量

然后,在迭代rowsData时,只需将YES添加到所需的rowsData元素即可:

for(int i =0;  i < rowsize;  i++)
 {
   ...
   rowsData[i]=rowsData[i]+'YES'
 }

最后,您必须像这样将所有行写回到文件中:

new File(csvFilePath).setText(rowsData.join('\n'), "UTF-8")