テストをする

Bokehは大規模な多言語プロジェクトであり,様々な広範なテストやテストツールに依存して性能を維持し,後退を防ぐ.本章では,開発環境において様々なテストをローカルに動作させ,テストを作成するガイドラインと,継続テストのインフラに関する情報について述べる.

地元でテストを実行する

Bokehテストの実行を試みる前に、運行が成功したことを確認してください 設置を開始する “開発者案内”の一節。

テスト選択

さらに、いくつかのプラットフォームでは、いくつかのテストは、サーバをテストするために多くのファイルを開くので、開いたファイル記述子の最大数を増加させる必要があるかもしれない。

ulimit -n 1024

すべての基本的なPythonユニットテストを実行するには、リポジトリのトップレベルで以下のコマンドを実行してください。

pytest tests/unit

これには,Seleniumや適切なWebドライバ(たとえばchromedriverやgeckodriver)をインストールする必要があるセルテストが含まれていることに注意されたい.これらのセルテストを排除するためには、以下のコマンドを実行することができます。

pytest -m "not selenium" tests/unit

BokehJSユニットテストのみを実行するには、実行してください。

pytest tests/test_bokehjs.py

あるいは、ナビゲーションすることもできます bokehjs ソースが署名したサブディレクトリは、以下のように実行される。

node make test

すべての利用可能なテスト(PythonおよびJSユニットテスト、サンプルテストおよび統合テスト)を実行することができます。 from the top-level directory 以下のコマンドを実行することにより:

pytest

タグテスト関数および選択/キャンセル選択それらの実行に関する情報をもっと知るためには、以下のpytest文書を参照してください custom markers それがそうです。現在定義されているテストタグリストは以下のとおりである.

  • sampledata これはテストです要求は bokeh.sampledata ダウンロードされる

  • selenium :セレンが必要なテスト

コードカバー率

カバー範囲内の任意のテストを実行するには、以下のコマンドを使用してください。

pytest --cov=bokeh

Bokehパケットのサブセットを報告するには、例えば -cov=bokeh/models それがそうです。

他の選択

捕捉基準出力なしでどんなテストも実行するためには、使用してください。

pytest -s

ご参照ください pytest 以下の詳細については、ドキュメントをご覧ください pytest そしてその選択です

例示的なテスト

♪the examples テストは、一連のBokeh例を実行し、以前のバージョンと比較するために画像を生成する。現在および以前の画像および任意の画像差異が表示されるレポートが生成される。

注釈

画像が異なれば,テストは現在失敗しないので,テストレポートを手動で検査しなければならない.

サンプルテストのみを実行するには、以下のコマンドを実行してください。

pytest --report-path=examples.html test_examples.py

テスト実行後、以下の位置でテストレポートを見ることができます examples.html それがそうです。現地で実行される時、あなたは試験報告書を好きなように命名することができる。

サンプルテストの実行速度が遅くなる可能性があり、実行速度を速くするためには、並列化することができます。

pytest --report-path=examples.html -n 5 test_examples.py

どこへ行くのか. n ご利用になるコア数です。

さらに、サンプルテストは、以下の位置でファイルを見ることができるログファイルexamples.logを生成します。 examples.log テストを実行する同一ディレクトリに位置する.

執筆テスト

Bokehの保守性の維持を支援するためには,すべてのタッチコードの引き出し要求は通常,関連するテストをともなうべきである.特定の場合には例外がある可能性があるが,デフォルト仮説はテストのないPull要求を統合できない.

Pythonユニットテスト

Pythonユニットは、BokehライブラリのPython部分を維持する基本機能をテストします。以下の共通指導原則は、Pythonユニットテストを作成するのに役立ちます。

絶対輸入量

Bokehのセルテストが可能な限り再配置と明確になることを確保するために,テストファイルにはつねに絶対導入が優先されている.便利な場合、テスト中のモジュール全体を導入して使用します:

  • GOODimport bokeh.models.transforms as bmt

  • GOODfrom bokeh.embed import components

  • BADfrom ..document import Document

火試し.

すべての新しいテストは使用して仮定すべきです pytest 試運転、治具、パラメータ化テストなどに対して、新しいテストは not 使用 unittest Python標準ライブラリのモジュールです。

JavaScriptユニットテスト

これらのテストはBokehプロジェクトのBokehJS部分の機能を維持する.BokehJSテストは bokehjs/test それがそうです。それらは薪の“望む”スタイルで書かれている。新しいテストファイルが追加された場合、ディレクトリ内の対応するエントリ index ファイルを追加しなければなりません。

統合テスト

新しいスクリーンショット統合テストを追加するためには、まず、既存のスクリーンショットテスト、例えば既存のスクリーンショットテストを実行できることを確認します。 tests/integration/annotations/test_whisker.py それがそうです。新しいスクリーンショットテストは、以下の一般的な指導原則に従うべきである。

  • できるだけ簡単に(テスト中の内容のみを含み,追加のものは何も含まない)

  • 私はもっと好きです bokeh.models API

新たなテストが作成されると,比較のための基本映像が必要となる.新しい基本イメージを作成するには、追加してください --set-new-base-screenshot あなたの基準に達します pytest テストを実行するように命令します。これは名前を生成します base__<name_of_your_test>.png 適切なカタログにあります。使用 git この画像をリポジトリに記入し,すべての未来のスクリーンショットテストをこの基本画像と比較する.

連続集積

一度に押すたびに master branch or any Pull Request branch on GitHub automatically triggers a full test build on the GithubCI 持続的にサービスを統合する。

以下のURLですべての現在および以前のバージョンのリストを表示することができます:https://github.com/bokeh/bokeh/action

配置

多くのファイルが生成構成に影響を与えます:

  • conda.recipe/meta.yaml

    BokehのためのConda noarchパッケージの説明を構築する.このファイルは、依存関係を構築およびテストする(ただし、実行時ではない)唯一の真のソースである。

  • setup.py

    Sdistパッケージおよび“dev”インストールを構築するために使用されます。このファイルはまた実行時に項に依存する唯一のソースである.

  • setup.cfg

    生成および試験ツールを含むいくつかのグローバル構成、例えば versioneer そして pytest それがそうです。

礼儀作法.

CIサービスは、オープンソースプロジェクトに限られた無料構築者を提供します。いくつかの注意事項は、これらの限られた資源を必要とする他の人を理解するのに役立ちます。

  • GitHubにプッシュされる前に、グループ提出は、意味のある作業ブロックに分割される(すなわち、各提出はプッシュされない)。

  • もし高かったら examples テストを必要としない(例えば、文書引き出し要求のみの場合)、テキストを追加することによって、テストを無効にすることができる

    [ci disable examples]
    

    あなたの提出メッセージに送ります。