with tutorial test loop jmeter

tutorial - Acceso a la ruta del script JMeter



jmeter tutorial (4)

¿Hay alguna forma de acceder a la ruta física absoluta del script actual a través de una variable / propiedad? No parece haber nada listado a través de una muestra de depuración.

Es increíblemente molesto que acciones como cargar archivos CSV y JMX Includes utilicen el directorio de trabajo actual como ruta relativa.


  • Incluye controlador
    Según la referencia del componente:

    Este elemento no admite variables / funciones en el campo de nombre de archivo.
    Sin embargo, si la propiedad includecontroller.prefix está definida, los contenidos se usan para prefijar la ruta de acceso. Si no se puede encontrar el archivo en la ubicación dada por prefijo + nombre de archivo, entonces el controlador intenta abrir el archivo Nombre relativo al directorio de inicio de JMX (versiones de JMeter después de 2.3.4).

    Puede pasar a JMeter una propiedad java llamada includecontroller.prefix que se puede usar para anteponer un directorio al archivo JMX que está incluyendo.

    1) En caso de uso de lanzamiento de la consola:

    -Jincludecontroller.prefix=/full/path/to/jmx/scripts/dir/

    2) en caso de GUI: agregue lo mismo al archivo .sh / .cmd / .bat o escriba un archivo contenedor;
    3) en el caso del uso de Jmeter Ant Task : establecer como propiedad separada:

    <jmeter jmeterhome="${jmeter.home}" testplan="..." resultlog="..."> <property name="jmeter.save.saveservice.assertion_results" value="all"/> <property name="jmeter.save.saveservice.output_format" value="xml"/> <property name="includecontroller.prefix" value="..."/> </jmeter>

  • Configuración del conjunto de datos CSV
    Según la referencia del componente:

    Los nombres de archivo relativos se resuelven con respecto a la ruta del plan de prueba activo.
    Los nombres de archivo absolutos también son compatibles, pero tenga en cuenta que es poco probable que funcionen en modo remoto, a menos que el servidor remoto tenga la misma estructura de directorio. Si se hace referencia al mismo archivo físico de dos maneras diferentes, p. Ej., Csvdata.txt y ./csvdata.txt, se tratan como> diferentes archivos. Si el sistema operativo no distingue entre mayúsculas y minúsculas, csvData.TXT también se abrirá por separado.


    Puede declarar una variable de plan de prueba que recupera el valor del parámetro con la carpeta que contiene los archivos de datos csv:
    p.ej

    csv.path | ${__P(csv.path, ${__property(user.dir)}${__BeanShell(File.separator,)})}

    CSV Data Set Config Filename = ${csv.path}${__P(users-list,)}

    Configuración desde la consola:

    -Jcsv.path=/full/path/to/csv/data/dir/

    Configuración para la configuración de pruebas distribuidas:

    -Gcsv.path=/full/path/to/csv/data/dir/


Mi problema particular era que mi ruta relativa Incluir Controlador incluía una barra invertida que se rompió en Linux y OSX.

La solución fue usar una barra inclinada en las rutas relativas, que funciona en todas las plataformas.


Al decir "ruta física absoluta del guión actual", supongo que OP se refiere a la ubicación desde la que se carga el plan de prueba (archivo jmx). Necesitaba exactamente esto para generar un archivo CSV a partir del script de BeanShell al comienzo de la ejecución, que luego se usa en una configuración de conjunto de datos CSV para volver a leerlo, así que quería que el script funcionara de la misma manera que el último funciona cuando no hay una ruta especificado. Revisé la fuente de JMeter y encontré esta solución de trabajo:

import org.apache.jmeter.services.FileServer; log.info(FileServer.getFileServer().getBaseDir());

Probé esto y vi la ruta correcta en el jmeter.log.


Usé la respuesta proporcionada por haridsv. Funcionó muy bien, excepto que necesitaba poner el directorio en el archivo JMX en una variable. Creé un componente de "Variables definidas por el usuario" y utilicé BeanShell en el campo "Valor" de la variable de la siguiente manera:

${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)}

La primera sección de BeanShell llama a la clase Java que cuestiona el directorio. El segundo agrega un separador de archivos a la ruta, que por supuesto es opcional.