Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Сложности с отправкой soap запроса в codeception

codeception
webservices
php
Теги: #<Tag:0x00007f7b6d6e4e08> #<Tag:0x00007f7b6d6e4c28> #<Tag:0x00007f7b6d6e4ae8>

(Kirill “Eats Full Lemons” Fimchenko) #1

Добрый день!
Начал пробовать xml запросы в codeception, возникли проблемы с отправкой запроса. В тестовом классе для теста сделал $data с содержимым xml страницы

$o = new ApiTester($scenario);
$o->sendSoapRequest('search', $data); 
$o->seeSoapResponseContainsXPath('//SomeField');

В файле конфигурации в endpoint указал адрес для wsdl запроса.
Тест фейлится на 2ом этапе т.к. не находит указанное поле, но тест фейлится почти мгновенно, а тестируемый сервис ответ даст только в течении 10 секунд. В логах тестируемого сервиса, нет запроса. Что я упустил? По документации не нашел.

И для отладки теста, было бы круто получить текст ответа в переменную, это возможно? В документации об этом ни слова(


(Stan) #2

ошибка случайно не эта https://github.com/Codeception/Codeception/issues/1930 ? в 2.1.3 не пофиксено?


(Kirill “Eats Full Lemons” Fimchenko) #3

Эту ошибку находил, проблема не в этом, во всяком случае я обновился до 213 и результат тотже. Но хотя бы на вскидку, я все учел? не понимаю что мог упустить. В пхп соап подключен… Где еще могут быть затупы?


(Михаил Братухин) #4

А привести больше кода можно? Лог выполнения на клиенте не ведется разве?

Вот эту статью читали?
Неофициальный перевод документации по Codeception

Ничего не хочу сказать про Codeception, т.к. мало с ним знаком, но когда вы спрашивали совет по автоматизации в общих вопросах, то я вам “прозрачно” намекнул, что для удобства автоматизации и тестирования вам скорее всего подойдет SoapUI куда как больше. Там конечно хватает своих чудес, но если уж запрос ушел, то ушел. XML видно и легко редактировать прямо в самой среде. Причем можно менять значения как Request, так и Response, чтобы например, отладить “проверки” даже при неработающей тестовой среде, а потом когда выдадут “рабочий” билд, то на нем уже прогнать тесты с “правильными” проверками, чтобы они убедились, что исправления именно что исправили данный функционал.

Хотя выбирать конечно вам и не последнюю роль тут играет и личное восприятие инструмента. Если он по какой-то причине кажется “сложным”, “неудобным” и “непонятным”, то такая автоматизация будет идти через силу и не будет вызывать восторга ни у работника, ни у заказчика.


(Kirill “Eats Full Lemons” Fimchenko) #5

Могу лишь добавить конфиг, больше тут кода нет.

class_name: ApiTester
 modules:
     enabled:
         - \Helper\Api
         - PhpBrowser:
             url: http://test.ru
         - SOAP:
             depends: PhpBrowser
             url: http://test.ru
            endpoint: http://test.ru?wsdl

Урлы указать не могу.

Ведется, но проблема как раз в том что запрос все таки не отправился, не понимаю почему. В этом как раз вопрос, что я не так настроил в кодецептионе.

Соап юи не вызывает восторга, попытки автоматизации вызывают. Проблем с заказчиками нет, я пытаюсь сам разобраться с автоматизацией в свободное время, применяя наработки к рабочему проекту.


(Michael Bodnarchuk) #6

В --debug режиме тоже ничего нет? Выложите сюда свой конфиг и лог выполнения теста

Сори, SOAP модуль давно не обвновлялся, я уже забыл что там может пойти не так. Скорее всего таки проблема с реквестом… Создайте пожалуйста Issue на гитхабе. Скорее всего помочь обнаружить что именно у вас идет не так не получится, но вот добавить какой-то инфы для отладки мы вполне сможем.


(Михаил Братухин) #7

SOAP

Веб сервисы SOAP являются более сложным случаем. Вам необходим PHP собранный с поддержкой SOAP. Кроме того необходимо хорошее знание XML
soap.installation.php

У вас такой PHP?


(Kirill “Eats Full Lemons” Fimchenko) #8

Конфиг приложил выше, т.к. только разбираюсь с функционалом там 1 класс пока.
В дебаг режиме выяснилось, что в респонс попадает описание схемы, типо как если перейти по ссылке https://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl
В соапюи на этот адрес запроса нормально отправляются и при стандартном использовании __doRequest тоже все ок.


(Michael Bodnarchuk) #9

а почему он на один пробел съехал влево? Это ошибка в конфиге или при копировании? Если в конфиге, то могут быть проблемы )

Может ошибка из-за того, что endpoint включает в себя GET-параметр ’?wsdl’. Может без него попробовать?


(Kirill “Eats Full Lemons” Fimchenko) #10

Ошибка при попытке отформатировать конфиг для местного форума)

Гет нужен, т.к. в зависимости от гета будет другая схема типо domain?wsdl=search и domain?wsdl=book это разные схемы. Обычный соапклиент проглатывает такие урлы.


(Михаил Братухин) #11
  1. так и не понятно какая сборка PHP у вас используется. И еще, с не-SOAP сценариями на обычных страницах тесты работают из примеров?

  2. если чутка привести конфиг к более хтоническому виду, то все также не работает? У скриптовых языков типа питона и php есть какая-то попаболь с пробелами и т.п.

    class_name: ApiGuy
    modules:
    enabled: [PhpBrowser, SOAP, ApiHelper]
    config:
    PhpBrowser:
    url: http://serviceapp/
    SOAP:
    endpoint: http://serviceapp/api/v1/


(Kirill “Eats Full Lemons” Fimchenko) #12

Не понял вопроса, в пхп.ини соап у меня прописан и настроен, обычный соап клиент работает, об этом писал выше.

Поправил конфиг как в Вы указали, перебилдил проект, все равно в ответ получаю описание схему. Все таки наверно проблема в том что у меня урл до всдл адреса указан с гет параметром.


(Михаил Братухин) #13

А если проверить на Soap сервисах других или на Mock-заглушках, только без гет параметра? Будет работать? Может и в этом проблема. Надо убедиться, что без параметра Soap у вас работает.