Docker를 사용하여 PHPUnit 실행 환경을 쉽게 구성할 수 있습니다!

9349 단어 DockerPHPPHPUnittech

개시하다


나는 PHP 단일체로 테스트 코드를 연습하고 싶어서 신속하게 Docker로 PHPUnit의 실행 환경을 만들었다.
Docker를 배우고 있으니 프로그램 등을 정리해 봅시다.
※ 질문이 있으면 지적하세요!
소스 여기 있어요.
https://github.com/shun57/phpunit-docker

디렉토리 구조


테스트 대상과 테스트 코드는 src 아래에 배치됩니다.
PHPUnit만 시도하고 싶은 사람은 위의 github에서 소스를 구하세요.
├─ src/
│  ├─ tests/FunctionTest.php // テストコード
│  └─ function.php // テスト対象
├─ Dockerfile
└─docker-compose.yml

Docker를 통한 PHPUnit 환경 구축


Docker Hub로 이미지 선택


기본적으로 다음 두 가지 모델 중에서 선택한다.

  • PHP 공식 이미지에 PHPUnit(composier 등 사용)
  • 넣기
  • PHPUnit 이미지로 구축된 ex. 찾기 phpunit/phpunit
  • !
    2 비교적 간단하지만 예를 들어 기록된 phpuniit/phpuniit의 이미지 업데이트가 비교적 낡고 PHP7 시스템과 PHPUnit의 버전도 비교적 낡기 때문에 실제 프로젝트에서 사용할 수 없을 가능성이 높다.주의하십시오.
    이번에는 PHP의 실행 환경에 Compooser PHPUnit 모드 1을 추가해 보려고 합니다.

    PHP의 공식 이미지 참조 확인

  • PHP 공식 이미지
  • 참고서에 많이 기재되어 있으니 한 번 보세요.

    이미지 선택


    PHP의 공식 인상에는 또 다른 종류가 있으니 확인해 주세요.
    Image Variants의 장을 확인한 후 다음 종류를 확인할 수 있습니다.
    웹 서버가 포장된 인상도 있다.
    이번에는 테스트php:<version>-cli만 진행한다.
  • php:-cli
  • php: -Apache(PHP 및 Apache)
  • php: -fpm(PHP 및 PHP-FPM)
  • php: -alpine(PHP 및 Alpine Linux)
  • 버전 선택


    PHP 공식 이미지의 Tags에서 의도 이미지를 찾습니다.
    이번에는 php:8.0-cli를 사용해야 하기 때문에 먼저 검색해서 있는지 확인해 보세요.
    찾으면 기본 인상으로 Docker file을 쓰세요.

    Docker file 만들기


    나는 Docker file을 만드는 몇 가지 방법이 있다고 생각한다.
    예를 들어 아래의 느낌.
    ① 이미지에 composier를 포함하고 용기에 phpunit를 넣습니다.phpunit도 용기 내나 외부에서 실행됩니다.
    ②제작docker-entrypoint.sh[1],phpunit를 설치하거나 실행할 수도 있다.
    ② 더 스마트한 것 같지만 이번에는 ①모드로 컨테이너에 phpunit와 phpunit를 설치하고 싶다.
  • FROM에 기본 이미지를 지정합니다.
  • Dockerfile
    FROM php:8.0-cli
    
  • PHPUnit 설치에 필요한 zipunzip.
  • Dockerfile
    RUN apt-get update && apt-get install -y \
        zip \ 
        unzip
    
  • Composier를 설치합니다.
  • 확인Composter의 공식 이미지 후 고장 제거된 곳은 다음과 같다.
    Docker17.05 이상의 경우 다중 무대 구조를 가져왔습니다. 여기에 기재된 명령을 통해 Composier를 이미지에 포함할 수 있습니다.
    매우 편리합니다.
    ※ 다단계 구축에 대해서는 다른 기사를 참고하세요.
    우리의 이미지의 목적은 호스트에 PHP가 설치되어 있지 않아도 Compooser를 신속하게 실행할 수 있도록 하는 것이다.컨테이너 내의 PHP 버전에 의존하지 마십시오.Composier를 기본 이미지나 공식 이미지로 사용하는 것을 권장하지 않기 때문에 지원하는 PHP 버전마다 Composier 이미지를 제공하지 않습니다.
    권장 사항:
    (최고) 자체 구축 이미지를 만들고 Composier를 설치합니다.
    주: Docker 170.05는 다무대 건축을 도입하여 이것을 크게 간소화시켰다.COPY --from=composer /usr/bin/composer /usr/bin/composerDockerfile
    COPY --from=composer /usr/bin/composer /usr/bin/composer
    
  • 마지막으로 작업 디렉토리를 설정합니다.이번에는
  • Dockerfile
    WORKDIR /app
    
    지금까지 Docker file의 완성이었습니다.
    결국 이런 느낌이야.
    Dockerfile
    FROM php:8.0-cli
    
    RUN apt-get update && apt-get install -y \
        zip \ 
        unzip
    
    COPY --from=composer /usr/bin/composer /usr/bin/composer
    
    WORKDIR /app
    

    docker-compose.yml 만들기

  • version 지정
  • docker-compose에서 사용하는 버전의 정의인 것 같습니다.
    ※ 하지만 최신 버전인 Docker Compose V2는 필요 없을 것 같습니다.
    상세한 상황은 이곳의 보도를 참고하세요. 제가 소개하겠습니다.
    https://zenn.dev/miroha/articles/whats-docker-compose-v2
    docker-compose.yml
    version: '3.9'
    
  • 서비스 지정
  • 컨테이너를 정의합니다.
    용기에서 테스트를 실행할 수 있도록 테스트 원본을 마운트합니다.
    컨테이너에 넣을 tty를 설정합니다.
    docker-compose.yml
    services: # 各コンテナを定義
      php: # サービス名
        build: ./ # 構築時のオプションを指定、今回はDockerfileの場所
        container_name: phpunit # 任意のコンテナ名を設定
        tty: true # コンテナを起動し続ける
        volumes:
          - type: bind # バインドマウントをする(ホストとコンテナを同期)
            source: ./ # マウントするソースの場所(ホスト)
            target: /app # マウント先の場所
    

    PHPUnit 설치 및 실행, 제거


    터미널에서 Docker file이 있는 작업 디렉토리로 이동하여 명령을 실행합니다.

    컨테이너 구축, 시작


    백그라운드에서 운행하다.
    용기가 시작되고 있는지 확인하십시오.
    $ docker compose up -d
    

    컨테이너에 들어가다


    컨테이너에 들어가서 Composter를 확인하세요.
    $ docker container exec -it phpunit bash
    // コンテナ内
    ~:/app# composer -V
    Composer version 2.3.5 ~
    

    Composter로 PHPUnit 설치


    ~:/app# composer require --dev phpunit/phpunit
    
    composer.호스트 측에서도 json이나vender 파일을 만들 수 있습니다.
    composer.json
    {
        "require-dev": {
            "phpunit/phpunit": "^9.5"
        }
    }
    

    PHPUnit 실행


    PHPUnit의 실행 가능 여부를 확인합니다.
    내 github 소스를 사용하면 한 번 실패할 거야.
    ~:/app# vendor/bin/phpunit src/tests --testdox
    
    PHPUnit 9.5.20 #StandWithUkraine
    
    Function
     ✔ Morning
     ✘ Evening
       │
       │ Failed asserting that two strings are identical.
       │ --- Expected
       │ +++ Actual
       │ @@ @@
       │ -'hello!'
       │ +'good evening!'
       │
       │ /app/src/tests/FunctionTest.php:17
       │
    
     ✔ Hello
    
    Time: 00:00.311, Memory: 6.00 MB
    
    Summary of non-successful tests:
    
    Function
     ✘ Evening
       │
       │ Failed asserting that two strings are identical.
       │ --- Expected
       │ +++ Actual
       │ @@ @@
       │ -'hello!'
       │ +'good evening!'
       │
       │ /app/src/tests/FunctionTest.php:17
       │
    
    FAILURES!
    Tests: 3, Assertions: 3, Failures: 1.
    

    컨테이너 중지/삭제


    PHPUnit만 수행하는 컨테이너이기 때문에.
    사용이 끝난 후 삭제합니다. 사용하고자 할 때 실행합니다.
    ~:/app# exit
    // コンテナの停止・削除
    $ docker compose down 
    

    끝맺다


    왜냐하면 실제 작업에서 Docker를 거의 사용하지 않았어요.
    이것만 해도 힘들어요.
    기본적인 걸 이해했으니까 개인적으로 잘 쓰고 싶어요!
    각주
    컨테이너가 시작될 때 ENTRYPOINT에서 하우징을 실행할 수 있는 도우미 스크립트입니다.처음 시작할 때 명령을 실행하고 싶을 때만 사용합니다.↩︎

    좋은 웹페이지 즐겨찾기