【问题标题】:Docker - What is the easiest way to launch phpunit testsuiteDocker - 启动 phpunit testsuite 的最简单方法是什么
【发布时间】:2016-06-07 09:43:50
【问题描述】:

有没有什么好方法(更快)在 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 testing docker phpunit docker-compose


    【解决方案1】:

    无需对容器 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 一致的容器命名(它预先添加目录名称并附加一个用于缩放的数字)在带有 docker exec 的单个容器上运行 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
    

    【讨论】:

      【解决方案2】:

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

      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 并手动更新命令以在新容器 id 上启动 phpunit。

      运行此命令将仅返回 container_id :

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

      这里有一些解释:

      -n=-1 : 显示 n 个最后 ceated 容器

      -q : 只显示数字 ID

      有关选项的更多详细信息,请点击docker documentation

      注意: 例如,如果我们将 phpunit.xml 文件移动到 /myproject/ 根目录下,则 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 应该给它一个可预测的名称,您在过滤器中使用它。
      • 如何使用容器名称?我尝试了不同的命令来使用容器名称,但它不起作用......你能给我一个使用命令的例子吗?我还是个 docker 初学者,可能会错过一些技巧……
      • @MohamedSalemLamiri 你知道为什么我没有颜色吗(也尝试了 --colors[=always] 标志)。另一方面,命令docker-compose exec phpfpm vendor/bin/phpunit 运行时不考虑颜色;它必须是docker exec -it ...
      • 感谢您的评论我已经删除了死链接。
      猜你喜欢
      • 2017-08-23
      • 1970-01-01
      • 2019-11-09
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 2023-03-17
      • 2012-06-28
      • 2012-06-01
      相关资源
      最近更新 更多