プロパティとその値をsoapUIから読み取り、Excelに書き込みます。
一意のプロパティ名をExcelに書き込むことができます
def oExcel = new ActiveXObject('Excel.Application')
Thread.sleep(1000)
assert oExcel != null, "Excel object not initalized"
def openWb = oExcel.Workbooks.Open(excelPath) //excelPath complete path to the excel
def dtUsedRange = openWb.Sheets(dataSheetName).UsedRange //dataSheetName is the name of teh sheet which will ultimately hold the data
//add property names to xlMapSheet under col d or col# 4
for(int r = 1;r<=uniqPropName.size().toInteger();r++){ //uniqPropName is a list that holds all the unique property names in a test suite
openWb.Sheets(xlMapSheet).Cells(r,4).Value = uniqPropName[r-1]
}
oExcel.DisplayAlerts = false
openWb.Save
oExcel.DisplayAlerts = true
openWb.Close(false,null,false)
oExcel.Quit()
Scriptom.releaseApartment()
ただし、すべてのプロパティを同じ Excel に書き込む必要があります。Excel の列名と soapUI プロパティのマップを既に作成しているので、マップから一致する Excel の列名を見つけて、その Excel の下にプロパティ値を書き込むだけです。
私はこのようなことをするために関数を使用しています。この関数は、テスト ケース内のすべてのプロパティをループする for ループ内から呼び出されます。この関数に渡します
sheetName //sheet where data has to be written
sheet //path of the excel file
pName //property name
pValue //property value
xMap //excel col name/heading map
tName //test case name
tsNum //step number
この関数に関連するコードは次のとおりです。
def write2Excel(sheetName,sheet,pName,pValue,xMap,tName,tsNum){
//find the xl Col Name from the map
def xl = new ActiveXObject('Excel.Application')
assert xl != null, "Excel object not initalized"
//open excel
def wb = xl.Workbooks.Open(sheet)
def rng = wb.Sheets(sheetName).UsedRange
//get row count
int iColumn = rng.Columns.Count.toInteger()
int iRow = rng.Rows.Count.toInteger()
//find column number using the col name
//find the row with matching testcase name and step#
//write data to excel
if(rFound){ //if a row matching test case name and step number is found
rng.Cells(r,colId).Value = pValue
}else{
rng = rng.Resize(r+1,iColumn) //if the testcase and step# row doesn't exist then the current range has to be extended to add one more row of data.
rng.Cells(r+1,colId).Value = pValue
}
//save and close
xl.DisplayAlerts = false
wb.Save
xl.DisplayAlerts = true
wb.Close(false,null,false)
xl.Quit()
Scriptom.releaseApartment()
}
コードは現在実行中です。昨日の夕方 (東部標準時の午後 2 時) から実行されているため、コードが機能しても最適ではありません。データを書き込むのにこれほど長く待つことはできません。
興味深いのは、Excel のサイズが大きくなり続けていることです。これは、データが Excel に書き込まれていることを意味しますが、Excel を確認したところ、新しいデータはありません..何もありません..zilch!!
ファイルのサイズが増加している証拠。
20/02/2014 04:23 PM 466,432 my_excel_file.xls
20/02/2014 04:23 PM 466,944 my_excel_file.xls
20/02/2014 04:38 PM 470,016 my_excel_file.xls
20/02/2014 04:45 PM 471,552 my_excel_file.xls
20/02/2014 04:47 PM 472,064 my_excel_file.xls
20/02/2014 05:01 PM 474,112 my_excel_file.xls
20/02/2014 05:01 PM 474,112 my_excel_file.xls
21/02/2014 07:23 AM 607,232 my_excel_file.xls
21/02/2014 07:32 AM 608,768 my_excel_file.xls
21/02/2014 07:50 AM 611,328 my_excel_file.xls
私の質問は次のとおり
です。1. for ループ内から関数を呼び出しているときにデータが書き込まれないのに、線形的に呼び出すと書き込まれるのはなぜですか?
2. コードの最初の部分では、書き込みが完了すると Excel プロセスが消えますが、関数が実行されると、メモリ使用率が上下しても Excel プロセスは残ります。
Excelプロセスを強制終了し、ループする代わりに、関数を使用して1つまたは2つのデータセットのみを書き込み、それに応じてこの質問を更新します.