入力フォームをテストするときは、正常な値のほかに、未入力や形式が違う値も試しますよね。ケースごとに同じ操作手順を書いていると、画面が変わったときの修正も大変です。この記事では、共通の手順を一つにまとめ、ケースごとに変わるデータを分ける方法を見ていきます。

この記事のポイント

データを追加するときは、入力値と期待結果に加えて「何を確認するための値か」も書いておきます。後から見直したときに、似たデータが必要な理由や、足りない観点を確認しやすくなります。

共通の操作と、ケースごとに変わる値を分ける

ログイン画面なら、画面を開いて、メールアドレスとパスワードを入力し、送信して結果を見る流れは共通です。ケースごとに変わるのは、入力するメールアドレスやパスワード、期待する結果です。

この変わる部分をデータとして管理し、共通の手順に渡してテストします。これがデータドリブンテストの基本です。自動テストだけでなく、手動テストの表を作るときにも使える考え方です。

入力データと一緒に、確認する観点を書く

ログイン画面なら、たとえば次のように整理できます。実際にテストするときは、エラーの文言や表示位置、送信できるかどうかも、対象の仕様に合わせて具体的に書いてください。

入力データと一緒に、確認する観点を書く
観点入力条件確かめること
正常系有効な認証情報想定したユーザーでログインする
認証エラーパスワードが一致しない認証に失敗し、定義された案内が表示される
必須入力メールアドレスが空欄未入力を検知し、仕様どおり案内する
形式メール形式ではない文字列形式の違いを仕様どおり扱う
境界仕様で定めた上限の前後許容する範囲と拒否する範囲を区別する

自動テストではデータごとに実行する

pytestでは、parametrizeを使うと、一つのテスト関数に複数の引数セットを渡せます。仕組みがわかるように、文字列を整数に変換する短い例を載せました。入力する文字列と、変換後に期待する値をセットにしています。

import pytest

@pytest.mark.parametrize(
    "value, expected",
    [("0", 0), ("42", 42), ("-1", -1)],
)
def test_integer_conversion(value, expected):
    assert int(value) == expected

確認したいリスクに合わせてデータを選ぶ

データを追加しやすくなると、似た入力も増えがちです。その分、レビューや実行にも時間がかかります。上限・下限の境界や、過去の不具合が起きた条件など、何を確認したいかを決めて値を選びます。

AIに候補を出してもらった場合も、仕様に合っているか、期待結果は正しいか、重複や優先度はどうかを確認してください。候補の数だけでは、必要なリスクを確認できているかは判断できません。

参考資料

QA Notebook / テスト設計

次の記事テスト手法の選び方:入力値・操作の流れ・状態の違いで考える記事一覧へ戻る