2016-08-03 3 views
2

Возможно ли получить фактическое время отклика запросов API, выполненных с использованием JSR223/groovy sampler в JMeter? У меня есть следующий рабочий код, но не получайте надлежащее время отклика, когда я смотрю своих слушателей (контент ответов на самом деле прекрасен, некоторые данные json).получение времени ответа с использованием JSR223 + JMeter

Целевой URL указывается в поле «параметр» в сэмплере (на примере Дмитрия). Кроме того, я добавил маркер-носитель в заголовок, чтобы использовать токен доступа OAuth при выполнении запросов.

Я попытался использовать контроллер транзакций и включить в него пробоотборник JSR223, но это не помогло получить время отклика (даже при создании родительского образца).

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.concurrent.ExecutorService 
import java.util.concurrent.Executors 

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

       get.addHeader("authorization","Bearer ${AccessToken}");  // Add the access token into the header 
       get.addHeader("connection","keep-alive");     // Add keep-alive in header 

       HttpResponse response = client.execute(get);    // HttpResponse response = client.execute(post); 
       HttpEntity entity = response.getEntity(); 
       log.info("Response Status Code: " + response.getStatusLine().getStatusCode() + " " + response.getStatusLine().getReasonPhrase());  
       SampleResult.setResponseData(EntityUtils.toByteArray(entity));   
      } catch (Exception ex) { 
       ex.printStackTrace(); 
       throw ex; 
      } 

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

Ваш вопрос непонятен. Вы хотите, чтобы вы получили время ответа 'HttpResponse response = client.execute (get);' вместо времени ответа всего сэмплера? или что-то другое? –

+0

да время отклика образца. Я получаю действительный контент ответа (сообщение json) для этого запроса api. но я хочу знать, как долго длился запрос, поэтому мне нужно знать время ответа. для того, что я вижу сейчас, время отклика пробоотборника jsr223 составляет около 10-20 мс или около того, что неверно (должно быть выше 1> сек для этого запроса api). – DMC

+0

Странно: я думаю, что пробник будет длиннее одиночной операции внутри него. Это может иметь какое-то отношение к использованию отдельных потоков для запуска вашего кода. В основном основное допущение JMeter заключается в том, что каждый пробоотборник является одной «операцией», выполняемой одним потоком. И у вас есть несколько потоков, которые выполняют несколько операций с несколькими URL-адресами параллельно. Так что это может стать странным. Я бы предложил получить пробник для обработки ОДНОЙ вещи и управлять обработкой всех URL-адресов на уровне группы нитей –

ответ

3

Ваш образец возвращается до нити, выполняющего ваш запрос завершен, метод отключения() из ThreadPoolExecutor инициирует отключение, но не ждать. Попробуйте с надеждойТерминал: pool.awaitTermination(60, TimeUnit.SECONDS)

+0

как бы выглядел мой код? если я заменил pool.shutdown(); с 'pool.awaitTermination (60, TimeUnit.SECONDS)', тогда я получаю ответное сообщение: javax.script.ScriptException: groovy.lang.MissingPropertyException: Нет такого свойства: TimeUnit для класса: Script4 – DMC

+0

исправлено, что с импортом java.util. concurrent.TimeUnit, однако теперь образец теперь работает бесконечно до тех пор, пока не будет достигнут тайм-аут .. а затем отобразится ответ. ответ/время загрузки также 60 секунд – DMC

+1

ha да извините, я забыл об импорте. и вы должны сделать остановку, а затем ждать. Мне было не очень ясно, что я плохой. – ARA

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

  • Нет связанных вопросов^_^