[英]Python 2.7 IndexError: list index out of range, converting file
我有一個將 Jmeter JTL FILE 轉換為 CSV 的代碼,但是當我運行代碼時,出現以下錯誤:IndexError: list index out of range in line 32
這是代碼
import sys
import re
import datetime
import time
startTime = time.time()
cnt = 0
cnt2 = 0
failCnt = 0
reCompile = re.compile("\s([^\s]*?)=\"(.*?)\"")
delimiterCharacterOut = ","
def writeCSVLine(line):
x = reCompile.findall(line)
a = dict((row[0], row[1]) for row in x)
try:
a['ts1'] = str(int(int(a['ts'])/1000))
x = str(datetime.datetime.fromtimestamp(float(a['ts1'])))[0:19]
b = a['ts'] + ",\"" + x + "\"," + a['t'] + "," + a['lt'] + ",\"" + a['s'] + "\",\"" + a['lb'] + "\"," + a['rc'] + ",\"" + a['rm'] + "\",\"" + a['tn'] + "\",\"" + a['dt'] + "\"," + a['by'] + ",\"" + a['sc'] + "\"," + a['ec'] + ",\"" + a['ng'] + "\"," + a['na'] + ",\"" + a['hn'] + "\"," + a['in'] + "\n"
except:
return -1
o.write(b)
return 1
print "Splitting JTL file"
try:
runArgv = sys.argv #Save the command line
jtlInfile = str(sys.argv[1]) #Name of JTL input file
cvsOutfile = str(sys.argv[2]) # Name of CVS output file
reFilter = str(sys.argv[3]) # Filter the labels (lb) for the filter
except:
print "Error: Input format: <input file> <output file> <Filter by regular expression>"
raise
try:
f = open(jtlInfile, "r")
o = open(cvsOutfile, "w")
except:
raise
print "Filtering on regular expression : " + reFilter
cmpFilter = re.compile(reFilter)
# o.write("timestamp" + ",\""+ "datetime" + "\n")
o.write("timeStamp" + ",\"" + "datetime" + "\"," + "elapsed" + "," + "Latency" + ",\"" + "success" + "\",\"" + "label" + "\"," + "responseCode" + ",\"" + "responseMessage" + "\",\"" + "threadName"+ "\",\"" + "dataType" + "\"," + "bytes" + ",\"" + "SampleCount" + "\"," + "ErrorCount" + ",\"" + "grpThreads" + "\"," + "allThreads" + ",\"" + "Hostname" + "\"," + "IdleTime" + "\n")
for line in f:
try:
if cmpFilter.search(line):
returnVal = writeCSVLine(line)
if returnVal<0:
failCnt += 1
else:
cnt2 += 1
except:
print 'Error in line : ', cnt, line
raise
cnt += 1
endTime = time.time()
print "Time taken : ", str(endTime-startTime)
print "Lines processed : ", cnt
print "Lines that passed the filter : ", cnt2
print "Lines skipped (error?) : ", failCnt
f.close()
o.close()
基礎教程在: http : //balasoftwaretesting.blogspot.com/2012/03/converting-jmeter-jtl-file-to-csv-file.html?spref=bl
從sys.argv
文檔中, sys.argv
是傳遞給 Python 腳本的命令行參數列表。
您的命令行日志顯示您運行了python JtltoCsv_Jmeter.py
,這將導致sys.argv
為空列表。 本教程提供了一個JtltoCsv_Jmeter.py
文件作為JtltoCsv_Jmeter.py
的參數:
JtltoCsv_Jmeter.py C:\JtlToCsvConverter\input\sample.jtl
所以看起來可能是復制/粘貼錯誤:)
查看腳本,您需要傳遞 3 個命令行參數:
所以你需要像這樣執行腳本:
JtltoCsv_Jmeter.py example.jtl example.csv "(.*)"
還有一個選項可以將 JMeter 的結果輸出格式切換為 CSV,為此,請使用以下步驟之一:
jmeter.save.saveservice.output_format=csv
行添加到user.properties文件(位於 JMeter 安裝的 /bin 文件夾下)通過 -J 命令行參數傳遞屬性值:
jmeter -Jjmeter.save.saveservice.output_format=csv
有關 JMeter 屬性以及傳遞、設置和覆蓋它們的方法的更多信息,請參閱Apache JMeter 屬性自定義指南。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.