Skip to main content

Tableau の .twb .twbx ファイルを解析・テストするツール

Project description

tabtest

Tableauの.twb/.twbxファイルを解析し、pytestでテストを実行できるPythonライブラリです。

概要

tabtestは、Tableauワークブックの構造を解析し、pytestを使用してワークブックの内容をテストできるようにするツールです。以下のようなテストが可能です:

  • データソースの存在確認
  • 計算フィールドの存在確認
  • ワークシートの設定確認
  • ダッシュボードのレイアウト確認
  • パラメータの設定確認
  • フィルターの設定確認

インストール

pip install tabtest

基本的な使用方法

1. ワークブックの解析

from tabtest import WorkbookParser

# ワークブックを解析
parser = WorkbookParser("./path/to/your/workbook.twb")
workbook = parser.workbook

# 基本情報の確認
print(f"ワークブック名: {workbook.name}")
print(f"データソース数: {len(workbook.datasources)}")
print(f"ワークシート数: {len(workbook.sheets)}")
print(f"ダッシュボード数: {len(workbook.dashboards)}")

2. pytestでのテスト

import pytest
from tabtest.suite.helpers import (
    assert_workbook_has_datasource,
    assert_workbook_has_sheet,
    assert_workbook_has_dashboard,
    assert_datasource_has_calculated_field,
)

def test_workbook_structure(workbook_fixture):
    """ワークブックの基本構造をテスト"""
    workbook = workbook_fixture
    
    # データソースの確認
    data_ds = assert_workbook_has_datasource(
        workbook, "mock_datasource"
    )
    
    # 計算フィールドの確認
    assert_datasource_has_calculated_field(
        data_ds, "mock_calculated_field"
    )
    
    # ワークシートの確認
    sheet = assert_workbook_has_sheet(workbook, "mock_sheet")
    assert sheet.mark_type == "bar"
    
    # ダッシュボードの確認
    dashboard = assert_workbook_has_dashboard(workbook, "mock_dashboard")
    assert dashboard.size_width == 1200
    assert dashboard.size_height == 800

3. 利用可能なフィクスチャ

汎用フィクスチャ(tabtestライブラリ提供)

pytestで以下の汎用フィクスチャが利用できます:

  • workbook_parser: カスタムワークブックパーサー
  • workbook: 解析済みワークブック
  • workbook_fixture: モックワークブック(tests/assets/mock_workbook.twb)

使用方法:

@pytest.mark.parametrize("workbook_parser", ["./path/to/your/workbook.twb"], indirect=True)
def test_workbook(workbook_parser):
    assert workbook_parser.workbook.name == "Expected Name"

@pytest.mark.parametrize("workbook_parser", ["./path/to/your/workbook.twb"], indirect=True)
def test_workbook(workbook):
    assert workbook.name == "Expected Name"
    assert len(workbook.datasources) > 0

def test_with_mock_workbook(workbook_fixture):
    """モックワークブックを使用したテスト"""
    workbook = workbook_fixture
    assert workbook.name == "Mock Workbook"
    assert len(workbook.datasources) > 0

ユーザー固有フィクスチャ

ユーザーはtests/fixtures.pyで固有のフィクスチャを定義できます:

# tests/fixtures.py
import pytest
from tabtest import WorkbookParser

@pytest.fixture
def my_workbook():
    """ユーザー固有のワークブックフィクスチャ"""
    parser = WorkbookParser("./path/to/your/workbook.twb")
    return parser.workbook

4. ヘルパー関数

以下のヘルパー関数が利用できます:

from tabtest.suite.helpers import (
    # ワークブックレベル
    assert_workbook_has_datasource,
    assert_workbook_has_sheet,
    assert_workbook_has_dashboard,
    
    # データソースレベル
    assert_datasource_has_field,
    assert_datasource_has_calculated_field,
    
    # ワークシートレベル
    assert_sheet_has_field_in_rows,
    assert_sheet_has_field_in_columns,
    assert_sheet_has_filter,
    
    # ダッシュボードレベル
    assert_dashboard_contains_sheet,
)

