PHPUnit и Unit и Functional тесты

Установка и настройка PHPUnit. Написание Unit-тестов. Создание инфраструктуры функциональных тестов для API. Анализ тестового покрытия.

Скрытый контент
Комментарии (31)
Александр
2020-01-11 21:30

Большая просьба. Добавьте пожалуйста в .gitignore папки .idea.

Ответить
Deworker Pro
2020-01-12 05:59

У всех редакторы могут быть разные. В Git для этого можно указать глобальный игнор:

git config --global core.excludesfile ~/.gitignore

и добавлять папки своих редакторов туда:

echo '.idea' >> ~/.gitignore
Ответить
Александр
2020-01-15 05:49

Спасибо

Ответить
Arunas
2020-01-12 14:22

спасибо за замечательный урок.

Ответить
Arunas
2020-01-12 14:22

возможно ли тест: множественный запрос (напр. 100 раз в сек) от одного и того же IP, т.е. что-бы обнаружить атаку? как организована такая защита на Slim? как лучше организовать защиту? Будет о защите на уроках?

Ответить
Deworker Pro
2020-01-13 09:48

Да, добавим Rate Limiter.

Ответить
Arunas
2020-01-13 12:14

Срасибо

Ответить
Ruslan
2020-01-13 21:59

Странно, чтоб сайт на PHP сам боролся с DDOS. Просто поставьте ограничение в фаерволе ведь он наверное для этого. Да и вообще по ситуации, есть различные ситуации - разные решения.

Ответить
Алексей
2020-01-15 14:54

Согласен. Если по серьезному начнут ddos-ить, то в первую очередь ляжет сервер. До web приложения не дойдет

Ответить
Ruslan
2020-01-15 15:29

rate limit можно наложить на любой порт и на 80, 443 тоже.

Ответить
Denis
2020-01-12 20:45

В чем разница между PhpUnit и Codeception? Почему во всех уроках используете PhpUnit?

Ответить
Deworker Pro
2020-01-13 10:32

Codeception построен поверх PHPUnit, дополняя его своими модулями для готовых фреймворков и позволяя делать функциональные и приёмочные тесты в своём Cest-стиле.

Он с модулями удобен как быстрое решение для готовых фреймворков, но неудобен для кастомных проектов с вынесенным фронтендом.

Поэтому мы возьмём оригинальный PHPUnit для тестов API, отдельный JS-фреймворк для тестов JS и отдельный BDD-фреймворк для приёмочных тестов всей системы.

Ответить
Юрий
2020-01-15 11:38

Дмитрий, спасибо за урок, все замечательно, а был ли у Вас опыт использования мутационного тестирования? Если да, то что думаете по этому поводу? Спасибо.

Ответить
Дмитрий Елисеев
2020-01-17 14:53

Особо не использовал из-за медленной работы, но вещь полезная.

Ответить
Sergei
2020-01-27 18:07

Дмитрий, подскажите любезно, что с правами не так. Винда =/ Докер и консоль от администратора запущено. Докер ап работет исправно, сайт поднимается. А вот make init. Ерунда какая то, есть идеи? Спасибо.

docker-compose run --rm api-php-cli composer install
Loading composer repositories with package information
Nothing to install or update
Generating autoload files
docker run --rm -v /cygdrive/c/projects/demo-auction/api:/app -w /app alpine chmod 777 var
chmod: var: No such file or directory
make: *** [Makefile:27: api-permissions] Error 1
Ответить
Deworker Pro
2020-01-27 20:27

А что выводит команда ls ?

docker run --rm -v ${PWD}/api:/app -w /app alpine ls -l
Ответить
Sergei
2020-01-27 20:43
$ docker run --rm -v ${PWD}/api:/app -w /app alpine ls -l
total 0
Ответить
Deworker Pro
2020-01-27 21:12

Docker-демон не видит виртуальную папку /cygdrive, которая. существует только в консоли Git.

Установите Make for Windows и запускайте команды в консоли PowerShell.

Ответить
Sergei
2020-01-27 21:47

Установил эту утилиту, выполняю её из powerShell:

ocramius/package-versions: Generating version class...
ocramius/package-versions: ...done generating version class
docker run --rm -v /api:/app -w /app alpine chmod 777 var
chmod: var: No such file or directory
make: *** [api-permissions] Fehler 1
PS C:\Users\Symfony\Projects\demo-auction>

Странно, а остальные команды работают

Ответить
Deworker Pro
2020-01-28 06:58

В -v /api:/app адрес должен подставляться из ${PWD} абсолютный C:\Users\...

Ответить
Sergei
2020-01-28 21:21

Странное поведение, потому что PWD в консоли работает:

PS C:\Users\Symfony\Projects\demo-auction> echo ${PWD}

