XPath для анализа ответа SOAP

Учитывая приведенный ниже SOAP-ответ, как мне использовать XPATH для тестирования / проверки содержимого ответа? ПРИМЕЧАНИЕ. Я использую RunScope для тестирования нашего API.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetValidDataExtractResponse xmlns="http://some.namespace">
<GetValidDataForExtractResult>
<long>1001</long>
<long>1002</long>
  </GetValidDataForExtractResult>
</GetValidDataExtractResponse>
</soap:Body>
</soap:Envelope>

Я могу получить действительное значение обратно, используя: /soap:Envelope/soap:Body Но это не дает мне слишком далеко за пределами "существует ли что-то в теле". Я хотел бы иметь возможность определить, содержит ли узел "GetValidDataExtractResponse" что-либо, в том числе, если узел "etValidRentalUnitIdsForExtractResult" содержит X элементов или если этот узел содержит определенные значения.

2 ответа

Ладно, это не красиво, но может сработать для вас. Используя возможность сценариев в тестах Runscope, вы можете извлечь значения из тела. Вот пример, который извлекает первое "длинное" значение.

var parser = new marknote.Parser();
var doc = parser.parse(response.body);

var envelope = doc.getRootElement();
var body = envelope.getChildElement("soap:Body");
var resp = body.getChildElement("GetValidDataExtractResponse");
var result = resp.getChildElement("GetValidDataForExtractResult");
var long = result.getChildElement("long");
variables.set("id", long.getText());

Вы можете проверить наличие дочернего узла как parent[child], Итак, вот несколько идей, если у вас есть псевдоним пространства имен x настроить для http://some.namespaceи что вы сделали опечатку в закрывающих тегах):

  • "Найти GetValidDataExtractResponse с GetValidDataForExtractResult ребенок ":

x:GetValidDataExtractResponse[x:GetValidDataForExtractResult]
  • "Найти GetValidDataForExtractResult ровно с двумя long дети":

x:GetValidDataForExtractResult[count(x:long)=2]
  • Найти GetValidDataForExtractResult с long ребенок с '1001' в качестве текстового значения

x:GetValidDataForExtractResult[x:long/text()='1001']

Я лично не пользуюсь RunScope, но я хотел бы представить, что есть способ проверить, возвращает ли выбор узлов xpath нулевые узлы (или нулевой элемент для выбора одного узла).

Другие вопросы по тегам