2014-03-11 3 views
5

Я пытаюсь найти разумный подход к получению отчета о покрытии кода для кода, который вызывается из теста через HTTP. В основном я тестирую свой собственный API так, как он должен быть вызван, но из-за этого PHPUnit/Xdebug не знают о выполнении кода внутри одной и той же базы кода.Анализ покрытия кода PHPUnit для кода, вызываемого по HTTP

В принципе, чего я хочу достичь, уже сделано с использованием PHPUnit Selenium extension, но я не запускаю Selenium, я вызываю код через OAuth2 Client, который, в свою очередь, использует завиток.

Можно ли назвать мой API с помощью параметра GET, который запускает отчет о покрытии кода и чтобы PHPUnit прочитал этот отчет и объединил его с другим кодом? Есть ли проект, который уже делает это, или мне нужно прибегнуть к написанию моего собственного расширения PHPUnit?

+0

Почему при запуске кода не запускается коллекция пробных данных Xdebug? FWIW, есть еще один инструмент покрытия, который будет собирать данные о покрытии кода независимо от того, как он вызывается, и имеет встроенную возможность объединить данные о охвате, собранные в отдельных запусках, в интегрированное представление. Но это не основанный на Xdebug. Это требование? –

+0

Ну, код вызывается через HTTP, как я понимаю, PHPUnit просит Xdebug создать файл покрытия, но ничего не добавляется в этот файл, когда код вызывается через HTTP, поскольку это другой процесс, в котором Xdebug не рекомендуется создавать такой файл. – akirk

ответ

0

ОП говорит, что проблема в том, что коллекция покрытия кода на основе Xdebug не будет/не может собирать данные о покрытии, поскольку Xdebug не включен во всех (PHP) процессах, выполняющих код.

Казалось бы, только два выхода из этого.

1) Найдите способ включить Xdebug во всех вызванных процессах. Я не знаю, как это сделать, но я ожидаю, что для интерпретатора PHP будет некоторый параметр конфигурации. Я также не могу говорить о том, можно ли объединить отдельные отчеты о покрытии на основе Xdebug в один. На первый взгляд, необработанные данные покрытия абстрактно просто представляют собой набор сигналов «это местоположение, выполненное», поэтому слияние должно быть просто объединенным. Как эти комплекты собираются и кодируются, это может сделать это более проблематичным.

2) Найдите решение покрытия, которое не включает Xdebug, поэтому включен ли Xdebug или нет, не имеет значения. Инструмент «Проверка покрытия PHP» в моей компании (см. Био) не использует Xdebug, поэтому он может собирать требуемые данные тестового покрытия без проблем. Вы можете скачать его и попробовать; есть встроенный пример сбора тестового покрытия, вызванный точно HTTP-запросами. Инструмент обладает встроенной способностью объединить отдельные тестовые покрытия в интегрированный результат. (Я бы предоставил прямую ссылку, но некоторые SO люди против этого противно).

+0

Как я уже писал в своем вопросе, ваш подход 1) уже используется расширением PHPUnit Selenium. Я действительно надеялся, что кто-то уже сделал это без Selenium - я предполагаю, что это можно сделать через расширение PHPUnit. – akirk

Смежные вопросы