Automatisches Testen in PHP

Inhaltsverzeichnis

  • Linting
  • Statische Analyse
  • Unit Tests

Linting

Was ist Linting?

  • Linting ist die Untersuchung des Codes auf mögliche Fehler
  • Linting wird vor Commits durchgeführt
  • Linting wird auf der Maschine des Entwicklers und dem CI-Server durchgeführt

Linting

Ziele

  • Sicherstellen, dass die Syntax korrekt ist
  • Sicherstellen, dass die Formatierung dem Standard entspricht
  • Den manuellen Aufwand bei Code-Reviews reduzieren

Linting

Werkzeuge

  • PHP Code Sniffer
  • PHP Parallel Lint

Linting

Konfiguration (gitlab)

# .gitlab-ci.yml
php-lint:
  stage: test
  image: php:8.1-cli
  script:
    - vendor/bin/parallel-lint --exclude vendor/ .
psr-12-lint:
  stage: test
  image: php:8.1-cli
  script:
    - vendor/bin/phpcs --standard=PSR12 --extensions=php --ignore=vendor/ .

Statische Analyse

Was ist Statische Analyse?

  • Statische Analyse analysiert den Code ohne ihn auszuführen
  • Statische Analyse wird normalerweise ausgeführt bevor der Code committed wird
  • Statische Analyse wird normalerweise auf der Entwicklungsmaschiene und dem CI-Server durchgeführt

Statische Analyse

Ziele

  • Potentielle Bugs finden
  • Potentielle Performanceprobleme finden
  • Potentielle Sicherheitsprobleme finden

Statische Analyse

Werkzeuge

  • Psalm
  • PHPStan
  • Phan

Statische Analyse

Konfiguration (gitlab)

# .gitlab-ci.yml
static-analysis-psalm:
    stage: test
    image: php:8.1-cli
    script:
    - vendor/bin/psalm --show-info=false
static-analysis-phpstan:
    stage: test
    image: php:8.1-cli
    script:
    - vendor/bin/phpstan analyse --no-progress
static-analysis-phan:
    stage: test
    image: php:8.1-cli
    script:
    - vendor/bin/phan

Unit Tests

Was sind Unittests?

  • Unit Tests testen eine kleine Codeeinheit in Isolation
  • Unit Tests werden üblicherweise ausgeführt bevor Code comittet wird
  • Unit Tests werden üblicherweise auf der Entwicklermaschiene und dem CI-Server ausgeführt

Unit Tests

Ziele

  • schnelles Feedback für Entwickler
  • sicherstellen, dass Code nur das tut, was er soll
  • sicherstellen, dass keine Regressionen vorkommen
  • sicherstellen, dass der Code leicht zu ändern ist
  • sicherstellen, dass Fehler frühzeitig gefunden werden

Unit Tests

Werkzeuge

  • PHPUnit
  • infection

Unit Tests

Konfiguration (gitlab)

# .gitlab-ci.yml
unit-test:
  stage: test
  image: php:8.1-cli
  script:
    - vendor/bin/phpunit --coverage-text
mutation-test:
  stage: test
  image: php:8.1-cli
  script:
    - vendor/bin/infection --min-msi=60 --min-covered-msi=60
Vielen Dank für Ihre Aufmerksamkeit!