データモデル

WorkbookModel

ワークブック全体の情報を表すモデルです。

class WorkbookModel:
    name: str                    # ワークブック名
    datasources: List[DatasourceModel]  # データソース一覧
    sheets: Dict[str, WorksheetModel]   # ワークシート一覧
    dashboards: List[DashboardModel]    # ダッシュボード一覧
    parameters: List[ParameterModel]     # パラメータ一覧

DatasourceModel

データソースの情報を表すモデルです。

class DatasourceModel:
    name: Optional[str]          # データソース名
    caption: Optional[str]       # キャプション
    fields: List[DatasourceFieldModel]  # フィールド一覧

WorksheetModel

ワークシートの情報を表すモデルです。

class WorksheetModel:
    name: str                    # ワークシート名
    datasource_name: str         # データソース名
    filters: List[FilterModel]   # フィルター一覧
    rows: List[str]              # 行に配置されたフィールド
    columns: List[str]           # 列に配置されたフィールド
    mark_type: Optional[str]     # マークタイプ

DashboardModel

ダッシュボードの情報を表すモデルです。

class DashboardModel:
    name: Optional[str]          # ダッシュボード名
    dashboard_sheets: List[DashboardSheetModel]  # ダッシュボード内のワークシート
    size_width: int              # ダッシュボード幅
    size_height: int             # ダッシュボード高さ

使用例

詳細な使用例はexamples/ディレクトリを参照してください:

  • examples/basic_usage.py: 基本的な使用方法
  • examples/pytest_example.py: pytestでのテスト例

開発

セットアップ

# リポジトリをクローン
git clone https://github.com/your-username/tabtest.git
cd tabtest

# 仮想環境を作成
python -m venv .venv
source .venv/bin/activate  # Linux/Mac
# または
.venv\Scripts\activate     # Windows

# 依存関係をインストール
pip install -e .
pip install -e ".[dev]"

テストの実行

# すべてのテストを実行
pytest

# 特定のテストファイルを実行
pytest tests/test_workbook_parser.py

# 詳細な出力でテストを実行
pytest -v

コード品質チェック

# リンターを実行
ruff check .

# 型チェックを実行
mypy .

# フォーマットを実行
ruff format .

ライセンス

このプロジェクトはMITライセンスの下で公開されています。

貢献

プルリクエストやイシューの報告を歓迎します。貢献する前に、以下の手順を確認してください:

  1. このリポジトリをフォーク
  2. 機能ブランチを作成 (git checkout -b feature/amazing-feature)
  3. 変更をコミット (git commit -m 'Add some amazing feature')
  4. ブランチにプッシュ (git push origin feature/amazing-feature)
  5. プルリクエストを作成

サポート

問題や質問がある場合は、GitHubのイシューを作成してください。

ライセンス

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tabtest-0.1.0.tar.gz (32.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tabtest-0.1.0-py3-none-any.whl (29.6 kB view details)

Uploaded Python 3

File details

Details for the file tabtest-0.1.0.tar.gz.

File metadata

  • Download URL: tabtest-0.1.0.tar.gz
  • Upload date:
  • Size: 32.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.5

File hashes

Hashes for tabtest-0.1.0.tar.gz
Algorithm Hash digest
SHA256 5e2029b132d347210c7cbf0a966facf20d6298deb882814e66fea5c71a964368
MD5 a055672a792ee0c1ca3b30f6210d76de
BLAKE2b-256 a4cb54f8735a0065c153b25a1115167b515814b1560091ce68681050d3ef0ccd

See more details on using hashes here.

File details

Details for the file tabtest-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: tabtest-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 29.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.5

File hashes

Hashes for tabtest-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e19821464af59e2576ffca4c800d0578754b0489549eb769b3161c525cf7a6aa
MD5 5bcd9d4410e670fc57a24831ec9bd4be
BLAKE2b-256 bfbc4429b1552492bc81b8cba0773505548c3ad004daa41430fbb4396d3da654

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page