60 lines
2.1 KiB
Python
60 lines
2.1 KiB
Python
"""pytestでフィクスチャやフック(テスト実行前後に差し込む処理)を管理するモジュール"""
|
|
import os
|
|
from datetime import datetime
|
|
|
|
import boto3
|
|
import pytest
|
|
from moto import mock_s3
|
|
from py.xml import html # type: ignore
|
|
|
|
from . import docstring_parser
|
|
|
|
|
|
@pytest.fixture
|
|
def aws_credentials():
|
|
"""Mocked AWS Credentials for moto."""
|
|
os.environ["AWS_ACCESS_KEY_ID"] = "testing"
|
|
os.environ["AWS_SECRET_ACCESS_KEY"] = "testing"
|
|
os.environ["AWS_SECURITY_TOKEN"] = "testing"
|
|
os.environ["AWS_SESSION_TOKEN"] = "testing"
|
|
|
|
|
|
@pytest.fixture
|
|
def s3_client(aws_credentials):
|
|
with mock_s3():
|
|
conn = boto3.client("s3", region_name="us-east-1")
|
|
yield conn
|
|
|
|
|
|
# 以下、レポート出力用の設定
|
|
|
|
def pytest_html_report_title(report):
|
|
# レポートタイトル
|
|
report.title = "CRMデータ連携 CRMデータ取得機能 単体機能テスト結果報告書"
|
|
|
|
|
|
def pytest_html_results_table_header(cells):
|
|
del cells[2:]
|
|
cells.insert(3, html.th("Cases"))
|
|
cells.insert(4, html.th("Arranges"))
|
|
cells.insert(5, html.th("Expects"))
|
|
cells.append(html.th("Time", class_="sortable time", col="time"))
|
|
|
|
|
|
def pytest_html_results_table_row(report, cells):
|
|
del cells[2:]
|
|
cells.insert(3, html.td(html.pre(report.cases))) # 「テスト内容」をレポートに出力
|
|
cells.insert(4, html.td(html.pre(report.arranges))) # 「期待結果」をレポートに出力
|
|
cells.insert(5, html.td(html.pre(report.expects))) # 「期待結果」をレポートに出力
|
|
cells.append(html.td(datetime.now(), class_="col-time")) # ついでに「時間」もレポートに出力
|
|
|
|
|
|
@pytest.hookimpl(hookwrapper=True)
|
|
def pytest_runtest_makereport(item, call):
|
|
outcome = yield
|
|
report = outcome.get_result()
|
|
docstring = docstring_parser.parse(str(item.function.__doc__))
|
|
report.cases = docstring.get("Cases", '') # 「テスト内容」を`report`に追加
|
|
report.arranges = docstring.get("Arranges", '') # 「準備作業」を`report`に追加
|
|
report.expects = docstring.get("Expects", '') # 「期待結果」を`report`に追加
|