入力フォームをテストするときは、正常な値のほかに、未入力や形式が違う値も試しますよね。ケースごとに同じ操作手順を書いていると、画面が変わったときの修正も大変です。この記事では、共通の手順を一つにまとめ、ケースごとに変わるデータを分ける方法を見ていきます。
この記事のポイント
データを追加するときは、入力値と期待結果に加えて「何を確認するための値か」も書いておきます。後から見直したときに、似たデータが必要な理由や、足りない観点を確認しやすくなります。
共通の操作と、ケースごとに変わる値を分ける
ログイン画面なら、画面を開いて、メールアドレスとパスワードを入力し、送信して結果を見る流れは共通です。ケースごとに変わるのは、入力するメールアドレスやパスワード、期待する結果です。
この変わる部分をデータとして管理し、共通の手順に渡してテストします。これがデータドリブンテストの基本です。自動テストだけでなく、手動テストの表を作るときにも使える考え方です。
入力データと一緒に、確認する観点を書く
ログイン画面なら、たとえば次のように整理できます。実際にテストするときは、エラーの文言や表示位置、送信できるかどうかも、対象の仕様に合わせて具体的に書いてください。
| 観点 | 入力条件 | 確かめること |
|---|---|---|
| 正常系 | 有効な認証情報 | 想定したユーザーでログインする |
| 認証エラー | パスワードが一致しない | 認証に失敗し、定義された案内が表示される |
| 必須入力 | メールアドレスが空欄 | 未入力を検知し、仕様どおり案内する |
| 形式 | メール形式ではない文字列 | 形式の違いを仕様どおり扱う |
| 境界 | 仕様で定めた上限の前後 | 許容する範囲と拒否する範囲を区別する |
自動テストではデータごとに実行する
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に候補を出してもらった場合も、仕様に合っているか、期待結果は正しいか、重複や優先度はどうかを確認してください。候補の数だけでは、必要なリスクを確認できているかは判断できません。