2015-11-28 2 views
-1

У меня есть код для преобразования Jmeter JTL FILE TO CSV, но когда я запускаю код, у меня есть следующая ошибка: IndexError: индекс индекса вне диапазона в строке 32Python 2.7 IndexError: индекс индекса за пределами диапазона, конвертирующий файл

Это код

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() 

Log de CMD

базовый учебник в: http://balasoftwaretesting.blogspot.com/2012/03/converting-jmeter-jtl-file-to-csv-file.html?spref=bl

+0

Пожалуйста, сообщите нам, где ошибка. Есть ли более простой пример, показывающий ошибку? – tdelaney

+0

Ой, подождите ... было в этом jpeg. Включение ошибки в вопрос может помочь. Ваша проблема связана с 'jtlInfile = str (sys.argv [1])'. Это означает, что вы не вызывали программу с ожидаемыми параметрами. – tdelaney

ответ

0

Глядя в сценарий, вам нужно пройти 3 аргументы командной строки:

  1. Источник ДжейТиЭл файл
  2. Target CSV файл
  3. выражение фильтра Regular

Таким образом, вы должны выполнить сценарий, как:

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

Также имеется возможность переключения вывода результатов формата JMeter, чтобы CSV, для того, чтобы сделать это использовать один из следующих шагов:

  1. Добавить jmeter.save.saveservice.output_format=csv строки user.properties файла (живет под/бен папкой установки JMeter)
  2. Передайте значение свойства с помощью -j параметра командной строки, как:

    jmeter -Jjmeter.save.saveservice.output_format=csv 
    

См Apache JMeter Properties Customization Guide для получения дополнительной информации о свойствах JMeter и пути прохождения, установка и перекрывая их.

0

от sys.argv docs, sys.argv - это список аргументов командной строки, переданных скрипту Python.

Ваш журнал командной строки показывает, что вы запустили python JtltoCsv_Jmeter.py, что приведет к пустующему списку для sys.argv. Учебник содержит ДжейТиЭла файл в качестве аргумента в JtltoCsv_Jmeter.py:

JtltoCsv_Jmeter.py C:\JtlToCsvConverter\input\sample.jtl 

Так он выглядит, может быть ошибка в копировании/вставке :)

+0

Хороший ответ, кроме 'argv', не будет пустым ...' argv [0] 'будет иметь имя скрипта, а OP нужно 3 параметра. – tdelaney

+0

Но я использую Runme.bat –

Смежные вопросы