簡體   English   中英

Python 2.7 IndexError:列表索引超出范圍,轉換文件

[英]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()

登錄 CMD

基礎教程在: 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 個命令行參數:

  1. 源 JTL 文件
  2. 目標 CSV 文件
  3. 正則表達式過濾器

所以你需要像這樣執行腳本:

JtltoCsv_Jmeter.py example.jtl example.csv "(.*)"

還有一個選項可以將 JMeter 的結果輸出格式切換為 CSV,為此,請使用以下步驟之一:

  1. jmeter.save.saveservice.output_format=csv行添加到user.properties文件(位於 JMeter 安裝的 /bin 文件夾下)
  2. 通過 -J 命令行參數傳遞屬性值:

     jmeter -Jjmeter.save.saveservice.output_format=csv

有關 JMeter 屬性以及傳遞、設置和覆蓋它們的方法的更多信息,請參閱Apache JMeter 屬性自定義指南

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM