スキップしてメイン コンテンツに移動

メタテスト・テストデータ - Selenium デザインパターン & ベストプラクティス

Seleniumデザインパターン & ベストプラクティス『Selenium デザインパターン & ベストプラクティス』を読んだ。読み進めていくと、Seleniumを使ってテストを書き始め、それを成長させながらパターンを入していくシナリオを追うことになる。ストーリィのあるシナリオに沿って読み進めていけるので、パターンカタログより入りやすい。そう言えば『実践テスト駆動開発』もこの書き方だった。

最近、テストコードよりテストデータに関心が向いているので、「4章 データ駆動テスト」はちょっとスピードを落としてじっくり読んでいたように思う。特に、Default Valuesパターンとfakerライブラリに関する記載を、読んでは悩み読んでは悩みを繰り返している。

Default Patternsパターンでは、テストの関心でないデータにはデフォルト値を使う。"xUnit Test Patterns" でいうところのDummy Objectパターンに近いと思う。その利点と欠点は次のとおり。欠点1は比較的軽いと思う。テストヘルパに寄せたり、許容できるレベルまで軽減できる。より深刻なのは、欠点2の方だ。バグを見つけられないリスクが高くなる。
  • 利点
    1. 知る必要があるものだけに知らせる
    2. テストがシンプルになる
    3. 焦点を絞れる
    4. 重要な値だけを上書きする
  • 欠点
    1. 上書きを実装する必要がある
    2. データが均一になる

そのデフォルト値として実際に入力されそうなデータを使いたい、というのがfakerライブラリのモチベーションのようだ。ここはnullも候補になるDummy Objectパターンとは大きく違う。テストレベルの違いが出ている。
どんなテストであっても、できるだけ実際のシナリオに近い入力データを目指すべきです。
テストの関心ではないからテスト設計はしないにしろ、確かにあまりにも非現実的なデータだと、サービス開始直後に足下を掬われるかもしれない。デザインの文脈でいうところの "Lorem Ipsum" のようなものだろう。

本書では触れられていないけれど、fakerライブラリで実際に入力されそうなデータを作る代わりに、実際に入力されたデータ(いわゆる移行データ)を使う選択肢もあると思う。そもそも存在しないとかセキュリティ制約にひっかかるとか、使えない場合も多いだろうけれど、使えるなら実際のシナリオそのものを入力データにできる。

ただ、入力データとして移行データを使おうと考えると、『継続的デリバリー』のこの警告を思い出して、逡巡する。
何よりもまず、プロダクションデータのダンプを取得して受入れテスト用にテストデータベースに投入したいという誘惑に負けないこと。
統制のとれた最小限のデータセットを保守しよう。
Selniumの文脈での「入力データ」はデータベースのレコードではなくて画面への入力値だから、直接言及されているわけではない。でも、画面への入力値に移行データを使用するとなると、データベース側もそれに整合させる必要が出てくる。それなら、データベース側も移行データを使用したくなるのは不自然ではない。

「画面からは移行データを入れるのにデータベースには入れないの?」
「移行データを使えるのにどうして使わないの?」

どちらの質問にも明確な答えが出ない。移行データを参考にしたデータセットを保守するのが、現実解だろうか。でも、移行データの品質問題でテストがストップする可能性があるのが悩ましい。

テストデータの管理、難しい。「4.7 まとめ」に書いてあるとおりだ。
正直なところ、テストデータを管理することは、テスト自動化における唯一かつ最大の難作業です。複雑さの観点から見ると、複雑なウェブページ上の要素を見つけることなど、テストデータを扱うことに比べればかわいいものです。
テストデータをテスト(あるいは評価)するメタテストが欲しくなる。

このブログの人気の投稿

北へ - ゴールデンカムイ 16

『ゴールデンカムイ 15』、『〃 16』を読んだ。16巻を読み始めてから、15巻を買ったものの読んでいなかったことに気がつく。Kindle版の予約注文ではままあること。 15巻は「スチェンカ・ナ・スチェンク」、「バーニャ(ロシア式蒸し風呂)」と男臭いことこのうえなし。軽くWebで調べてみたところ、スチェンカ・ナ・スチェンク (Стенка на стенку) はロシアの祭事マースレニツァで行われる行事のようだ[1]。それなりになじみ深いものらしく、この行事をタイトルに据えたフォークメタルStenka Na StenkuのMVが見つかった。 16巻では杉元一行は巡業中のサーカスに参加することになる。杉元と鯉登の維持の張り合いが、見ていて微笑ましい。鯉登は目的を見失っているようだが、杉元もスチェンカで我を失っていたので、どっこいどっこいか。なお、サーカス/大道芸を通じた日露のつながりは、実際にもこのような形だったようだ[2]。 個々のエピソードから視線を上げて、全体の構図を眺めてみると、各勢力がすっかり入り乱れている。アシㇼパは尾形、キロランケ、白石とともにアチャの足跡を辿り、そのあとを鶴見のもとで家永の治療を受けた杉元が鯉登、月島を追っている。今更だけれど、杉元やアシㇼパは、第七師団と完全に利害が衝突していると考えていないはずだった。一方で、土方一味も入墨人皮を継続。むしろ彼らの方が第七師団との対立が深刻だろう。さらに北上するキロランケはまた別の目的で動いているようだけれど、なんで尾形も一緒なんだっけ? 『進撃の巨人』に引き続き、これもそろそろ読み返す時期か。 [1] 5つの暴力的な伝統:スラヴ戦士のようにマースレニツァを祝おう - ロシア・ビヨンド [2] ボリショイサーカスの源流は、ロシアに渡った幕末日本の大道芸人たちにあった 脈々と息づく「クールジャパン」 | ハフポスト

戦う泡沫 - 終末なにしてますか? もう一度だけ、会えますか? #06, #07

『終末なにしてますか? もう一度だけ、会えますか?』の#06, #07を読んだ。 『終末なにしてますか? もう一度だけ、会えますか?』の#06と#07を読んだ。#06でフェオドールの物語がひとまずは決着して、#07から第二部開始といったところ。 これまでの彼の戦いが通過点のように見えてしまったのがちょっと悲しい。もしも#07がシリーズ3作目の#01になっていたら、もう少し違って見えたかもしれない。物語の外にある枠組みが与える影響は、決して小さくない。 一方で純粋に物語に抱く感情なんてあるんだろうか? とも思う。浮かび上がる感情には周辺情報が引き起こす雑念が内包されていて、やがて損なわれてしまうことになっているのかもしれない。黄金妖精 (レプラカーン) の人格が前世のそれに侵食されていくように。

リアル・シリアル・ソシアル - アイム・ノット・シリアルキラー

『アイム・ノット・シリアルキラー』(原題 "I Am Not a Serial Killer")を見た。 いい意味で期待を裏切ってくれて、悪くなかった。最初はちょっと反応に困るったけれど、それも含めて嫌いじゃない。傑作・良作の類いではないだろうけれど、主人公ジョンに味がある。 この期待の裏切り方に腹を立てる人もいるだろう。でも、万人受けするつもりがない作品が出てくるのって、豊かでいいよね(受け付けないときは本当に受け付けないけれど)。何が出てくるかわからない楽しみがある。