2015-10-14 1 views
0

J'utilise le test de performance de script JDBC.py. journal meuleuse info:Erreur de script de test JDBC de Grinder "Le résultat de 'TestRunner()' n'est pas appelable"

2015-10-14 18: 42: 40132 erreur com-0-fil 24: fil abandon - {} Le résultat de 'TestRunner()' est pas appelable net.grinder.scriptengine .jython.JythonScriptExecutionException: Le résultat de 'TestRunner()' n'est pas appelable at net.grinder.scriptengine.jython.JythonScriptEngine.createWorkerRunnable (JythonScriptEngine.java:183) ~ [grinder-core-3.11.jar: na] à net.grinder.engine.process.GrinderProcess $ ThreadStarterImplementation $ 2.create (GrinderProcess.java:784) ~ [grinder-core-3.11.jar: na] sur net.grinder.engine.process.GrinderThread.run (GrinderThread.java : 90) ~ [grinder-core-3.11.jar: na] à java.lang.Thread.run (Thread.java:744) [na: 1.7 .0_45] 2015-10-14 18: 42: 40,132 ERREUR com-0 thread-3: abandonner thread - {} Le résultat de 'TestRunner()' n'est pas appelable net.grinder.scriptengine.jython.JythonScriptExecutionException: Le le résultat de 'TestRunner()' n'est pas appelable at net.grinder.scriptengine.jython.JythonScriptEngine.createWorkerRunnable (JythonScriptEngine.java:183) ~ [grinder-core-3.11.jar: na] sur net.grinder.engine. process.GrinderProcess $ ThreadStarterImplementation $ 2.create (GrinderProcess.java:784) ~ [meuleuse-core-3.11.jar: na] à net.grinder.engine.process.GrinderThread.run (GrinderThread.java:90) ~ [meuleuse core-3.11.jar: na] à java.lang.Thread.run (Thread.java:744) [na: 1.7.0_45]

Je modifie le script, mais toujours l'erreur. S'il vous plaît aider à vérifier.

I script de test:

# The sorting tes supports a configurable array length. 
# It runs the JavaTest.sort method of the JavaTest class. 

from net.grinder.script.Grinder import grinder 
from net.grinder.script import Test 
from datetime import datetime 
from datetime import timedelta 
from java.sql import DriverManager 
from oracle.jdbc import OracleDriver 

######################################## 
# 
# main body of test script starts here 
# 
######################################## 

# Get the propeties to access test configuration information 
properties = grinder.getProperties() 

# The description is a property (instead of a hardcoded string in this script) 
#test = Test(1, properties.get("javatest.description")) 
test = Test(2, properties.get("javatest.description")) 

# select the method for which to collect information 
# test.record(WriteMulitpleLittleFile.write) 

# initialize data for compressing 
# fileName = properties.get("javatest.fileToCompress") 
# grinder.logger.info("data file to compress is " + fileName) 
# JavaTest.initializeCompression(fileName) 

# If the run mode is runOnce, the TestRunner class will 
# run once. Otherwise, if the run mode is continuous, 
# the TestRunner class will run the test for at least 
# the specified duration (but possibly longer) 
runMode = properties.get("javatest.runMode") 
#WriteMulitpleLittleFile.setParameters(dir, fileSize...) 
if runMode == "continuous": 
    # figure out how long to run the test 
    m = int(properties.getProperty("javatest.durationMinutes", "0")) 
    h = int(properties.getProperty("javatest.durationHours", "0")) 
    d = int(properties.getProperty("javatest.durationDays", "0")) 
    duration = timedelta(minutes=m,hours=h,days=d) 
    grinder.logger.info("run mode is continuous, duration is " + str(duration)) 
elif runMode == "runOnce": 
    grinder.logger.info("run mode is run once") 
    duration = timedelta(minutes=0) 
else: 
    grinder.logger.info("run mode not set or not recongized, default to run once") 
    duration = timedelta(minutes=0) 

######################################## 
# 
# The TestRunner class is used by The Grinder to perform the test 
# 
######################################## 

#test1 = Test(1, "Database insert") 
test2 = Test(2, "Database query") 

# Load the Oracle JDBC driver. 
DriverManager.registerDriver(OracleDriver()) 

def getConnection(): 
    return DriverManager.getConnection(
     "jdbc:oracle:thin:@den00bvr.us.oracle.com:1521:orcl", "PBPUBLIC", "PBPUBLIC") 

def ensureClosed(object): 
    try: object.close() 
    except: pass 

# One time initialisation that cleans out old data. 
connection = getConnection() 
statement = connection.createStatement() 

#try: statement.execute("drop table grinder_test1126") 
#except: pass 

#statement.execute("create table grinder_test1126(thread number, run number)") 

ensureClosed(statement) 
ensureClosed(connection) 

class TestRunner: 
    def __init__(self): 
#  tid = grinder.threadNumber 

#  if (grinder.threadNumber % 2 == 0): 
#    Even threadNumber 
#    Do insertStatement 
#  else: 
#    Odd threadNumber 
#    Do queryStatement 

# def __call__(self): 
#  self.testRunner() 

     endTime = datetime.now() + duration 
     notDone = True 
     while notDone: 
     connection = None 
     insertStatement = None 
     queryStatement = None 
     notDone = datetime.now() < endTime 

     try: 
      connection = getConnection() 
#   insertStatement = connection.createStatement() 
      queryStatement = connection.createStatement() 

#   test1.record(insertStatement) 
#   insertStatement.execute("insert into grinder_test1126 values(%d, %d)" % 
#         (grinder.threadNumber, grinder.runNumber)) 

      test2.record(queryStatement) 
      queryStatement.execute("select * from employee") 

     finally: 
#   ensureClosed(insertStatement) 
      ensureClosed(queryStatement) 
      ensureClosed(connection) 

Répondre

0

Selon la documentation,

L'instance TestRunner doit être appelable

Un objet Python est appelable si elle définit une méthode d'appel. Chaque thread de travail exécute un certain nombre d'exécutions du script de test, comme configuré par la propriété grinder.runs. Pour chaque exécution, le thread de travail appelle son TestRunner; ainsi, la méthode appel peut être considérée comme comme la définition d'un cycle.

Votre script nécessite une fonction d'appel pour être classé comme appelable.