2017-02-01 1 views
0

Ich muss eine Liste von HTTP-Anfragen sequentiell ausführen und die Ergebnisse/Statistiken für jede Anfrage sammeln. Eine Map enthält die Startzeit der Anfrage als Schlüssel und das Anfrageobjekt als Wert.JMeter - Wie führe ich eine Liste von HTTP-Anfragen aus und sammle Ergebnisstatistiken

Ich konnte es in drei Schritten:

  1. eine Ergebnismenge beim Aufbau in den Oracle-Tabellen dargestellt mit Anfrage Basis Details
  2. Iterate die Ergebnismenge.

    2a) Holen Sie jeden Datensatz, erstellen Anfrageobjekt mit den Details und erstellen Sie auch eine Karte mit Anfrage Startzeit als Schlüssel und Anfrage Objekt als Wert.

    2b) Form SOAP Anfrage XML-Nachricht die Anfrage Objektdaten und fügen es als Wert der HttpArguement

    2c) Erstellt JMeter Testplan, konfigurieren JMeter, führen Sie den Plan und sammeln die Ergebnisse

    mit 2d) Berechne die Verzögerungszeit basierend auf der Anfrage Startzeit zwischen den Anfragen und setze den laufenden Thread in den Schlafzustand

  3. Schließlich wurde der Dienst nach der Ausführung aller Datensätze beendet.

Jetzt kann ich den Test erfolgreich ausführen. Aber ich bin mir nicht sicher, ob es der richtige Ansatz ist. Bitte überprüfen Sie es und lassen Sie mich wissen, wenn ich falsch liege.

Auch jetzt bekomme ich Ergebniszusammenfassung der einzelnen Anfrage als codiert. Aber ich möchte die kumulativen Statistiken nach der Ausführung aller Anfragen erhalten. Wie geht das? Bitte führen Sie mich.

Der vollständige Code ist wie folgt:

// Build the result set [baseReqRecords] of request details from the database 

while (baseReqRecords.next()) { 
    // Get the request details 
    // Get the start time 

    long delay = 0; 

    if (previousRequestStartTime != null) { 
     delay = ((requestStartTime.getTime() - previousRequestStartTime 
       .getTime())); 
    } 

    HTTPSamplerProxy httpSampler = new HTTPSamplerProxy(); 
    httpSampler.setName("SOAP Request"); 
    httpSampler.setEnabled(true); 
    httpSampler.setPostBodyRaw(true); 

    HTTPArgument httpArgument = new HTTPArgument(); 
    httpArgument.setAlwaysEncoded(false); 
    httpArgument.setMetaData("="); 

    if (operationsMap.get(reqOperation).equals(
      <<DESIRED_OPERATION>>)) { 
     // build the request context object from the request details 
     httpArgument.setValue(<<SOAP MESSAGE>>); 
    } 

    Arguments arguments = new Arguments(); 
    arguments.addArgument(httpArgument); 

    System.out.println("HTTP Argument value: " 
      + httpArgument.getValue()); 

    HeaderManager headerManager = new HeaderManager(); 
    headerManager.add(new Header("<<SM_USER>>", 
      "<<value>>")); 
    headerManager.add(new Header("Content-Type", 
      "text/xml; charset=utf-8")); 
    headerManager 
      .add(new Header(
        "SOAPAction", 
        "<<ACTION_URL>>")); 
    headerManager.setName(JMeterUtils 
      .getResString("header_manager_title")); 
    headerManager.setProperty(TestElement.GUI_CLASS, 
      HeaderPanel.class.getName()); 
    headerManager.setProperty(TestElement.TEST_CLASS, 
      HeaderManager.class.getName()); 

    System.out.println("Headers: " + headerManager.getHeaders()); 

    httpSampler.setArguments(arguments); 
    httpSampler.setDomain("<<SERVER>>"); 
    httpSampler.setPort(<<PORT>>); 
    httpSampler 
      .setPath("<<PATH>>"); 
    httpSampler.setMethod("POST"); 
    httpSampler.setName("Sampler"); 
    httpSampler.setFollowRedirects(true); 
    httpSampler.setAutoRedirects(false); 
    httpSampler.setUseKeepAlive(true); 
    httpSampler.setDoMultipartPost(false); 
    httpSampler.setMonitor(false); 
    httpSampler.setProperty(TestElement.GUI_CLASS, 
      HttpTestSampleGui.class.getName()); 
    httpSampler.setProperty(TestElement.TEST_CLASS, 
      HTTPSamplerProxy.class.getName()); 

    LoopController loopController = new LoopController(); 
    loopController.setEnabled(true); 
    loopController.setFirst(true); 
    loopController.setContinueForever(false); 
    loopController.setLoops(1); 
    loopController.setProperty(TestElement.GUI_CLASS, 
      LoopControlPanel.class.getName()); 
    loopController.setProperty(TestElement.TEST_CLASS, 
      LoopController.class.getName()); 
    loopController.initialize(); 

    ThreadGroup threadGroup = new ThreadGroup(); 
    threadGroup.setNumThreads(1); 
    threadGroup.setRampUp(1); 
    threadGroup.setScheduler(false); 
    threadGroup.setSamplerController(loopController); 
    threadGroup.setEnabled(true); 
    threadGroup.setProperty(TestElement.GUI_CLASS, 
      ThreadGroupGui.class.getName()); 
    threadGroup.setProperty(TestElement.TEST_CLASS, 
      ThreadGroup.class.getName()); 

    TestPlan testPlan = new TestPlan(
      "Test Plan"); 
    testPlan.setComment("Service Operations Test Plan"); 
    testPlan.setFunctionalMode(false); 
    testPlan.setSerialized(false); 
    testPlan.setUserDefinedVariables((Arguments) new ArgumentsPanel() 
      .createTestElement()); 
    testPlan.setProperty(TestElement.GUI_CLASS, 
      TestPlanGui.class.getName()); 
    testPlan.setProperty(TestElement.TEST_CLASS, 
      TestPlan.class.getName()); 

    HashTree testPlanTree = new HashTree(); 

    HashTree samplerTree = new HashTree(); 
    samplerTree.add(httpSampler, headerManager); 

    testPlanTree.add(testPlan); 
    HashTree threadGroupHashTree = testPlanTree.add(testPlan, 
      threadGroup); 
    threadGroupHashTree.add(samplerTree); 

    SaveService.saveTree(testPlanTree, new FileOutputStream(
      "jmeter_api.jmx")); 

    Summariser summary = null; 
    String summariserName = JMeterUtils.getPropDefault(
      "summariser.name", "summary"); 
    if (summariserName.length() > 0) { 
     summary = new Summariser(summariserName); 
    } 

    String reportFile = "report.jtl"; 
    ResultCollector logger = new ResultCollector(summary); 
    logger.setFilename(reportFile); 
    testPlanTree.add(testPlanTree.getArray()[0], logger); 

    jmeter.configure(testPlanTree); 

    previousRequestStartTime = requestStartTime; 
    jmeter.run(); 

    System.out.println("delay = " + delay); 

    Thread.sleep(delay); 
} 

