Возможно ли получить фактическое время отклика запросов 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
Ваш вопрос непонятен. Вы хотите, чтобы вы получили время ответа 'HttpResponse response = client.execute (get);' вместо времени ответа всего сэмплера? или что-то другое? –
да время отклика образца. Я получаю действительный контент ответа (сообщение json) для этого запроса api. но я хочу знать, как долго длился запрос, поэтому мне нужно знать время ответа. для того, что я вижу сейчас, время отклика пробоотборника jsr223 составляет около 10-20 мс или около того, что неверно (должно быть выше 1> сек для этого запроса api). – DMC
Странно: я думаю, что пробник будет длиннее одиночной операции внутри него. Это может иметь какое-то отношение к использованию отдельных потоков для запуска вашего кода. В основном основное допущение JMeter заключается в том, что каждый пробоотборник является одной «операцией», выполняемой одним потоком. И у вас есть несколько потоков, которые выполняют несколько операций с несколькими URL-адресами параллельно. Так что это может стать странным. Я бы предложил получить пробник для обработки ОДНОЙ вещи и управлять обработкой всех URL-адресов на уровне группы нитей –