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ライセンスの下で公開されています。
貢献
プルリクエストやイシューの報告を歓迎します。貢献する前に、以下の手順を確認してください:
- このリポジトリをフォーク
- 機能ブランチを作成 (
git checkout -b feature/amazing-feature) - 変更をコミット (
git commit -m 'Add some amazing feature') - ブランチにプッシュ (
git push origin feature/amazing-feature) - プルリクエストを作成
サポート
問題や質問がある場合は、GitHubのイシューを作成してください。
ライセンス
MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5e2029b132d347210c7cbf0a966facf20d6298deb882814e66fea5c71a964368
|
|
| MD5 |
a055672a792ee0c1ca3b30f6210d76de
|
|
| BLAKE2b-256 |
a4cb54f8735a0065c153b25a1115167b515814b1560091ce68681050d3ef0ccd
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e19821464af59e2576ffca4c800d0578754b0489549eb769b3161c525cf7a6aa
|
|
| MD5 |
5bcd9d4410e670fc57a24831ec9bd4be
|
|
| BLAKE2b-256 |
bfbc4429b1552492bc81b8cba0773505548c3ad004daa41430fbb4396d3da654
|