2016-08-01 17 views
0

Ich versuche, den folgenden Code (von Dmitri) in JMeter 3.0 zu verwenden, jedoch bin ich bei der Ausführung nicht erfolgreich. Mein Ziel ist parallelen API-Aufrufe simulieren.parallele Anfrage mit JSR223 Sampler (Jmeter)

Irgendeine Idee, warum es scheitert? Code:

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.util.EntityUtils; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Executors; // necessary imports 


List<String> urls = new ArrayList<String>(); // initialize array of URLs 
Collections.addAll(urls,args); // read URLs from "Parameters" input and add them to array 
ExecutorService pool = Executors.newFixedThreadPool(urls.size()); // initialize pool of Future Tasks with number of threads equal to size of URLs provided 
for (String url : urls) { // for each URL from list 
    final String currentURL = url; 
    pool.submit(new Runnable() { // Sumbit a new thread which will execute GET request 

     @Override 
     public void run() { 
      try { 
       HttpClient client = new DefaultHttpClient(); // Use Apache Commons HTTPClient to perform GET request 
    HttpGet get = new HttpGet(currentURL); 
    HttpResponse response = client.execute(get); 
HttpEntity entity = response.getEntity(); 
EntityUtils.consume(entity); 
      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } 

     } 
    }); 
} 
pool.shutdown(); // shut down thread pool 

Fehler geworfen ist (ich habe 2 Beispiel Hosts im Parameterfeld jsr223 Sampler verwenden):

java.lang.IllegalStateException: Target host is null 
     at org.apache.http.util.Asserts.notNull(Asserts.java:52) 
     at org.apache.http.impl.conn.DefaultHttpRoutePlanner.determineRoute(DefaultHttpRoutePlanner.java:99) 
     at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:763) 
     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:382) 
     at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:884) 
     at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) 
     at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107) 
     at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55) 
     at org.apache.http.client.HttpClient$execute.call(Unknown Source) 
     at Script3$1.run(Script3.groovy:26) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) 
     at java.util.concurrent.FutureTask.run(Unknown Source) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
     at java.lang.Thread.run(Unknown Source) 

Antwort

1

Der Code sieht ok

  1. Vergewissern Sie sich, groovy Wählen Sie im Drop-down "Sprache"
  2. Stellen Sie sicher, dass Sie mindestens 1 angeben URL im Abschnitt "Parameter" (einschließlich Protokoll, http oder https). Wenn Sie> 1 url verwenden - trennen sie durch Leerzeichen, dh

    http://url1/path http://url2/path2 
    

Demo:

JSR223 AJAX Demo

Quelle: How to Load Test AJAX/XHR Enabled Sites With JMeter

+0

tat genau so. Immer noch den gleichen Fehler erhalten. Hast du irgendwo einen Testplan, den ich mit funktionierendem Code herunterladen kann? – DMC

+1

Hier klicken: http://pastebin.com/TqLSsfYw –

+0

Wissen Sie, ob es möglich ist, HTTP-Header mit diesen Anfragen zu senden? Ich habe einen Bearer (api access token), den ich auch im header der get-Anfrage übergeben muss. – DMC

0

@DMC versuchen Sie:

pool.awaitTermination(60, TimeUnit.SECONDS); after pool.shurdown();

es wird Ihnen die richtige Reaktionszeit geben