プロジェクトのPHPUnitテストを1C-Bitrixで起動します

こんにちは同僚、



この投稿では、bitrixプロジェクトで単体テストを実行する方法を示したいと思います。 このようなプロジェクトのユニットテスト中に、システムコアの初期化に関する既知の問題があります。 以下に、どうやってそれを解決したかを示します。





タスクは、開発が進行中のローカルとテストサイトおよびプロジェクトサイトの両方でテストを実行することでした。 また、テストをリモートで実行するには、 /usr/bin/php



の権限を持つサーバーへのsshアクセス、またはサーバーにインストールされたPHPインタープリターが必要です。



以下は、段階的な指示のようなものです。



PHPUnitのインストールと構成



PHPUnitは、Composerを介して依存関係としてプロジェクトにインストールされます。



ファイル/local/composer/composer.json





 { "require-dev": { "phpunit/phpunit": "4.5.*" } }
      
      







次に、PHPUnit xml構成ファイル、ブートストラップ、およびBitrixカーネル初期化ファイルが/ local / tests /フォルダーに追加されます。

画像



次に、ファイルの内容について詳しく説明します。

ファイル/local/tests/phpunit.xml.dist





 <phpunit bootstrap="bootstrap.php" colors="true"> <testsuites> <testsuite name="My Test Suit"> <directory>./</directory> </testsuite> </testsuites> </phpunit>
      
      





ここで、現在のフォルダー内のブートストラップファイルへのパスを示し、 colorsパラメーターをtrue



設定しtrue



。 また、現在のフォルダー(ローカル)のパス「test-take」を設定して、PHPUnitが* Test.phpで終わるすべてのファイルをテストクラスを持つファイルと見なすようにします。



/local/tests/bootstrap.php



ファイル

 // bitrix/modules/main/include.php with no authorizing and Agents execution require_once "main_include_no_permission.php"; function initBitrixCore() { // manual saving of DB resource global $DB; $app = \Bitrix\Main\Application::getInstance(); $con = $app->getConnection(); $DB->db_Conn = $con->getResource(); // "authorizing" as admin $_SESSION["SESS_AUTH"]["USER_ID"] = 1; }
      
      





ここでは、わずかに「短縮された」ファイル/bitrix/modules/main/include.php



れており、検証とエージェントの起動とそこからの承認を切り取ります(たとえば、これがないと、テストはボックスポータルの承認フォームのhtmlコードでドロップされますが、承認が必要な場合)。

initBitrixCore()



関数を以下に定義します。これは、グローバル$ DBオブジェクトのプロパティにデータベースリソースを明示的に保存し(これがない場合、 CDatabase :: ForSql()メソッドのエラーでしばしば消えます)、セッションのスーパーシステム管理者の識別子も保存します。

このリンクの GitHubからコードを取得できます。



テスト用にPhpStormを構成する



IDE自体の構成は、 公式ドキュメントに記載されているものと特に違いはありません。 一番下の行は、リモートサーバーにリモートPHPインタープリターを追加し、IDE設定でPHPUnitを構成し、PHPUnit構成をRun \ Debug Configurationに追加する必要があるということです。



リモートインタープリターを追加します。

設定-言語とフレームワーク-PHP





リモートインタープリターを追加する





表示された設定で、「SSH資格情報」を選択し、投稿の冒頭で説明した権限でサーバーへのアクセスを入力しました。



次に、 設定-言語とフレームワーク-PHP-PHPUnitに移動します。 そこで、「+」をクリックして、「By Remote Interpreter」を選択します。 新しく追加されたインタープリターを選択します。 PHPUnit Libraryブロックで、「カスタムオートローダーを使用」を選択します。 「スクリプトへのパス」で、Composerが作成するautoloader.php



ファイルを指定する必要があります。 そして、 Test Runnerブロックで、 /local/tests/phpunit.xml.dist



へのパスを指定します





次のステップは、次の場所にPHPUnit構成を作成することです。



表示されるウィンドウで、サーバー上のPHPUnitではなく通常のPHPUnitを追加することが重要です。 Test Runnerブロックの設定で、「Defined in the configuration file」を選択する必要があります



これが実際のセットアップ全体です。 これで、緑色の「実行」矢印ボタンをクリックすると、同様の領域が表示されます。





ここで、ローカルおよび戦闘のテストリモートサイトでテストを実行する要件を思い出します。 上記の公式ドキュメント記事で説明されているこのタスクは、必要なインタープリターとPHPUnit設定を追加することで解決されます。 次に、プロジェクトの設定でインタプリタが変更され、同じ緑色の矢印「実行」で同じテストが実行されますが、別のサーバーで実行されます(プロジェクトの転送後に「何も壊れない」を監視すると便利です)。



PhpStormを備えたリモートマシン上でSSHを介してPHPUnitテストを実行することは、特別な実行/デバッグ構成を必要としないという事実は、ユニットテストを実行する場所を簡単に切り替えることができることを意味します。 [プロジェクトの設定]からプロジェクトのPHPインタープリターを切り替える| PHPでは、他の設定を変更せずにローカルまたはリモートでPHPユニットテストを実行できます。




Bitrixの単体テストに関する資料はほとんどなく、より美しい方法がある可能性が高いため、コメントまたはコメント内の推奨事項を聞いてうれしいです。 テストに感謝します!



UPD:許可を正しくバイパスする方法を提案してくれたBusteR27に感謝します。 GitHubのbootstrap.phpを更新しました



All Articles