現在、自動化されたユーザーインターフェイステストを調査しています(現在、自動化された単体テストと統合テストを行っています)。
私たちはSeleniumとTelerikを検討しましたが、レコーダーの柔軟性が非常に高いため、後者を最適なツールとして解決しました。テスト担当者があまりにも多くのコードを記述したくないのです。
しかし、私は全体的なメリットを理解しようとしています。人々の見解とは何ですか?どのようなことがうまくいき、何がうまくいかないのですか?
私たちのシステムは絶え間なく開発されており、私たちの(Webベースの)プラットフォームの新しいバージョンを定期的にリリースしています。
これまでに確認できる主な利点は、特にプラットフォームの複数のクライアント展開における回帰テストです。
本当に他の人の意見を探しています。私たちはそれが正しいことだと "考えています"が、既に忙しいスケジュールの中でいくつかの追加の洞察を探しています。
私のチームが自動UIテストを実装したとき、多くの素晴らしいことが起こりました。
第1に、QAチームはアプリケーションのテストにおいてはるかに効率的になり、アプリケーションの熟練度も向上しました。リードQAは、UIのテストスイートに新しいQAメンバーを紹介することで、迅速に対応できると述べました。
第二に、開発チームに戻ってきたQAチケットの品質が優れていました。 「送信ボタンをクリックしたときにページが壊れました」の代わりに、失敗した正確なケースが得られたため、フォームへの入力内容を確認できました。 QAチームはさらに、失敗したすべてのケースをチェックし、そのページの他のシナリオをテストして、何が起こったのかをよりよく把握できるようにして、さらに一歩進めました。
第三に、QAチームにはより多くの時間がありました。この余分な時間により、彼らはより多くの設計会議に参加することができました。これにより、開発者が新しい機能をコーディングすると同時に、新しいテストスイートケースを作成できるようになりました。
また、私たちが使用したテストスイートを使用したストレステストは、金の重みに見合う価値があります。正直に言って、私たちのアプリは投げられたもののほとんどをとることができるので、私は夜によく眠れるようになりました。実稼働前に修正できたプレッシャーに負けてかなりの数のページが見つかりました。完璧。
最後に見つけたのは、QAチームによる微調整により、アプリでSQLインジェクションテストを実行できることです。すぐに修正できる脆弱性がいくつか見つかりました。
UIテストスイートのセットアップには、かなりの時間がかかりました。しかし、そこに入ると、それは私たちの開発プロセスの中心的な部分になりました。
テスターがあまりにも多くのコードを書いてほしくない
私たちは反対のアプローチをとりました。私たちはテスターがコードを書くことを望んでいます.
これが私たちが採用し始めたワークフローです。管理がフロントエンドの自動テストに完全に依存しないため、これを行うのは簡単ではありません。彼らは「十分近く」に落ち着いて進んでいます。
ユーザーストーリー。
運用コンセプト。ストーリーがどのように機能するか。デザインレビュー。
画面スケッチ:UIデザイン。それがどのように見えるか。
Selenium Scripts。スクリプトがすべて機能する場合、リリースは完了です。
スクリプトが機能するまでのコーディングとテスト。
自動テストは、機能が存在することを示すonlyの方法です。
手動テストはエラーが発生しやすく、管理者によるオーバーライドの影響を受けます。「それで十分です。失敗したテストは、時間通りにリリースすることほど重要ではありません。」
「自動テストのないプログラム機能は存在しません。」
視覚的なプレゼンテーションは別の話です。視覚的なレイアウトの手動テストは、審美的な判断、または非常に大きく複雑な画面一杯のピクセルで特定の(小さな)問題を見ることのいずれかを伴う可能性があるため、例外的なケースです。
自動UIテストはreal統合テストです。彼らはそれが生きているときに実際に使用される方法でシステム全体をテストします。それが最も意味のあるテストになります。ただし、それらは最も壊れやすく、実行が最も遅い傾向もあります。
コスト/メリットの比率(もろさはコストの一部です)に注意し、手動でのみテストされるものを躊躇しないでください(ただし、それらがであることを確認してくださいテスト済み)。また、可能であれば、開発者がローカルで実行されているバージョンのアプリに対してUIテストスイートの特定の部分を実行できるようにして、開発中のテストのメリットを享受できるようにします。
もちろん、ビルドサーバーでテストを自動的に(少なくとも1日に1回)実行することは、絶対に必要です。
テスターがあまりにも多くのコードを書いてほしくありません。
IMOこれは夢のパイプです。自動テストの作成はコードを記述します。記録機能は、そのコードの一部をより速く記述し、手動で記述することでより迅速に開始するのに役立ちます(そして、コードの手動での記述がより速くなるポイントを見逃すと、ひどく遅くなります)が、最終的にコードを手動で記述するのはあなたですwillは多くのことをすることになります。テストフレームワークがそれをうまくサポートし、コードを記述できない人が自動テストを作成できるようにする(非常に売れ筋の)パイプの夢に重点を置いた開発が行われていないことを願っています。
これまでに確認できる主な利点は、特にプラットフォームの複数のクライアント展開における回帰テストです。
回帰テストを自動化することは良いことです。これにより、自動化されたテストの追加、アプリケーションのストレステストなど、テスターがより興味深い作業を行えるようになります。
また、自動化することで、開発者にテストを実行させ、プロセスの後半でのみ発見される問題を未然に防ぐことができます。
私たちは、SeleniumとTelerikを見てきましたが、より柔軟なレコーダーのため、選択ツールとして後者を採用しました。
どれだけ調べたかわかりません。確かに他のオプションもあります。 Watir 、 WatiN 、 Sikuli を調べていくつか例を挙げましたか?
テスターがあまりにも多くのコードを書いてほしくありません。
これらのスクリプトを維持しなければならない人々にとっては、私は気分が悪い。ほとんどの場合、簡単に変更できるコードがないと、スクリプトは壊れやすくなり、スクリプトを変更するのに、それを再記録するよりも時間がかかり、さらに時間を浪費します。
しかし、私は全体的なメリットを理解しようとしています。人々の見方とは何ですか?どのようなものがうまくいき、何がうまくいかないのですか?
テストの自動化は、正しく行われると美しいことです。これは、回帰テスト/チェックにかかる時間を節約し、テスターが最善を尽くしてテストを行うためにより多くの時間を与えます。銀の弾丸だとは思わないでください。自動化スクリプトは、アプリケーションがすでに存在するがテストが存在しない場合、開発にかなりの時間を必要とし、リリースごとに常に更新する必要があります。自動テストは、チームの新しいメンバーがシステムの動作を確認するための優れた方法でもあります。また、テスターが何を自動化する必要があるかを決定できるようにしてください。チェックにそれほど時間をかけない小さなチェックであり、非常に単調で、自動化が簡単な場合は、それから始めます。常に自動化によって最も多く得られるチェックから始め、そこから作業します。
これまでのところ、主なメリットは、特にプラットフォームの複数のクライアント展開における回帰テストです。
これは主な利点であり、正しく設定されていれば、わずかな構成変更で必要となるほとんどのブラウザーをテストできます。
私たちはそれが正しいことだと "考えています"が、すでに忙しいスケジュールの中でいくつかの追加の洞察を探しています。
先に述べたように、テストの自動化にはかなりの労力を費やしますが、正しく行われた場合、まだテストの自動化をセットアップしていなかったと言ったチームにまだ会っていません。
ほんの一例:Webページのレンダリング時間を正確に測定する
自動化テストを使用すると、Webブラウザーのパフォーマンスをテストする方がはるかに簡単です。受け入れる可能性が高い最大応答時間を測定するには、テストスクリプトで定数を設定するか、関数パラメーターとして渡します(たとえば、次の疑似コード:$ sel-> wait_for_page_to_load($ mypage、$ maxtime)。
低い値でブラウザ間テストを行うと、非常にわかりやすくなります。
代わりに、従業員にストップウォッチでタイミング測定を行わせることもできます。
自動化されたユーザーインターフェイステストにより、次のことが可能になります。
ただし、他の人が指摘したように:
Telerik ...
はるかに柔軟なレコーダーのための選択ツール
私たちの多くにとって赤旗です
この方法で記録されたスクリプトは、長期的な解決策にはならない傾向があります。
Telerikには、考慮すべきいくつかの利点があります。
ギャップを埋めるのに役立つアプローチは、ツールページレコーダーを使用してinitialスクリプトを記録することですが、その後changeスクリプトをID、クラス、およびデータ属性を使用して、それが長期間続くようにします。これは、Firefox Seleniumプラグインで実際に使用したアプローチです。
あなたは正しいです。また-
テストがモジュール化されて記述されている場合、テストセットを混合して一致させることにより、費用対効果を高めることができます。
データをロードするために自動テストスクリプトを再利用しているため、大規模なテストを実行するためにデータベースを無駄にする必要がありません。
性能試験
マルチスレッドテスト
webシステム-ブラウザ間のスワッピングとOS間のスワッピング。ブラウザの一貫性の問題では、ベースをできるだけ広く打つことは大きなことです。
スキップするもの-特にWebシステムでは、動的に変化するIDでディスプレイの要素が作成される場合に注意してください-多くの場合、自動テストスクリプトはこれをうまく処理できず、これを更新するには真剣な再設計が必要になる場合があります。
これにより、「エキスパートテスト」(「探索的テスト」に似ていますが、エンドユーザーまたはビジネス知識が豊富なチームメンバーによって実行されます)の実行、結果の記録、測定、および自動化が容易になります。
私はこれに別の背景から来ました。以前の雇用主では、商用の自動テストツール(QALoad、QARun、TestPartner、SilkTest、SilkPerfomer)を開発しました。
自動UIテストは2つの役割を果たしていると見なしました。
完全回帰テスト
テスト環境の自動セットアップ
私たちは、夜間に回帰テストを実行するためのツールに大きく依存していました。すべてのボタンとダイアログをテストして、UIとビジネスロジックの間で何も破壊されていないことを確認するための人材がなかっただけです。
より重要なテストについては、1人で複数のVMを起動し、スクリプトを使用して実際のテストのポイントに到達できることがわかりました。これにより、24ビットのテストケースを実行せずに、重要な部分に集中できます。
自動テストの唯一の問題は、重複したテストや不要なテストを排除するための監視を行わずに、あまりにも多くのテストをボックスにダンプする習慣でした。スイートを12時間以内に完了できるように、時々行ってプルーニングする必要があります。
あらゆる種類の自動テストは、回帰テストを提供します。以前は機能していたテストを実行することにより、他に何を追加したかに関係なく、それがまだ機能する(または機能しない)ことを確認します。これは、テストが統合テスト(通常はUIに触れない)であるか、AAT(通常は必須 UI)であるかに関係なく当てはまります。
自動UIテストでは、ユーザーがボタンをクリックしたかのようにシステムをテストできます。したがって、このようなテストを使用して、システム内のナビゲーション、ラベルやメッセージの正確さ、特定のテスト環境でのパフォーマンスやロード時間などを検証できます。主な目的は、ボタンのクリックに費やされるQA担当者の時間を削減することです。統合と単体テストがプログラマーのためにするのとよく似ています。彼は1回のテストを(通常は自分のマウスクリックとデータエントリをスクリプトに記録することによって)セットアップできます。テストが適切に機能したら、テスト対象のシステムの正確さを確認するために実行する必要があるすべての操作をもう一度実行します。 Seleniumなどの一部のフレームワークでは、ブラウザー間でテストを移行できるため、サイトが適切に機能する必要があるいくつかの環境をテストできます。
自動テストがなければ、QAテスターの数とスピードによって制限されます。彼らは文字通りシステムを操作し、新しい機能が要件を満たしていることをテストし、(同じくらい重要なことに)すでにそこにあるものを壊していないことを確認する必要があります。
テストは多くの異なることを決定します。これらのテストの多くは自動化して、面倒な作業を取り除き、より多くのことを行うことができます。テストを自動化できるかどうかを判断するには、まず、彼らが尋ねる質問がそれに適しているかどうかを確認する必要があります。
これらは本質的に機械的であるため、これらのほとんどは自動化できます。新しい関数は入力を受け入れるため、ランダムなデータをスローするとどうなりますか?しかし、システムが動作するかどうかのテストのように、誰かが実際にseを実行する必要があります。そうでない場合、ユーザーの期待がプログラムと同じであるかどうかはわかりません。つまり、システムが「壊れる」までです。