Как протестировать веб-сервисы с помощью PHPUnit? - PullRequest
4 голосов
/ 23 декабря 2009

Я хочу протестировать пару веб-сервисов SOAP. Какие типы тестов я могу запустить?

Ответы [ 3 ]

8 голосов
/ 21 июня 2012

Гораздо лучше тестировать локальные потребительские классы с помощью макетов SoapClient, которые возвращают предварительно записанный XML-результат результатов, поскольку модульные тесты предназначены для быстрой работы и независимости от удаленных служб.

  • Создайте класс Mock для вашего класса Client (у вас должен быть объект-обертка, чтобы SoapClient мог его тщательно протестировать)
  • Используйте $this->returnValue() для возврата предварительно записанных XML-ответов или заголовков, ожидаемых вашей системой

См .: http://www.phpunit.de/manual/current/en/test-doubles.html

Если ваша система зависит от доступности этих удаленных служб, вы можете внедрить службу наблюдения, которая проверяет, доступен ли ресурс, но это не то, что следует делать в самих модульных тестах.

С уважением, Томас

0 голосов
/ 12 мая 2013

Я нашел http://www.versioneye.com/package/fakeweb это

FakeWeb - помощник для фальсификации веб-запросов в Ruby. Это работает на глобальный уровень, без изменения кода или написания обширных заглушек.

0 голосов
/ 23 декабря 2009

Тестирование веб-службы SOAP будет таким же, как тестирование «локального» метода: вам нужно вызвать этот метод, передать ему некоторые параметры и проверить возвращаемое значение, чтобы убедиться, что оно соответствует параметрам Вы дали.

Конечно, с веб-сервисами вызов будет немного сложнее, так как вам придется работать с SoapClient для вызова метода, но идея все равно будет та же .

Самые большие проблемы, которые я вижу:

  • Медленные вызовы веб-сервисов (они проходят через сеть) , что означает, что выполнение ваших тестов займет время - что означает, что вы не сможете выполнять их так часто
  • С веб-сервисом у вас может быть более одной возможной причины сбоя; это означает, что у вас будет больше проблем с выяснением причины неудачного теста:
    • Может произойти сбой, потому что есть ошибка - это идеальный случай
    • Но может произойти сбой, потому что удаленный сервер не работает
    • или потому что сеть не работает
    • И, возможно, совсем другие возможные причины
  • Конечно, поскольку код будет выполняться на удаленном сервере, а не на компьютере, на котором работает PHPUnit, будет намного сложнее получить покрытие кода (например)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...