В нашей системе есть SOAP-методы и есть автотесты на них. В автотестах применяются файлики transform.xslt — чтобы можно было переформатировать ожидаемый результат и проверять только те поля, которые нужны нам в данном тесте.
См также:
Folks — open-source проект с API-тестами на Java → там есть пример автотеста на SOAP с transform.xslt
Эволюция нашего использования XSLT в SOAP-тестах → подробнее про наши тесты
Формат записи у нас примерно такой. Вначале идет перечисление полей, которые я хочу увидеть в ответе
<xsl:variable name="fieldsToCopy">
|surname|name|patronymic|fullNameRawSource|fullNameQC|
fioTrusted|birthdateTrusted|innTrusted|snilsTrusted|
</xsl:variable>
А потом мы указываем, что нам нужны все поля переменной fieldsToCopy через contains
<xsl:apply-templates select="cdi:field[contains($fieldsToCopy, @name)]">
<xsl:sort select="@name"/>
</xsl:apply-templates>
Так вот, запускаю я тест, он падает, ожидаемый ответ не совпадает с моим. Смотрю, почему — в actual_transformed_response.xml вижу дополнительные поля: inn и snils
Сижу, пытаюсь вкурить, откуда они взялись. В перечислении полей их нет... Может, я неправильно добавила сам XSLT в тест? Может, берется из директории выше? Смотрю туда, хм, нет, там вообще другие поля..
Потупила, пошла к разработчику. Вместе выяснили, что условие contains работает как вхождение названия поля в перечисленное мной. Я сказала, что хочу видеть innTrusted, а в итоге получила два поля: inn и innTrusted, так как inn входит в строку innTrusted
Чего только не узнаешь, в общем ツ
Обошли эту проблему такой конструкцией:
<!-- А вот из полей нам все неинтересны. Конкат нужен, чтобы не попали лишние поля, inn входит в innTrusted -->
<xsl:apply-templates select="cdi:field[contains($fieldsToCopy, concat(@name, '|'))]">
<xsl:sort select="@name"/>
</xsl:apply-templates>
См также:
Folks — open-source проект с API-тестами на Java → там есть пример автотеста на SOAP с transform.xslt
Эволюция нашего использования XSLT в SOAP-тестах → подробнее про наши тесты
Формат записи у нас примерно такой. Вначале идет перечисление полей, которые я хочу увидеть в ответе
<xsl:variable name="fieldsToCopy">
|surname|name|patronymic|fullNameRawSource|fullNameQC|
fioTrusted|birthdateTrusted|innTrusted|snilsTrusted|
</xsl:variable>
А потом мы указываем, что нам нужны все поля переменной fieldsToCopy через contains
<xsl:apply-templates select="cdi:field[contains($fieldsToCopy, @name)]">
<xsl:sort select="@name"/>
</xsl:apply-templates>
Так вот, запускаю я тест, он падает, ожидаемый ответ не совпадает с моим. Смотрю, почему — в actual_transformed_response.xml вижу дополнительные поля: inn и snils
Сижу, пытаюсь вкурить, откуда они взялись. В перечислении полей их нет... Может, я неправильно добавила сам XSLT в тест? Может, берется из директории выше? Смотрю туда, хм, нет, там вообще другие поля..
Потупила, пошла к разработчику. Вместе выяснили, что условие contains работает как вхождение названия поля в перечисленное мной. Я сказала, что хочу видеть innTrusted, а в итоге получила два поля: inn и innTrusted, так как inn входит в строку innTrusted
Чего только не узнаешь, в общем ツ
Обошли эту проблему такой конструкцией:
<!-- А вот из полей нам все неинтересны. Конкат нужен, чтобы не попали лишние поля, inn входит в innTrusted -->
<xsl:apply-templates select="cdi:field[contains($fieldsToCopy, concat(@name, '|'))]">
<xsl:sort select="@name"/>
</xsl:apply-templates>
Комментариев нет:
Отправить комментарий