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 нулевые узлы (или нулевой элемент для выбора одного узла).