WordPress/phpunit-test-runnerをAMIMOTOでローカル実行してみた覚書

https://github.com/WordPress/phpunit-test-runnerをためしてみましたので、覚書です。 起動 AMIMOTO AMIをAWSで起動させます。 WordPress自体のセットアッ […]

広告ここから
広告ここまで

目次

    https://github.com/WordPress/phpunit-test-runnerをためしてみましたので、覚書です。

    起動

    AMIMOTO AMIをAWSで起動させます。
    WordPress自体のセットアップは特に必要ありません。

    ソースの準備

    ランナーのソースコードをサーバー内にダウンロードします。

    $ git clone https://github.com/WordPress/phpunit-test-runner.git
    $ cd phpunit-test-runner
    

    環境変数の設定が必要なので、設定していきます。
    ※レポートやCIで必要な値もありますが、今回はただユニットテストを実行するだけなので最小限の値にしました。

    $ cp .env.default .env
    $ vim .env
    # Path to the directory where files can be prepared before being delivered to the environment.
    export WPT_PREPARE_DIR=/tmp/wp-test-runner
    
    # Path to the directory where the WordPress develop checkout can be placed and tests can be run.
    # When running tests in the same environment, set WPT_TEST_DIR to WPT_PREPARE_DIR
    export WPT_TEST_DIR=/tmp/wp-test-runner
    
    # Credentials for a database that can be written to and reset.
    # WARNING!!! This database will be destroyed between tests. Only use safe database credentials.
    export WPT_DB_NAME={InstanceID}
    export WPT_DB_USER=wp_b8cm5ffbihc92
    export WPT_DB_PASSWORD='XXXXXXXXx'
    export WPT_DB_HOST=localhost
    

    WPT_DB_***の値については、以下のようにすることで確認できます。

    $ sudo cat /opt/local/{InstanceID}.json | jq ".wordpress.db"
    {
      "db_name": "{InstanceID}",
      "user_name": "wp_b8cm5ffbihc92",
      "password": "XXXXXXXXx",
      "host": "localhost"
    }
    

    最後に環境変数を読み込ませましょう。

    $ source .env
    

    準備

    ソースのダウンロードなどをやります。

    $ php prepare.php
    ...
    cd '/tmp/wp-test-runner/tests/phpunit/data/plugins/'; unzip wordpress-importer.zip; rm wordpress-importer.zip
    Archive:  wordpress-importer.zip
       creating: wordpress-importer/
       creating: wordpress-importer/languages/
      inflating: wordpress-importer/languages/wordpress-importer.pot  
      inflating: wordpress-importer/parsers.php  
      inflating: wordpress-importer/readme.txt  
      inflating: wordpress-importer/wordpress-importer.php  
    Replacing variables in wp-tests-config.php
    Success: Prepared environment.
    

    WPT_PREPARE_DIRに指定したディレクトリにテスト用のソースが用意されます。

    デプロイからやり直したいなぁと思った時は、WPT_PREPARE_DIRに指定したパスに対してrm -rf ./すればいいと思います。

    test.phpでのユニットテスト

    prepare.php実行後に以下を実施します。

    $ php test.php
    Environment variables pass checks.
    cd '/tmp/wp-test-runner'; php phpunit.phar
    sh: gs: command not found
    sh: convert: command not found
    sh: gs: command not found
    sh: convert: command not found
    Installing...
    Running as single site... To run multisite, use -c tests/phpunit/multisite.xml
    Not running ajax tests. To execute these, use --group ajax.
    Not running ms-files tests. To execute these, use --group ms-files.
    Not running external-http tests. To execute these, use --group external-http.
    PHPUnit 5.7.21 by Sebastian Bergmann and contributors.
    
    .............................................................   61 / 8046 (  0%)
    .............................................................  122 / 8046 (  1%)
    .............................................................  183 / 8046 (  2%)
    .............................................................  244 / 8046 (  3%)
    .............................................................  305 / 8046 (  3%)
    .............................................................  366 / 8046 (  4%)
    .............................................................  427 / 8046 (  5%)
    .............................................................  488 / 8046 (  6%)
    .............................................................  549 / 8046 (  6%)
    .............................................................  610 / 8046 (  7%)
    .............................................................  671 / 8046 (  8%)
    .............................................................  732 / 8046 (  9%)
    .............................................................  793 / 8046 (  9%)
    .............................................................  854 / 8046 ( 10%)
    .............................................................  915 / 8046 ( 11%)
    .............................................................  976 / 8046 ( 12%)
    ............................................................. 1037 / 8046 ( 12%)
    .......
    

    ただし素のAMIMOTOでは以下のようなエラーが発生します。


    1) Tests_oEmbed_HTTP_Headers::test_rest_pre_serve_request_headers PHPUnit_Framework_Exception: sh: gs: command not found sh: convert: command not found sh: gs: command not found sh: convert: command not found

    これはImageMagickが入っていないために起きることですので、入れてからリトライしましょう。

    $ sudo yum install ImageMagick -y
    $ php test.php
    ...
    ............................................................. 6893 / 8046 ( 85%)
    ............................................................. 6954 / 8046 ( 86%)
    ............................................................. 7015 / 8046 ( 87%)
    ............................................................. 7076 / 8046 ( 87%)
    ............................................................. 7137 / 8046 ( 88%)
    ............................................................. 7198 / 8046 ( 89%)
    ............................................................. 7259 / 8046 ( 90%)
    ............................................................. 7320 / 8046 ( 90%)
    ............................................................. 7381 / 8046 ( 91%)
    ............................................................. 7442 / 8046 ( 92%)
    ............................................................. 7503 / 8046 ( 93%)
    ............................................................. 7564 / 8046 ( 94%)
    ............................................................. 7625 / 8046 ( 94%)
    ............................................................. 7686 / 8046 ( 95%)
    ............................................................. 7747 / 8046 ( 96%)
    ............................................................. 7808 / 8046 ( 97%)
    ............................................................. 7869 / 8046 ( 97%)
    ............................................................. 7930 / 8046 ( 98%)
    ............................................................. 7991 / 8046 ( 99%)
    ........................................SSSSSSSSSSSSSSS       8046 / 8046 (100%)
    
    You should really fix these slow tests (>150ms)...
     1. 673ms to run Tests_WP_Site_Icon:test_insert_cropped_attachment
     2. 556ms to run WP_Test_REST_Users_Controller:test_get_items_pagination_headers
     3. 407ms to run Tests_Media:test_wp_calculate_image_srcset_no_date_uploads
     4. 403ms to run Tests_Media:test_wp_calculate_image_srcset_no_width
     5. 377ms to run WP_Test_REST_Users_Controller:test_get_items_per_page
     6. 344ms to run Tests_WP_Site_Icon:test_create_attachment_object
     7. 317ms to run WP_Test_REST_Posts_Controller:test_get_items_pagination_headers
     8. 259ms to run WP_Test_REST_Users_Controller:test_get_additional_field_registration
     9. 245ms to run WP_Test_REST_Users_Controller:test_get_items_page
     10. 236ms to run Tests_Import_Import:test_double_import
    ...and there are 19 more above your threshold hidden from view
    
    Time: 1.35 minutes, Memory: 442.00MB
    
    OK, but incomplete, skipped, or risky tests!
    Tests: 8046, Assertions: 34440, Skipped: 32, Risky: 8.
    

    成功しました。

    後片付け

    ソースの削除も1コマンドでできます。

    $ php cleanup.php
    Environment variables pass checks.
    rm -rf '/tmp/wp-test-runner/.git'
    rm -r '/tmp/wp-test-runner'
    

    今後について

    今回は省略しましたが、Host Test Resultsにレポートすることができます。

    APIキーをリクエストする必要がありますので、そちらについてはまたおってトライしてみます。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark