post - example - jmeter cookies
jmeter-solicitud de la segunda publicaciĆ³n no utiliza el JSESSIONID creado en mi log in post solicitud (2)
Pude enviar con éxito una solicitud POST para mi log en el punto final y se creó un JSESSIONID. Sé que JSESSIONID está guardado por el Administrador de cookies HTTP que tengo en la parte superior de mi hilo porque veo que se usa en varias solicitudes GET que tengo en mi hilo.
Pero cuando intento una solicitud POST, no usa JSESSIONID y crea su propia ID. A continuación están mis configuraciones:
Protocolo: https Método: POST -Use KeppAlive {"json": "params"}
Resultado de la muestra: Nombre del hilo: sim test 1-1 Inicio de muestra: 2014-02-18 15:42:42 EST Tiempo de carga: 95 Latencia: 95 Tamaño en bytes: 239 Tamaño de encabezados en bytes: 239 Tamaño del cuerpo en bytes: 0 Muestra Recuento: 1 Recuento de errores: 0 Código de respuesta: 302 Mensaje de respuesta: encontrado
Cabeceras de respuesta: HTTP / 1.1 302 Servidor encontrado: Apache-Coyote / 1.1 Set-Cookie: JSESSIONID = F16BF82FD28A84F6E28DDE30DECDC48C; Ruta = /; Seguro; Ubicación HttpOnly: https: //api.zzzz com / site / needsAuth Content-Length: 0 Fecha: mar, 18 feb. 2014 20:42:42 GMT
Campos HTTPSampleResult: ContentType: DataEncoding: null
Solicitud: POST https: //api.zzz com / rest / members / 347 / pasajeros
Datos de POST: {"relationshipToMember": null, "authorizedToBook": falso, "authorizedToFly": true, "authorizedToGetInfo": falso, "pasajero": {"firstName": "Mighty", "middleName": null, "lastName" : "Max", "dateOfBirth": 1380857200000}}
[no galletas]
Encabezados de solicitud: Conexión: keep-alive Tipo de contenido: application / json Content-Length: 204 Host: api.zzz.com User-Agent: Apache-HttpClient / 4.2.6 (java 1.5)
-Nota: No sé si estoy haciendo mis solicitudes GET correctamente, pero están funcionando. Han seguido los redireccionamientos y primero va a http: //api.zzz ... - 302 encontrado, luego va https: //api.zzz ...
editar: Encontré esto, que es exactamente mi problema: el Administrador de cookies de Apache JMeter no agrega la cookie a la solicitud POST , pero no entiendo su solución si alguien puede explicar los pasos.
ACTUALIZACIÓN Resuelto: tuve que mantener el mismo nombre de servidor como mi POST de inicio de sesión y cambiar mi ruta
Tenía que mantener el mismo nombre / IP del servidor como mi POST de inicio de sesión y cambiar mi ruta
¡¡¡ACTUALIZAR!!!
No he notado su protocolo https .
Todo lo que necesita es establecer la propiedad CookieManager.save.cookies=true
en su archivo jmeter.properties
o agregarla como argumento a la línea de comando de JMeter como
jmeter -JCookieManager.save.cookies=true -n -t path_to_jmx_script.jmx -l path_to_log_file.jtl
Dejando el resto de mi respuesta solo en caso de que alguien más lo necesite como una guía sobre cómo compartir las cookies de JMeter en diferentes grupos de subprocesos.
No puedo reproducir su caso de uso en mi entorno con los siguientes escenarios:
- El Administrador de cookies HTTP vive bajo el Plan de prueba (el mismo nivel que el (los) grupo (s) de subprocesos)
- El Administrador de cookies HTTP vive en el Grupo de subprocesos (el mismo nivel que los Samplers)
Solo es reproducible si el Administrador de cookies HTTP se agregó como elemento secundario de la solicitud de inicio de sesión. Si es tu caso, sube un nivel para ampliar su alcance.
Si por alguna razón no ayuda, consulte a continuación los posibles detalles de la solución.
Su código de respuesta 204
no me parece un error. Supongo que el servidor preferiría responder con algo como 401
o 403
si hubiera problemas con la autenticación basada en cookies.
Si explícitamente necesita establecer una cookie, puede hacerlo a través de, por ejemplo, Beanshell
Debes hacer lo siguiente:
- Si va a compartir cookies entre diferentes grupos de subprocesos o los necesita como variables de JMeter por cualquier otro motivo, establezca la propiedad
CookieManager.save.cookies=true
en el archivojmeter.properties
o especifíquelo durante el inicio de JMeter comojmeter -JCookieManager.save.cookies=true
Agregue Beanshell Post Processor a su solicitud de inicio de sesión con el siguiente código:
import org.apache.jmeter.protocol.http.control.CookieManager; CookieManager manager = ctx.getCurrentSampler().getProperty("HTTPSampler.cookie_manager").getObjectValue(); props.put("cookiecount", String.valueOf(manager.getCookieCount())); for (int i = 0; i < manager.getCookieCount(); i++) { props.put("cookie_name" + i, manager.get(i).getName()); props.put("cookie_value" + i, manager.get(i).getValue()); props.put("cookie_domain" + i, manager.get(i).getDomain()); props.put("cookie_path" + i, manager.get(i).getPath()); props.put("cookie_expires" + i, String.valueOf(manager.get(i).getExpires())); props.put("cookie_secure" + i, String.valueOf(manager.get(i).getSecure())); }
Agregue el procesador Beanshell Pre a su solicitud
POST
con el siguiente código:import org.apache.jmeter.protocol.http.control.CookieManager; import org.apache.jmeter.protocol.http.control.Cookie; import org.apache.jmeter.testelement.property.JMeterProperty; CookieManager manager = ctx.getCurrentSampler().getProperty("HTTPSampler.cookie_manager").getObjectValue(); int count = Integer.parseInt(props.getProperty("cookiecount")); for (int i = 0; i < count; i++) { Cookie cookie = new Cookie(props.getProperty("cookie_name" + i), props.getProperty("cookie_value" + i), props.getProperty("cookie_domain" + i), props.getProperty("cookie_path" + i), Boolean.parseBoolean(props.getProperty("cookie_secure" + i)), Long.parseLong(props.getProperty("cookie_expires" + i))); manager.add(cookie); } JMeterProperty cookieprop = ctx.getCurrentSampler().getProperty("HTTPSampler.cookie_manager"); cookieprop.setObjectValue(manager); ctx.getCurrentSampler().setProperty(cookieprop);
Explicación:
El código en el punto 2 obtiene todas las cookies disponibles del Administrador de cookies HTTP y las almacena en Propiedades de JMeter con el prefijo cookie_
El código en el punto 3 lee todas las propiedades con el prefijo cookie_
, construye Cookies JMeter a partir de ellas y las agrega al Administrador de cookies HTTP.
Consulte Cómo utilizar la guía de BeanShell para obtener más información sobre la extensión de JMeter a través de scripts.