Docker - 启动phpunit testsuite的最简单方法是什么

时间:2016-06-07 09:43:51

标签: php testing docker phpunit docker-compose

docker 上启动 phpunit 有什么好方法(更快)吗?这就是我以前做的事情:

\|(?=\||$|\n)

注意:我不想使用Volume来同步文件,所以每次我都需要重建项目..而我正试图弄清楚如何启动测试没有指定containe_id的特定容器..是否可以使用构建名称来启动它?

2 个答案:

答案 0 :(得分:1)

我只想找出一个在我的 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 :显示上次停用的容器

-q :仅显示数字ID

有关docker documentation

选项的更多详情

注意:例如,如果我们在 / myproject / root下移动phpunit.xml文件,phpunit命令可以更小,如果我们运行 phpunit 它将自动加载phpunit.xml并在 / Tests /...文件夹下运行所有​​测试,命令将为:

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

修改:

通过PHPstorm启动测试的另一个好方法: Running tests in PHPStorm with PHPUnit and Docker

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

答案 1 :(得分: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