Path
----
C:\Users\Symfony\Projects\demo-auction

Прописал прямо путь, ошибок не выбросило.

Nothing to install or update
Generating autoload files
ocramius/package-versions: Generating version class...
ocramius/package-versions: ...done generating version class
docker run --rm -v C:/Users/Symfony/Projects/demo-auction/api:/app -w /app alpine chmod 777 var
PS C:\Users\Symfony\Projects\demo-auction>
Ответить
Deworker Pro
2020-01-31 07:32

Значит та консоль подменяет $PWD на свой /cygdrive

Ответить
Sergei
2020-01-31 14:44

Скорее всего. Но конкретно предыдущий лог из консоли это из powershell и make утилиты. и PWD в повершелле работает корректно.

PS C:\Users\Symfony\Projects\demo-auction> echo ${PWD}

Path
----
C:\Users\Symfony\Projects\demo-auction

Но ошибка все равно сыпется. Ерунда какая то :(

Ответить
KonTuzh
2020-02-11 20:06

Я на винде прописал путь так и все работает: docker run --rm -v //${PWD}/api://app -w /app alpine chmod 777 var

Ответить
Ruslan
2020-02-04 12:30

У меня таже проблема, ломается на этом месте. Подскажите, что мы хотим добится в этом месте?

api-permissions:
	docker run --rm -v ${PWD}/api:/app -w /app alpine chmod 777 var

Если только установить права на var. Но если ,я не запущу эту команду, то получу теже права:

PS C:\projects\Docker\eliseev\demo-auction> docker run --rm -v ${PWD}/api:/app -w /app alpine ls -l
total 152
drwxrwxrwx    1 root     root          4096 Jan 23 21:20 bin
-rwxrwxrwx    1 root     root          1037 Feb  4 09:57 composer.json
-rwxrwxrwx    1 root     root        144228 Feb  4 09:57 composer.lock
drwxrwxrwx    1 root     root          4096 Jan 23 21:20 config
drwxrwxrwx    1 root     root          4096 Jan 21 15:16 docker
-rwxrwxrwx    1 root     root           553 Feb  4 09:57 phpcs.xml
-rwxrwxrwx    1 root     root          1011 Feb  4 09:57 phpunit.xml
-rwxrwxrwx    1 root     root           670 Feb  4 11:05 psalm.xml
drwxrwxrwx    1 root     root          4096 Jan 21 15:16 public
drwxrwxrwx    1 root     root          4096 Jan 21 15:16 src
drwxrwxrwx    1 root     root          4096 Feb  4 11:05 tests
drwxrwxrwx    1 root     root          4096 Jan 23 17:52 var
drwxrwxrwx    1 root     root          4096 Feb  4 12:11 vendor

Можно ли в данном случае обойтись без абсолютного пути? ${PWD}/api

Ответить
Deworker Pro
2020-02-05 12:20

Да, только устанавливаем права. Для docker-compose нужны относительные пути, а для docker требуются только абсолютные.

Ответить
Ruslan
2020-02-04 12:41

Дошел до 27 минуты, у меня не видны тесты:

PS C:\projects\Docker\eliseev\react_slim> docker-compose run --rm api-php-cli vendor/bin/phpunit
PHPUnit 8.5.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 7.4.1 with Xdebug 2.9.1
Configuration: /app/phpunit.xml



Time: 1.3 seconds, Memory: 4.00 MB

No tests executed!
Ответить
Deworker Pro
2020-02-05 12:20

А phpunit.xml настроен верно?

Ответить
Ruslan
2020-02-05 16:33

Я в тупиковых ситуациях смотрю ваши комиты и беру от туда:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/8.5/phpunit.xsd"
         bootstrap="vendor/autoload.php"
         executionOrder="depends,defects"
         forceCoversAnnotation="true"
         beStrictAboutCoversAnnotation="true"
         beStrictAboutOutputDuringTests="true"
         beStrictAboutTodoAnnotatedTests="true"
         cacheResultFile="var/.phpunit.result.cache"
         verbose="true">
  <testsuites>
    <testsuite name="default">
      <directory suffix="Test.php">tests</directory>
    </testsuite>
  </testsuites>

  <filter>
    <whitelist processUncoveredFilesFromWhitelist="true">
      <directory suffix=".php">src</directory>
    </whitelist>
  </filter>

  <php>
    <env name="APP_ENV" value="test" force="true"/>
    <env name="APP_DEBUG" value="1" force="true"/>
  </php>
</phpunit>
Ответить
Алекс
2020-02-05 19:35

попробуйте выполнить команду composer dump-autoload

Ответить
Rodion
2020-02-05 20:16

Всем добрый вечер. У кого то зависает загрузка видео на скорости 1.25 или 1.5? C интернетом перебоя нет. Это не в первый раз.

Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий