Docker - 启动 phpunit 测试套件的最简单方法是什么

Docker - What is the easiest way to launch phpunit testsuite

有什么好的方法(更快)在docker上启动phpunit?这是我过去常做的事情:

docker-compose build
docker-compose up
docker ps
docker exec <container_id> phpunit --configuration /myproject/src/Tests/phpunit.xml --testsuite testAllSuites

注意:我不想使用 Volume 来同步文件,所以现在每次我都必须重建项目时..我正在想办法在不指定 containe_id 的情况下在特定容器上启动测试 .. 是否可以使用构建名称启动它?

我只是想出了一个最简单的方法来在我的 php-fpm 容器上启动 php 单元测试,这里是命令:

docker exec -it $(docker ps -n=-1 -q --filter name=my_php_container_name --format="{{.ID}}") phpunit --configuration /myproject/src/Tests/phpunit.xml --testsuite testAllSuites

所以现在每当我在这里更改我的代码时我会做什么:

docker-compose build
docker-compose up
docker exec -it $(docker ps -n=-1 -q --filter name=my_php_container_name --format="{{.ID}}") phpunit --configuration /myproject/src/Tests/phpunit.xml --testsuite testAllSuites

所以这意味着我不必显示所有 docker 容器(docker ps)来获取 ID 并手动更新命令以启动 php新容器 ID 上的单元。

运行此命令将 return 只有 container_id :

docker ps -n=-1 -q --filter name=my_php_container_name --format="{{.ID}}"

这里有一些解释:

-n=-1 : 显示 n 个最后创建的容器

-q : 只显示数字 ID

有关选项的更多详细信息,请参见 docker documentation

注意: 例如,如果我们将 phpunit.xml 文件移动到 /myproject/ root 下 phpunit 命令可以更小,如果我们 运行 phpunit 它会自动加载 phpunit.xml 和 运行 下的所有测试您的 /Tests/... 文件夹和命令将是:

docker exec -it $(docker ps -n=-1 -q --filter name=my_php_container_name --format="{{.ID}}") phpunit

希望这可以帮助某人...

无需对容器 ID 进行复杂的查找,下面是一个示例,说明如何在 docker-compose:

中执行此操作
$ cat docker-compose.yml 
version: '2'

volumes:
  testvol:
    driver: local

services:
  testapp:
    image: busybox
    entrypoint: "top"
    volumes:
      - testvol:/data

  testapp2:
    image: busybox
    entrypoint: "top"
    volumes:
      - testvol:/data

$ ../bin/docker-compose up -d
Creating test_testapp_1
Creating test_testapp2_1

$ ../bin/docker-compose ps
     Name         Command   State   Ports 
-----------------------------------------
test_testapp2_1   top       Up            
test_testapp_1    top       Up            

$ ../bin/docker-compose exec testapp ls -l
total 40
drwxr-xr-x    2 root     root         12288 Mar 18 16:39 bin
drwxr-xr-x    2 root     root          4096 Jun 11 11:07 data
drwxr-xr-x    5 root     root           360 Jun 13 11:50 dev
drwxr-xr-x    2 root     root          4096 Jun 13 11:50 etc
drwxr-xr-x    2 nobody   nogroup       4096 Mar 18 16:38 home
dr-xr-xr-x  224 root     root             0 Jun 13 11:50 proc
drwxr-xr-x    2 root     root          4096 Mar 18 16:38 root
dr-xr-xr-x   13 root     root             0 Jun 13 11:50 sys
drwxrwxrwt    2 root     root          4096 Mar 18 16:38 tmp
drwxr-xr-x    3 root     root          4096 Mar 18 16:39 usr
drwxr-xr-x    4 root     root          4096 Mar 18 16:39 var

您还可以利用 docker-compose(它在目录名称前面加上一个数字以进行缩放)到 运行 各个容器上的 exec docker-compose docker exec:

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
069d40e3b6c7        busybox             "top"                    2 minutes ago       Up 2 minutes                                 test_testapp2_1
60e6d34d3b5a        busybox             "top"                    2 minutes ago       Up 2 minutes                                 test_testapp_1

$ docker exec test_testapp_1 ls -l
total 40
drwxr-xr-x    2 root     root         12288 Mar 18 16:39 bin
drwxr-xr-x    2 root     root          4096 Jun 11 11:07 data
drwxr-xr-x    5 root     root           360 Jun 13 11:50 dev
drwxr-xr-x    2 root     root          4096 Jun 13 11:50 etc
drwxr-xr-x    2 nobody   nogroup       4096 Mar 18 16:38 home
dr-xr-xr-x  226 root     root             0 Jun 13 11:50 proc
drwxr-xr-x    2 root     root          4096 Mar 18 16:38 root
dr-xr-xr-x   13 root     root             0 Jun 13 11:50 sys
drwxrwxrwt    2 root     root          4096 Mar 18 16:38 tmp
drwxr-xr-x    3 root     root          4096 Mar 18 16:39 usr
drwxr-xr-x    4 root     root          4096 Mar 18 16:39 var