Удаление пустых групп из запроса SOAP в jMeter - PullRequest
0 голосов
/ 06 февраля 2019

Мне нужно предварительно обработать SOAP-запрос (используя HTTP-запрос), заполненный набором данных CSV в jMeter.Некоторые из связанных переменных имеют значение null, что ожидается, но служба, которую я тестирую, также выполняет проверку этих элементов.

В прошлом был похожий вопрос ( JMeter - удаление пустых элементов в SOAPrequest ), но в моем случае я не хочу очищать только пустой элемент. Я хочу очистить весь блок.

Пример: я хочу, чтобы это

<table>
    <name>businessLicenceGroup</name>
    <tableRow>
        <sequence>1</sequence>
        <field>
            <sequence>0</sequence>
            <name>authority</name>
            <value>AD01</value>
        </field>
        <field>
            <sequence>1</sequence>
            <name>licenceNumber</name>
            <value></value>
        </field>
    </tableRow>
</table>

было

<table>
    <name>businessLicenceGroup</name>
    <tableRow>
        <sequence>1</sequence>
        <field>
            <sequence>0</sequence>
            <name>authority</name>
            <value>AD01</value>
        </field>
    </tableRow>
</table>

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Ссылочный код, который ищет пустые объекты и удаляет их родительские узлы, будет выглядеть примерно так:

def before = prev.getResponseDataAsString()
log.info('Before: ' + before)
def xml = new groovy.util.XmlParser().parseText(before)
def nodesWithoutText = xml.'**'.findAll { it.name() && !it.text() }
def removeNode = { node ->
    def field = node.parent()
    def tableRow = field.parent()
    tableRow.remove(field)
}
nodesWithoutText.each{removeNode(it)}
log.info('After: ' + groovy.xml.XmlUtil.serialize(xml))

Приведенный выше код предполагает, что ваш пример XML приходит как ответ Sampler и необходимо поместить в JSR223 PostProcessor

Демо:

enter image description here

Ссылки:

0 голосов
/ 06 февраля 2019

Может быть, вы можете использовать этот отличный скрипт для JSR223 PreProcessor.Это основано на следующих статьях.Regard.что результат имеет не тот же формат, что и входной xml.

Изменение / удаление узлов с помощью Groovy

Groovy Goodness: Pretty Print XML

Я нашел это после публикации ответа.Это также может помочь.

Groovy XmlSlurper заменяет узел на заданное значение дочернего узла

import groovy.xml.*

def xml = """
<table>    
    <name>businessLicenceGroup</name>   
    <tableRow>        
        <sequence>1</sequence>        
        <field>            
            <sequence>0</sequence>            
            <name>authority</name>            
            <value>AD01</value>        
        </field>        
        <field>            
            <sequence>1</sequence>            
            <name>licenceNumber</name>            
            <value></value>        
        </field>    
    </tableRow>
</table>
"""

log.info("XML before removing Node: " + xml);

def table = new XmlParser().parseText(xml);

log.info("Parsed XML before removing Node: " + table);

log.info("Node to remove: " + table.tableRow.field[1]);
// remove the node by replacement with empty element
table.tableRow.field[1].replaceNode {};

// Create Output
log.info("Parsed XML after removing Node: " + table);
def xmlOutput = new StringWriter()
def xmlNodePrinter = new XmlNodePrinter(new PrintWriter(xmlOutput))
xmlNodePrinter.print(table)

log.info("Parsed XML after removing Node: " + xmlOutput.toString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...