loadrunner vugen scripting challenges
Introducción a los desafíos involucrados en LoadRunner VuGen Scripting:
En esto Serie informativa de entrenamiento LoadRunner , exploramos sobre Mejoras en el script de VuGen en nuestro tutorial anterior. Desde nuestros tutoriales anteriores hasta ahora, hemos hecho un gran progreso con VuGen.
Aprendimos cómo grabar un script en el protocolo Web HTTP / HTML, cómo cuidar los datos / valores con correlación y parametrización, cómo asegurarnos de que la respuesta sea correcta con los puntos de control, cómo insertar transacciones que midan la tasa y el tiempo de respuesta del usuario. acciones y otras cosas.
Con estos, deberíamos poder crear scripts con éxito para casi todas las aplicaciones web.
=> Haga clic aquí para ver la serie completa de tutoriales de LoadRunner
Lenguaje LR
Puede haber situaciones en las que necesitemos realizar tareas más desafiantes en un script de VuGen. En este tutorial, discutiremos algunos de los desafíos de las secuencias de comandos junto con las técnicas disponibles para manejarlos.
Antes de discutir estos, comprendamos algunas cosas. VuGen (o Load Runner) solo puede entender su propio lenguaje (llamémoslo como lenguaje LR, siendo LR la forma corta de Load Runner). Entonces, cualquier script que genere se puede decir que está en lenguaje LR. En el lenguaje LR, solo hay un tipo de datos: Cadena (y más precisamente 'Cadena LR').
Ahora, para realizar mejoras en un script de VuGen, generalmente usamos el lenguaje C.
Sabemos que en el lenguaje C hay muchos tipos de datos como int, char, float, long, etc. Si definimos y usamos valores C directamente en una solicitud, VuGen no entenderá (ya que solo entiende 'cadenas LR') y arrojará un error. Así que tenemos que convertir cualquier valor C (de cualquier tipo de datos) a 'cadena LR' antes de usarlo en una solicitud.
Habiendo entendido esto, vayamos a algunos escenarios desafiantes en tiempo real.
Escenario 1:Cómo usar una cadena C en una solicitud de VuGen
Supongamos que en un script de VuGen tenemos una solicitud que tiene un campo llamado 'PlanName' (supongamos que este script es para alguna aplicación de planificación financiera). Durante la grabación, ingresamos el valor como 'NewPlan'.
|_+_|Digamos que queremos usar una cadena definida por el usuario como nombre del plan.
Entonces, tenemos que declarar y definir una cadena como se muestra a continuación
|_+_|El 'sPlanName' es una cadena C y, por lo tanto, debemos convertirlo en una cadena LR (para usarlo en la solicitud).
Hacemos esto usando la función 'lr_save_string' como se muestra a continuación:
|_+_|Esta función asigna un valor al parámetro / variable LR. Toma dos atributos: el primer atributo es la fuente (cadena C) y el segundo atributo es el destino (parámetro / variable LR).
Entonces, esta función guarda el valor de la variable C que definimos en el parámetro LR 'LRPlanName'.
Ahora podemos sustituir el 'LRPlanName' como cualquier otro parámetro en la solicitud de VuGen.
|_+_|Tenga en cuenta que cuando ejecutamos este script, todos los Vusers y todas las iteraciones tomarán el mismo valor que el nombre del plan. Entonces, para que el nombre del plan sea único para cada ejecución, podemos hacer algo como esto.
|_+_|Aquí, 'pVuserId' y 'pIteration' son los parámetros 'Vuser ID' y 'Número de iteración' (que analizamos en los tipos de parámetros en nuestros tutoriales anteriores). Estos se utilizan en el nombre del plan para garantizar que tengamos nombres únicos para cada Vuser e iteración.
los 'Lr_eval_string' La función devuelve la cadena de entrada después de evaluar cualquier parámetro incrustado. Por lo tanto, en este caso, el resultado de esta función será 'MyFinancialPlan_1_1' para la primera primera iteración de Vuser, 'MyFinancialPlan_1_2' para la primera segunda iteración de Vuser y así sucesivamente.
Y por supuesto, sabemos lo que 'Lr_save_string' función hace.
Ahora podemos sustituir el parámetro 'LRPlanName' como se muestra arriba.
Escenario 2:Cómo convertir una variable de corredor de carga a un entero C
En el último tutorial, vimos un ejemplo para entender cómo pasamos o fallamos manualmente una transacción dependiendo de una condición.
Ejemplo:
|_+_|Usamos 'declaración if' aquí con el atributo 'SaveCount'. El parámetro 'WelcomeCount' que guarda el número de ocurrencias del texto no se puede utilizar directamente en la condición 'si' ya que es una cadena de ejecución de carga. Por lo tanto, este parámetro debe convertirse en una cadena C primero y luego en un entero C. 'Lr_eval_string' y 'Atoi' Las funciones se utilizan (respectivamente) para encargarse de esto.
los 'Atoi' La función C convierte una cadena C en un entero C.
Después de esta conversión, se puede utilizar como cualquier otro entero de C.
Escenario 3:Cómo enviar un valor aleatorio en una solicitud
Muy a menudo nos encontramos con escenarios de aplicación en los que tenemos que seleccionar un valor aleatorio (por ejemplo, de un menú desplegable). ¿Cómo manejamos esto en los scripts de VuGen? ¿Cómo nos aseguramos de que se seleccione un valor aleatorio para cada iteración? Veamos esto en detalle.
Tomemos el ejemplo de nuestra aplicación 'Web Tours'. Como vimos anteriormente, tenemos una página 'Buscar vuelo' donde tenemos que seleccionar un vuelo.
Digamos que seleccionamos el primero de la lista. La solicitud correspondiente en el script es así (donde el valor correspondiente para el vuelo seleccionado).
|_+_|Primero tenemos que capturar los valores correspondientes para los cuatro vuelos de una de las respuestas anteriores. Podemos hacer esto usando la función de correlación (web_reg_save_param) con el atributo 'ORD = ALL' antes de la solicitud cuya respuesta tiene estos valores.
El resultado de esto será así, donde el parámetro correlacionado 'cFlight' tiene una matriz de cuatro valores correspondientes a los cuatro vuelos.
El siguiente paso sería seleccionar aleatoriamente uno de estos valores y enviar la solicitud. Esto se puede hacer usando 'Lr_paramarr_random' funciona como se muestra a continuación.
|_+_|La entrada a 'Lr_paramarr_random' La función es una matriz de parámetros y la salida es un valor aleatorio de esta matriz. Entonces, aquí la salida de esta función es uno de los cuatro valores de vuelo. Y como este valor aleatorio es una cadena LR, se utiliza la función 'lr_eval_string' (para convertir la misma en una cadena C).
'Strcpy' La función C finalmente copia este valor en una variable de cadena C 'flightVal'.
Ahora nuevamente tenemos que convertir esta variable C String en LR string para poder enviar la solicitud.
|_+_|Escenario 4:Cómo dividir una cadena en tokens
Digamos que hay un escenario en el que tenemos que dividir una cadena en piezas / fichas. Tomemos el ejemplo de nuestra aplicación 'Web Tours' donde el valor del vuelo 020 ; 338; 04/03/2018 dicen que tenemos que usar solo '338', luego necesitamos dividir esta cadena y almacenarla en una variable.
Para hacer esto 'Strtok' se utiliza la función.
'Strtok' La función C devuelve un token de una cadena delimitada por caracteres especificados. Después de la primera invocación, tenemos que pasar 'NULL' como el valor de la cadena para obtener el siguiente token. El siguiente ejemplo muestra cómo se utiliza esta función para dividir el valor de vuelo según el delimitador de punto y coma (;).
Ejemplo:
Supongamos que el valor de vuelo se captura de la respuesta relevante en el parámetro 'cFlight'.
|_+_|El resultado de esto se puede ver en el registro de reproducción.
Podemos copiar el token requerido en un parámetro y usarlo.
Escenario 5:Cómo leer datos y escribir datos en un archivo de texto
A veces, puede ser necesario leer datos de un archivo externo o escribir datos en un archivo externo. Veamos cómo hacemos esto en un script de VuGen.
Primero veamos cómo leer datos de un archivo de texto.
Ejemplo: Digamos que tenemos que leer un XML de un archivo de datos externo y usarlo como una solicitud en el script.
Para hacer esto, usamos 'Fread' Función C.
Esta función toma cuatro atributos:
buffer - El búfer en el que se almacena el flujo de datos.
Talla - El tamaño del búfer.
contar - El número de bytes para leer.
puntero_archivo - El puntero de archivo
Código de ejemplo (con comentarios) para el mismo
|_+_|Tenga en cuenta que en el código que se muestra arriba, leemos 500 bytes del archivo de texto. Obviamente, es posible que no sepamos siempre el tamaño del archivo. Entonces podemos usar 'Fseek' y 'Ftell' Funciones C (dejaré esto para que lo explore) para encontrar el tamaño del archivo y usar el 'contar' atributo del 'Fread' funcionar en consecuencia.
Ahora veamos cómo escribir datos en un archivo de texto.
Ejemplo: Supongamos que tenemos un script que crea pedidos y genera 'orderid'. Si queremos conocer todos los ID de pedido creados por nuestro script en una prueba, podemos hacer que nuestro script copie estos ID de pedido en un archivo de texto externo.
'Fprintf' - La función C escribe la salida formateada en un archivo.
Esta función toma estos atributos:
puntero_archivo - El puntero de archivo
format_string - La cadena formateada para escribir en el archivo.
argumentos - Uno o más argumentos de impresión opcionales.
El código de ejemplo se muestra a continuación. Supongamos que hemos correlacionado y guardado 'orderid' en el parámetro 'cOrderId'.
Ejemplo:
|_+_|Espero, ahora somos buenos con los conceptos de leer datos o escribir datos en un archivo externo (por supuesto, podría haber otras formas de hacer lo mismo que lo que discutimos anteriormente). Sería muy útil hacer un estudio exhaustivo sobre las operaciones de archivos en C (puede consultar cualquier buen tutorial o libro de C), ya que son muy necesarios en muchos escenarios en tiempo real.
Escenario 6:Cómo manejar la correlación cuando los límites están cambiando
En el tutorial de Correlaciones, utilizamos funciones de correlación basadas en límites para capturar los valores dinámicos de la respuesta. Pero, ¿qué pasa si tenemos un escenario donde los límites están cambiando? Hay varias formas de manejar estas situaciones. Veamos estos en detalle.
a) Utilizando las banderas 'IC', 'DIG' y 'ALNUM':
IC - Esta bandera indica a VuGen que ignore las mayúsculas y minúsculas en el límite izquierdo / derecho.
Ejemplo: Si el límite izquierdo a veces está en mayúsculas y otras en minúsculas, usamos esta bandera.
|_+_|USTED - Esta bandera le indica a VuGen que considere cualquier número donde se use el carácter comodín '#' en el límite izquierdo / derecho.
mejor programa para monitorear la temperatura de la gpu
Ejemplo: Si el límite izquierdo (o el límite derecho) está cambiando así (solo un número en una posición particular).
GJHi3rty
1GJHi8rty
GJHi7rty
Podemos usar la bandera 'DIG' como se muestra a continuación, ya que se encargará del número cambiante.
LB / DIG = GJHi # rty
aliso - Esta bandera le indica a VuGen que considere cualquier carácter alfanumérico individual donde se use el carácter comodín '^' en el límite izquierdo / derecho.
Ejemplo: Si el límite izquierdo (o el límite derecho) cambia así (solo un carácter alfanumérico en una posición en particular).
GJHi3rty
GJHiKrty
GJHitrty
Podemos usar la bandera 'ALNUM' como se muestra a continuación, ya que se encargará del cambio de carácter alfanumérico
LB / ALNUM = GJHi ^ rty
Además, podemos usar dos banderas juntas, como 'ALNUMIC', que es tanto 'ALNUM' como 'IC'.
b) Uso de los atributos 'SaveLen' y 'SaveOffset':
Podemos utilizar estos dos atributos del 'Web_reg_save_param' funcionan correctamente para ingresar solo la parte estática de los límites izquierdo / derecho.
c) Usando expresiones regulares:
Nosotros podemos usar 'Web_reg_save_param_regexp' función de correlación para guardar el valor dinámico (en un parámetro) que coincide con una expresión regular.
Ejemplo: Supongamos que el valor dinámico que queremos capturar es '3959339' del texto dado,
PriceControl_ctl01 'Name = jack', 'Refid = 3959339' saldo
No podemos usar la función de correlación basada en límites aquí porque el valor y la longitud del campo como 'Nombre' arriba pueden cambiar (por lo que no podemos usarlo en el límite izquierdo o derecho).
Podemos usar el 'Web_reg_save_param_regexp' función de correlación como se muestra a continuación para solucionar este problema.
|_+_|Los grupos de expresiones regulares se ponen entre paréntesis y el atributo 'Grupo' decide qué grupo considerar para guardar la coincidencia correspondiente al parámetro especificado (en el primer atributo).
A continuación, se muestran algunas coincidencias de expresiones regulares:
d - coincide con un solo dígito
w - coincide con una sola palabra
(A-Z) + - coincide con cualquier palabra en mayúsculas
(a-z) + - coincide con cualquier palabra en minúscula
(0-9) + - coincide con cualquier valor numérico
Escenario 7:Cómo escribir y usar una función en un script de VuGen
Como en cualquier otro lenguaje de programación, podemos escribir / definir una función manualmente (generalmente llamada función definida por el usuario) y usarla en cualquier lugar del script de VuGen.
Supongamos que tenemos que enviar un nombre de plan único en cada solicitud de un script en particular. Entonces, en lugar de escribir el código requerido (que genera un nombre único) varias veces, podemos definir una función (que genera un nombre único) y llamar cuando (y donde sea) se requiera en el script de VuGen.
Aunque la función en un script de VuGen se puede escribir dentro de cualquier acción, generalmente se escribe dentro del 'Globals.h' archivo (en la sección Archivos adicionales del script de VuGen) o dentro de un archivo recién creado (en la misma sección 'Archivos adicionales'). Una vez escrita, la función se puede llamar desde cualquier Acción.
La siguiente imagen muestra una función definida por el usuario 'MyFunction' escrita dentro del archivo 'globals.h'.
Como se discutió anteriormente, la otra forma es crear un nuevo archivo y escribir la función dentro de él.
Lo único que hay que recordar al crear un nuevo archivo es que tenemos que incluirlo en el archivo 'globals.h' (sin el cual VuGen no reconocerá este archivo).
Conclusión
Por lo tanto, en este tutorial, vimos cómo manejar algunos desafíos en tiempo real en las secuencias de comandos VuGen y, obviamente, nos encontraríamos con muchos otros escenarios cuando trabajamos en varias aplicaciones.
Además, se habría dado cuenta de que las funciones de cadena C y las operaciones de archivo C son muy necesarias (y útiles) para manejar varios escenarios. Sin embargo, te recomiendo que dediques un tiempo a dominarlos.
En nuestro próximo tutorial, veremos y comprenderemos algunas funciones predefinidas importantes que se utilizan en los scripts de VuGen (ya hemos visto algunas de las funciones).
=> Visite aquí para ver la serie completa de tutoriales de LoadRunner
PREV Tutorial | SIGUIENTE Tutorial
Lectura recomendada
- Pruebas de rendimiento de servicios web mediante secuencias de comandos LoadRunner VuGen
- Scripting avanzado de Unix Shell: matrices, operadores de prueba de cadenas y archivos, variables especiales
- Pruebas de carga con los tutoriales de HP LoadRunner
- Opciones de grabación de VUGen en LoadRunner
- Cómo configurar los archivos de script de LoadRunner VuGen y la configuración del tiempo de ejecución
- Funciones importantes de LoadRunner utilizadas en scripts de VuGen con ejemplos
- Introducción a Micro Focus LoadRunner: prueba de carga con el tutorial n. ° 1 de LoadRunner
- Scripting JMeter BeanShell Parte 2