はじめに
最近、APIのテスト自動化のためにPostmanを使う機会がありました。
私自身、テスト自動化というのが初めてだったので、
「自動化って必要なの??手動でできるじゃん。」
「そもそも、目的は何??」
といった、素朴な疑問がありました。
なので、この記事では復習もかねてテスト自動化の目的やポイントについて考えてみようと思います。
Postman
PostmanはAPIを開発・テストするためのアプリケーションです。
PostmanではTokenなどを設定し、APIのエンドポイントにリクエストを送ることで、レスポンスを受信することができます。
テスト自動化の目的は何か
まずは、テストを自動化の目的について自分なりに考えてみます。
○ テスト実施回数を増やす
従来のウォーターフォール型の開発では、開発工程の後にテスト工程がありそもそもテストの実施回数が少ないことが前提とされていたように感じます。
しかし、アジャイル開発のように短期間で一連の開発工程を繰り返すような場合、プルリクエストやマージごとにテストを実施することが必要になります。
1日に複数回テストを実行することが前提であれば、1回の実行時間を数分から数十分に抑え、かつ並行してテストを実行できるのは大きなメリットにつながります。
○ 品質の向上
1つ目にあげたようにテストの実施回数が増えるため、その分早くバグに気づくことができます。
また、定義したテストを実行するので、手動テストで起こるようなヒューマンエラーを防止することができます。
ただし、逆をいえば定義したテストしか実行しないためすべてのテストを自動化することは難しく、さらに、テスト作成時に考慮漏れがあった場合、その領域はテストが行われないためバグが発生してからテストが不十分だったことに気づくというパターンがあります。
○ 新規バグではなく、既存バグを見つける
1つ前でも書きましたが、自動テストは定義したテストを実行します。
なので、テスト作成者が起こりうるエラーを想定してテストを作成します。
手動テストのように、テストをしていてたまたま別のエラーに気づくというのは稀なケースであり、あくまでデグレを起こさないことを担保することが自動テストでは重要な役割かと思います。
テスト自動化には失敗が多い?
テスト自動化について調べていると、「テスト自動化」「失敗」というキーワードでたくさんの記事を目にしました。
それぞれの記事で様々な理由があげられていましたが、私自身、テストを自動化してまず認識を改めなければいけないと感じたのは自動テストシステムの開発は継続的におこなうものという点です。
これは、「テスト自動化の8原則」にも記載があります。
テスト自動化に関わる苦労を10とすると、自動テストシステムが完成するまでが3、残りの7は運用に関するコストである。
テスト自動化の8原則
「テスト自動化」の技術領域の定義と啓発を目的とする、日本のテストコミュニティの有志による「テスト自動化研究会(STAR: Software Testing Automation Research Group Jp)」によって議論されたテスト自動化で考慮すべきポイントをまとめたもの。
テスト自動化を行う上で、この運用に関する労力を想定していない場合、システムを修正するたびに広範囲でテストスクリプトの修正が必要になったり、一度のテスト実行で大量のエラーが発生しテストの結果分析に多くの時間を奪われたり、結果的にシステムの修正に対してテストの更新が追いつかなくなるといった問題が起こります。
こういった問題を起こさないためにも、次のことを注意する必要があると思います。
1. 自動化する範囲を明確にする
テスト自動化は、繰り返し実行することでメリットを生みます。
手動で行っていたテストをそのまま自動化したり、すべてのテストを自動化することは、テスト実行の俊敏性を下げる要因です。
目的に対して自動化したほうがいいテストとそうでないテストを明確にすることが大切です。
2. テスト観点を明確にし、無駄なテストをなくす
無駄なテスト項目を増やすことは、品質と運用の効率を低下させる原因になります。
例えば、システムを修正した際にテストスクリプトの修正範囲を広げる可能性がありますし、本当に確認したいテストも埋もれさせてしまいます。
テスト観点と期待する結果がわかるようにすることで、無駄なテスト項目を減らすと同時にシステムを修正した際に削除・追加・更新するべきテスト項目がひと目で判断できるようになります。
3. 自動テストが失敗したら、すぐにテストスクリプトを修正する
優先したいタスクや緊急での対応では、どうしてもテストスクリプトの修正を後回しにしてしまいがちです。
しかし、1度テストの失敗を放置するとすぐにテストスクリプトの修正範囲は広がり、テスト失敗はシステムではなくテストスクリプトに原因があると考えるようになります。
自動化されたテストの信頼度が落ちてしまうと、いつしか自動テストは使われなくなり結果的に手動でテストをしているといった状態になってしまいます。
これを避けるためには、CIに自動化したテストを組み込むことです。
コミットごとに、自動化したテストを実施することでバグの早期発見にもつながりますし、テストスクリプトの修正範囲や影響箇所も抑えることができます。
何より、テストスクリプトの修正が義務化されるため自動テストの信頼度を維持することができます。
CI (Continuous Integration : 継続的インテグレーション)
継続的インテグレーションとは?
継続的インテグレーションは、開発者が自分のコード変更を定期的にセントラルリポジトリにマージし、その後に自動化されたビルドとテストを実行する DevOps ソフトウェア開発の手法。
さいごに
1年目の頃は、テストとはなんて地味で華がない作業なんだろうと思っていました。笑
今年で3年目になりますが、当初地味だと思っていたテストで泣くこともあれば、助けられる思いをしたこともあり、経験を重ねる中でテストの重要度と難しさを感じています。
特に、最近ではテストを行うにも技術的な知識や経験が必要となり、私の中ではテストも開発の一部のような感覚になっています。
今回、テスト自動化を導入したことにより私の中でテストに対する認識が改められ、テストにより関心を持つきっかけとなりました。自動化のツールも色々とあったので、それぞれ試してみたいなと思います。