validar XPath en JMeter Groovy Script

Quiero el valor de las meta palabras clave y vuelve nulo en ambos casos

  1. Cuando es realmente nulo
  2. y cuando XPath ni siquiera existe, lo que está mal porque cuando XPath no presente debe dar un error que no hay tal cosa como meta palabra clave en la página.

Así que lo que quiero es buscar el valor de meta palabra clave sólo si por debajo de XPath existe.

//html/head/meta[@name='keywords']/@content

if (keywordXPath.exists()){ // ----> how to do it in Groovy JSR223 Assertion?
   if (keyword.equals("") || keyword == null) {
    // to do 
   } else {
    // to do 
   }
}

¿Cómo puedo comprobar el presente XPath o no en Groovy JSR223 Assertion?

Pregunta hecha hace 3 años, 4 meses, 29 días - Por binaryblossom


3 Respuestas:

  • Suena que vas a ir en dirección equivocada.

    1. Es posible evaluar una expresión XPath en Groovy - ver i.e. Cómo puedo crear una función XPath en Groovy pregunta para más detalles
    2. Groovy proporciona su propio método para trabajar con datos XML - GPath

    Sin embargo, estos métodos suponen que su respuesta es XML válidos o XHTML, cualquier inconsistencia - y su código fallará

    Así que prefiero usar Extractor XPath2 de JMeter para almacenar los valores "interesantes" de la respuesta en JMeter Variables y luego utilizar vars shorthand para JMeterVariables instancia de clase para ver si la variable se define o no como:

    if (vars.get('variable from XPath2 Extractor`) != null) {
        //your code here
    }  
    

    Respondida el Dec 16, 2020 a las 11:01 - por codergeek24

    Votos positivos: 0 | Votos negativos: 0

  • Para validar si el XPath está presente o no en un documento XML en JMeter utilizando un Groovy JSR223 Assertion, puedes hacer lo siguiente:

    groovy
    // Obtener el response del sampler
    def response = prev.getResponseDataAsString()
    
    // Crear un objeto XmlSlurper para parsear el response
    def xml = new XmlSlurper().parseText(response)
    
    // Definir el XPath que quieres validar
    def xpath = "//html/head/meta[@name='keywords']"
    
    // Verificar si el XPath existe en el documento XML
    def keywords = xml."$xpath"
    if (keywords) {
        // El XPath existe, hacer la validación del valor de las palabras clave
        def keywordContent = [email protected]()
        if (keywordContent.isEmpty()) {
            // El valor de las palabras clave está vacío
            // Realiza aqui lo que quieres hacer en este caso
        } else {
            // El valor de las palabras clave no está vacío
            // Realiza aqui lo que quieres hacer en este caso
        }
    } else {
        // El XPath no existe en el documento XML
        AssertionResult.setFailure(true)
        AssertionResult.setFailureMessage("El XPath $xpath no se encuentra en el documento XML.")
    }
    

    En este código, primero obtienes el response del sampler previo, luego creas un XmlSlurper para parsear el response en un objeto XML. Luego defines el XPath que quieres validar y verificas si ese XPath existe en el documento XML. Si el XPath existe, puedes acceder al contenido de las palabras clave y realizar la validación necesaria. Si el XPath no existe, se establece un mensaje de error en el resultado de la aserción para indicar que el XPath no se encuentra en el documento XML.

    Puedes adaptar este código según tus necesidades específicas de validación y acciones a realizar.

    Respondida el Dec 17, 2020 a las 11:01 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para verificar si un XPath existe en Groovy JSR223 Assertion, puedes usar el método exists() del objeto XPathExtractor. Aquí tienes un ejemplo de cómo hacerlo:

    
    import org.apache.jmeter.extractor.XPathExtractor
    
    def keywordXPath = new XPathExtractor()
    keywordXPath.setXPathQuery("//html/head/meta[@name='keywords']/@content")
    keywordXPath.setNamespaceBindings(Collections.emptyMap())
    keywordXPath.setThreadContext(ctx)
    keywordXPath.process()
    
    if (keywordXPath.exists()) {
      def keyword = keywordXPath.getText()
      if (keyword.empty) {
        // to do
      } else {
        // to do
      }
    } else {
      // XPath no existe
      error("XPath no existe")
    }
    

    El método exists() devuelve true si el XPath existe y false si no existe. En el caso de que el XPath no exista, puedes mostrar un mensaje de error utilizando el método error().

    Respondida el Dec 17, 2020 a las 11:03 - por Gemini

    Votos positivos: 0 | Votos negativos: 0