Angenommen, es gibt 5 Anfrage Details Datensätze in der Ergebnismenge. Die Startzeit der Anfrage beträgt 60 Sekunden. Jetzt habe ich die folgenden Ergebnisse nach der Ausführung erhalten:

summary =  1 in 00:00:01 = 0.9/s Avg: 1002 Min: 1002 Max: 1002 Err:  0 (0.00%) 
delay = 0 
summary =  1 in 00:00:01 = 1.1/s Avg: 850 Min: 850 Max: 850 Err:  0 (0.00%) 
delay = 60000 
summary =  1 in 00:00:01 = 1.5/s Avg: 612 Min: 612 Max: 612 Err:  0 (0.00%) 
delay = 60000 
summary =  1 in 00:00:01 = 1.1/s Avg: 859 Min: 859 Max: 859 Err:  0 (0.00%) 
delay = 60000 
summary =  1 in 00:00:01 = 1.1/s Avg: 849 Min: 849 Max: 849 Err:  0 (0.00%) 

Antwort

0

Die Statistiken in report.jtl Datei geschrieben wird, können Sie es öffnen mit dem Listener Ihrer Wahl, das heißt Aggregate Report und Anfragen Zusammenfassung sehen. Sie können auch eine HTML Reporting Dashboard mit, dass report.jtl Datei wie bauen:

jmeter -g report.jtl -o /path/to/report/folder 

würde ich mit verschiedenen Etiketten für Ihre Anfragen empfehlen als gegeben haben sie alle SOAP Request Namen es nicht möglich sein wird, sie im Abschlussbericht zu unterscheiden.

Eigentlich brauchen Sie nicht einmal die Java-API, Sie könnten JDBC Request sampler verwenden, um Anforderungsdaten von Oracle zu erhalten, und ForEach Controller, um die Ergebnismenge zu iterieren.

+0

Danke Dmitri wieder für Ihre Antwort. – Britto

+0

Ich werde keine Anfrage periodisch an die Datenbank senden. Zum Beispiel Datenbank aktualisieren/einfügen bei jeder Probe. Muss ich hier wirklich den JDBC Request Sampler verwenden? – Britto

Verwandte Themen