api - example - obteniendo tiempos de respuesta usando JSR223+JMeter
json extractor jmeter (1)
¿Es posible obtener el tiempo de respuesta real de las solicitudes de API realizadas con el muestreador JSR223 / groovy en JMeter? Tengo el siguiente código de trabajo, pero no obtengo el tiempo de respuesta adecuado cuando veo a mis oyentes (el contenido de la respuesta es realmente bueno, algunos datos json).
La URL objetivo se da en el campo ''parámetro'' en la muestra (basado en el ejemplo de Dmitri). Además, agregué un token de portador en el encabezado para usar el token de acceso OAuth al hacer solicitudes.
Intenté usar un controlador de transacción e incluí el sampler JSR223 dentro de él, pero esto no funcionó para obtener el tiempo de respuesta (incluso cuando se creó una muestra principal).
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
Su muestra regresa antes de que el hilo que ejecuta su solicitud finalice, el método shutdown () de ThreadPoolExecutor inicia el apagado pero no lo espera. Pruebe con awaitTermination: pool.awaitTermination(60, TimeUnit.SECONDS)