2012-02-07 30 views
14

¿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.Acceso a la ruta del script JMeter

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

Respuesta

10
  • Include Controller
    Según la referencia del componente:

    Este elemento no es compatible con las variables/funciones en el campo de nombre de archivo .
    Sin embargo, si la propiedad includecontroller.prefix está definida como , los contenidos se usan para prefijar la ruta de acceso. Si el archivo no se puede encontrar 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 JMeter una propiedad java llamada includecontroller.prefix que se puede utilizar 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 el caso de la interfaz gráfica de usuario - añadir el mismo a .sh archivo/.cmd/.bat o escribir un archivo de envoltura ;
    3) en caso de Jmeter Ant Task uso - Establecer como bienes separados:

    <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> 
    
  • CSV Data Set Config
    Según la referencia del componente:

    nombres de los archivos relativos se resuelven con respecto a la trayectoria de el 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 el mismo archivo físico es se hace referencia de dos maneras diferentes, p. Ej. csvdata.txt y ./csvdata.txt - entonces estos son>> tratados como archivos diferentes. Si el sistema operativo no distingue entre superior y minúscula, csvData.TXT también se abrirá por separado.


    Se puede declarar una variable plan de pruebas que recupera el valor del parámetro con la carpeta que contiene los archivos de datos CSV:
    por ejemplo,

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

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

    Configuración de la consola:

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

    de ajuste de la configuración de la prueba distribuido:

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

Gracias por su respuesta detallada Alies. ¿Cómo funciona esto cuando se ejecuta en "depuración" a través de la GUI? –

+0

Gracias por las referencias de documentación. Estaba confundido ya que la salida del registro implica que se utilizó la ruta principal de JMeter; sin embargo, si la ruta relativa a JMX es correcta, funcionará. –

3

Mi tema en particular fue que mi pariente ruta de inclusión controlador incluye una barra invertida que se rompió en Linux y OSX.

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

+1

Gracias por eso. Dentro de las secuencias de comandos de jmeter también puede usar $ {__ BeanShell (File.separator,)} para configurar todas las rutas, esto las hará independientes de la plataforma también. –

+0

@AliesBelik: lo tendré en cuenta, aunque en este caso el controlador de inclusión no admite variables (según su respuesta). –

+0

¿Qué significa exactamente este comando? $ {__ BeanShell (Name_Of_BeanShell_Script)}. Tengo un scripts de beans dentro de mi jMeterProject y me gustaría utilizar solo uno de ellos antes de enviar la solicitud. ¿Debo usar el comando BeanShell PreProcessor: $ {__ BeanShell (Name_of_my_script)} ?? –

8

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 como funciona el último cuando no hay una ruta especificado. Fui a través de 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 el camino correcto en la jmeter.log.

18

He utilizado la respuesta proporcionada por haridsv. Funcionó muy bien, excepto que necesitaba poner el directorio en el archivo JMX en una variable. Hice un componente "Variables definidas por el usuario" y se utiliza 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 BeanShell llama a la clase Java que recibe el directorio en cuestión. El segundo agrega un separador de archivos a la ruta, que por supuesto es opcional.

+1

Esto funciona en gui, no gui y con todos los componentes sin perder el tiempo con la configuración o los parámetros – KCD

+0

Solo para el registro: Un efecto de esta solución, (al menos para 3.2 que probé), es que por alguna razón no hay más sobrescribir la advertencia para los archivos de informe (se realiza automáticamente) –

Cuestiones relacionadas