4

自動テストを使用して、Web アプリケーションの機能を検証します。テストケースでのアサーションをより複雑で柔軟にするために、「TestID」の導入を検討しています。つまり、テストケースがページ上の要素を見つけて検証するのに役立つ HTML マークアップ内の ID です。さらに、これらの TestID により、ページ上のデータが限られているために現在不可能な、より具体的な統合テストが可能になります。

しかし、次の点が私たちを躊躇させます。

  • テスト ID の導入は、テスト用にテスト済みを変更することを意味します
  • セキュリティ- 内部ドメイン オブジェクト ID と、そうでなければページに表示されないその他の情報を開示します。
  • 標準- TestID をマークアップにどのように配置するかによって、要素または属性の意図されたセマンティックな使用に違反する可能性が高くなります (たとえば、「id」または「class」属性、その他の html 要素など)。
  • 干渉- TestID がアプリケーション コードに干渉する可能性がある
  • パフォーマンス- TestID は (ユーザーにとって) 不要なマークアップであり、ページ サイズを増加させます (大きなページでのみ重要です)。

TestID をテスト/ステージング HTML に制限することは良い考えではないようです。なぜなら、本番環境で使用されるコードをテストしたいのは明らかであり、テスト/ステージング環境が異なる動作をすることを望んでいないからです。実際、現在、リリース後にライブ システムに対してテスト スイートの一部を実行しています。

TestID は良いアイデアだと思いますか? もしそうなら、どのようにマークアップに入れますか?


私が話していることを示すためのいくつかのサンプルマークアップ:

<!-- this test id allows an integration test to verify that
  the carrot 188271 is in fact green but exposes the id to the user -->
<tr id="testid-carrot-id-188271">
    <td class="color">green</td>
    <td class="size">doesn't matter</td>
</tr>
4

3 に答える 3

6

テスト用のコードを実際のサイトに残すことは決してありません。それは悪い原則であり、ハッキングを招きます。

テスト ID がページ上の他の ID と衝突しないようにフォーマットされており (ID は一意である必要があります)、ライブ コードのいずれからも参照されていない限り (何かがあると判断できない場合)ここではより大きな誤りがあります)、ID のあるテスト サイトと ID のないライブ サイトの間で動作に違いはないはずです。

私の意見では、ベスト プラクティスは、テスト コードが開発サイトで正しく実行されるように設計することであり、コードを削除しても実際のサイトに悪影響を及ぼさないことがわかっています。自分のサイトが正しく動作することを確認するために、ライブ バージョンを定期的にテストする必要があるかどうか心配です。

于 2009-06-22T17:03:30.227 に答える
3

XPath など、要素を識別するために別のものを使用することを検討しましたか? あなたのページがどれほど動的かはわかりませんが、XPath は必要な要素を非常に具体的にすることができます。

個人的には、本番用の HTML をテスト ID で肥大化させたくありません。

于 2009-06-22T16:55:21.377 に答える
3

より簡単で優れたテストのメリットは、認識されているリスクを上回ると思います。次のようなことを話していると思います: 自動テストで見つけやすくするために、ページの結果の詳細要素に id='resultDetail' を追加します。私は率直に言って、そこに害があるとは思いません。私が過度に単純化した見方をしている場合は、サンプルのマークアップを投げて、あなたが考えていることをよりよく理解できるようにしてください。

サンプル マークアップを確認したところ、ユーザーが ID を使用できるようにしても問題はありません。多くのアプリケーションはドメイン ID を公開しています。実際のところ、私の経験では、多くの場合、これらのドメイン ID は UI の不可欠な部分です。多くの場合、ID はクリックして詳細を取得したり、編集、削除したりできるリンクになります。

于 2009-06-23T12:24:47.497 に答える