「ソフトウェア品質知識体系ガイド(第3版)」(2020年)
2021年の読書 :23冊目/目標30冊
そういえば、読んでない…ということで、流し読みしました。
やはり、情報としては原本をたどるのが一番いいですが、
こういった書籍で俯瞰的に見るのもたまにはいいですね。
メモ:時期に応じて出てくるバナーを回避したい
直接的ではないですが、E2Eテストでテストケースを考えるにあたって、ちょっと悩んだことがあったのでこちらにメモ。
問題
- 時期に応じてバナーが出てくるため、E2Eテストのアクションとして、バナーを閉じる動作があるときとないときがある。
例
解決策
- バナーの要素の有り無しを判定して、残りの手順を実行するようにする。
sample code
if(await this.bannerCloseButton.exists) { await t.click(this.bannerCloseButton); }
※Selecter関連は割愛
補足
ちなみに、このバナーはでかすぎるので、実行をウィンドウ最大かヘッドレスにしないと失敗する。
E2Eテスト関連はいつもウィンドウサイズで悩むな…。
「Agile Model-Based Systems Engineering Cookbook」(2021年)
2021年の読書 :22冊目/目標30冊
現状最新の書籍なのとタイトルにひかれて手に取ってみました。
本書ではMBSEをアジャイル開発の文脈でどのように適用するのかをプロセスを通して説明してくれている書籍です。
例えば…ユースケースをユーザーストーリーに分解するなどのやり方は非常に参考になりました。
モデルベースで開発する際にこの書籍を読み返したいなと思う書籍でした。
また、この書籍の五章では、モデルベースドテストについての話も触れられていていい感じです。
そして、その中で「テスト駆動モデリング(TDM)」という考え方が示されていました。
書籍としては、まずテストケースを考えてモデルを作っていくという話をしているのですが、
考え方としては今のテスト設計コンテストにおけるテスト開発プロセスに通じる内容だなと思いました。
例えば、こんな感じのサンプルとアクティビティはこんな感じでした。
①テストケースの定義 自然言語 ex.単一の光は、右のタイミングで正しい順序で色を経るべきである:RED TIME⇒B⇒YELLOW TIME。 ②小さなモデル化 ・状態遷移図(省略) ・内部ブロック図(省略) ③テストケースの適用(実行含む) ・シーケンス図(省略) ④欠陥修正
上記で書かれているテストケースは、テストケースよりはテスト要件もしくはテスト観点という感じでした。
何となく、ISTQBでいわれているMBTのテストモデル作成に似ている感じです。
このやり方は意外とテストクラスタ向けに話してもいい無いような気がします。
モデルを使ってテストしたいと考えている人にはお勧めの書籍です。
「End-to-End Web Testing with Cypress」(2021年)
2021年の読書 :22冊目/目標30冊
Testcafeの書籍を読んでいましたが、他にどんなE2Eテストのツールがあるかなと探してみると、「Cypress」が検索に引っかかることがありました。
なので、今回は「Cypress」の書籍を手に取り…TestCafeやSeleniumとはどう違うのかを頭に置きながら読んでみました。
テスト駆動開発(TDD)についても少しだけですが、解説がありました。
- TDD プロセス
- 実装する必要のある機能の定義
- 新しいテストを書く
- テストを実行して、テストが失敗するかどうかを確認します
- 合格するテストケースのコードを書く
- 追加された機能に対してテストを実行して、テストに合格することを確認します
- コードのリファクタリング
- このプロセスを繰り返す
また、TDDを実践するにあたって本書では、「開発が始まる前に終わりを視覚化すること」と書かれているのは簡潔で分かりやすかったです。
サンプルでは、下記の機能要件についてのシナリオを作成して実装していました。
機能要件 - 新しいtodoアイテムの追加 - ToDoアイテムの削除 - 追加されたToDoアイテムの表示 - 追加されたToDoアイテムの数を表示する
E2Eテストを構築する場合、基本はこのシナリオをWebアプリケーションと対応付けて実装していくわけですが、
読み解くにあたっては、実際の操作とコード上の振る舞いを一致させるには、通常手間をかけないといけないなという印象です。
ユースケース記述やアクティビティ図にしても一度コード上のUIに対応付けないといけないので、自然言語のスクリプトやモデルを書いたらそのまま解決するかというと、なかなか悩みどころです。
また、そういった操作を実装するにあたっては、要素(=セレクタ)を取得する必要があります。
この書籍でもセレクタで取得するための方法としてはいくつかあるということで下記が紹介されていました。
- data-cy - data-test - data-testid - id - class - tag - attributes - nth-child
Cypressの書籍だからWebマニュアルにも書いてある記述がそのまま推奨になっているのは納得なのですが、どうやら上記のうち、カスタムのdata-*属性を使うと良いらしいです。
それ以外の要素だとどうしても画面設計としてみたときに別の使われ方が意図されたり、他の変更の影響が受けやすいからなのだと思います。
また、Cypressは、少し前に触っていたTestCafeよりもデバッグがしやすく、UIも充実している良いテストフレームワークだなという印象でした。
もしクロスブラウザにもっと対応できていたら個人的にはこちらの方が使いやすい印象です。
少し残念だったところは、本書ではページオブジェクトパターンの実装が紹介されていなかったことでした。
最近のE2Eテストであれば基本は乗っていそうなイメージだったので…。
ですが、基本的な機能についてはSeleniumの書籍などと同様に網羅しているので、ひとまずシナリオテストを作成するには困らない内容だと思います。
メモ
- テストファイルの基本構造
// Module declarations import {module} from 'module-package'; // test body context('テスト目的', () => { beforeEach(() => { cy.visit('http://todomvc.com/examples/react/#/') }); describe('テストグループ', () => { it('runs sample test テスト名', () => { expect(2).to.eq(2); }) }) })
参考
ACM Learning Center
GitHub - PacktPublishing/End-to-End-Web-Testing-with-Cypress: End-to-End Web Testing with Cypress, published by Packt
React • TodoMVC
HTML5のカスタムデータ属性(data-*)を使ってリアルタイムにバリデーションする。 - Qiita
「Mastering TypeScript」(2021年)
2021年の読書 :21冊目/目標30冊
ひとつ前で読んだ「Programming TypeScript」が中級者以上の対象だったのでこちらを手に取ってみました。
こちら書籍の方が、小さいサンプルコードで解説してくれており、実行しながら確認できるのでいい感じです。
初学者の方は手に取ってもいい書籍だと思います。
まだまだぼんやりなので復習が必要なところ
ここは、Java Goldの勉強と並行して確認していこうかと思います。
今度のTypeScript関連の書籍としては、E2EテストかJestの書籍を探して読んでみようと思います。
「Programming TypeScript」(2019年)
「テスト駆動Python」(2018年)
- 作者:BrianOkken
- 発売日: 2018/08/29
- メディア: Kindle版
2021年の読書 :19冊目/目標30冊
出た当初に買っていたのですが、積読していたのでGWの消化目標の書籍の一つとして読んでみました。
内容としては、テスト駆動…というよりも、pytestの使い方というのがしっくりくる内容の本でした。
日本語の監修者である安井さんの記事の方がどちらかというと題名に近かった気がします。
感想ですが…
私は、最近はテスト自動化に関わることも多くなっており、自動テストのやり方について改めて勉強しています。
webブラウザでE2Eテストをどう構築するかという話がメインなのですが、こういったコードそのものを対象にしたテストはやはり基本だと思っています。
今回はpytestがメインだったのですが、基本的なテスト設計を考えたうえで本書を読むと、「テストを実装するためにやっぱりコードは書けないとね」と思うばかりです。
転職して一年目は、テスト設計だけでなく「テストをどうコーディング」していくかということももう少し勉強してみようかなと改めて思いました。
なので、例えば今回の書籍の内容を受けて、
マイヤーズ三角形問題の計算関数のモジュールをpythonで作成して、
テスト設計した結果をpytestで書いてみる
…なんていうこともちょっと記事にしてみると面白そうだなと思っているので近いうちにやってみようと思います。
APPENDIX
本書での用語整理
- テスト関数:テスト対象をテストする関数
- フィクスチャ:テスト関数の実行に先立って(またはその前後に)、pytestによって実行される関数。(この言葉は色々な言語なども含めて意味が様々っぽいので注意)
その他のメモ
- フィクスチャの共通化には、conftest.pyを利用する。ローカルプラグインというもので、import conftestという風に読み込まなくても利用できる。ここに分離だデータとしてフィクスチャを定義するとテストデータをまとめることができる。
- 筆者はこんな感じでテスト関数の概要をコメントとして記載している。
# GIVEN 前提 # WHEN こうしたら # THEN こうなる
以上