自動テストフレームワーク (ATF) の設計上の考慮事項
次の設計上の考慮事項に従って、信頼性が高くスケーラブルで効率的なテストを作成します。
一般的なテスト
システムの動作を変更する可能性のある ServiceNow システムテーブル、またはアプリケーションファイル [sys_metadata] を拡張するテーブルの変更は避けてください。テスト間の予期しない結果を防ぐために、既存のレコードを使用したり変更したりしないでください。予期しない結果を引き起こす可能性のあるシステムデータ変更の、いくつかの一般的な例を次に示します。
- 既存のアカウントを代理操作する
- 既存のレコードを削除する
- ビジネスルールまたはシステムのプロパティを無効にするテストを実行する
- 既存のレコードを使用して検証する
並列テスト
複数のテストとテストスイートを並列で実行することで、テストの設計時間を短縮します。リソースの競合とデータの依存関係を回避することで、並列で実行されるテストを設計します。
並列テスト間のリソース競合の防止
独自のデータを作成するテストを実行して、リソースの競合を防止します。既存のデータを使用して実行するテストでは、同じデータを必要とする他のテストは並列で実行できません。
注:
リソースの競合があるテストが複数ある場合は、「テストを相互に排他的としてマーク」を参照して、それらのテストが並列に実行されないようにする相互除外ルールを作成します。
パラメーター化されたテスト
実行ごとに異なるテストデータを使用して、テストを複数回実行します。各テスト実行のテストデータを保存するパラメーターを作成します。詳細については、「パラメーター化されたテストのコンポーネント」を参照してください。- 各テスト実行のテストデータを保存するパラメーターを作成します。
- パラメーター化されたテストが、レポート、テストスイート、およびデータロールバックなどの標準自動テストフレームワーク (ATF) 機能をサポートしていることを確認します。パラメーター化テストをコピーすると、すべてのパラメーター、テスト実行データセット、およびテストステップがコピーされます。注:カスタム UI テストステップを含むパラメーター化されたテストを作成した場合、システムは最初のデータセットのみを使用してコンポーネントを取得します。
カスタム UI テスト
HTML および JavaScript ページコンポーネントを取得し、それらがサポートするテストアクションを特定することによって、UI ページや UI マクロなどのカスタマイズされたユーザーインターフェイスをテストします。
- ページインスペクターを使用してテスト可能なページコンポーネントを識別する
- ページインスペクターは、どのページコンポーネントがカスタム UI テストに使用できるかを決定します。ページインスペクターに利用できないページコンポーネントは、カスタム UI テストには利用できません。
- テストするカスタム UI に移動する
- ターゲットのカスタム UI に移動するには、既存のテストステップを使用します。たとえば、ナレッジベース記事をテストするには、既存のテストステップを使用してモジュールに移動するか、既存のレコードを開きます。ほとんどのカスタム UI テストでは、テストの一部として既存のテストステップカテゴリを使用する必要があります。
- コンポーネント領域を使用してページコンポーネントを識別します
- コンポーネント領域は、
<div>または<section>要素などのコンポーネントを含む HTML レイアウト要素を表します。この領域は、テストデザイナーがページレイアウト内の場所を指定することによってコンポーネントを区別するのに役立ちます。 - ServiceNow AI Platform UI ではなくカスタム UI をテストする
- 自動テストフレームワーク (ATF) は、ServiceNow AI Platform 機能のカスタム UI テストを回避します。たとえば、ダッシュボードやグラフィカルデザイナーをテストすることはできません。代わりに、カスタム UI ページと要素を検証するためのテストをビルドします。これらのユーザーインターフェイスは直接制御できるからです。
- HTML 属性を使用してページコンポーネントのテストプロパティを上書きする
- 自動テストフレームワーク (ATF) 固有の HTML 属性を使用して、特定のページコンポーネントのテストプロパティを変更します。「コンポーネントテストアクションを上書きする」を参照してください。
- テストを別のインスタンスに移動するときはページコンポーネントを再度取得する
- カスタム UI テストステップは、UI コンポーネントをメタデータとして格納しません。テスト担当者がインスタンス間でテストを移動するときは、ページコンポーネントを手動で再度取得する必要があります。
本番システムからテストをクローン
テストを本番システムに移動して、テスト用に最新のインスタンスをクローン作成します。本番システムから準本番インスタンスにテストを直接コピーまたはクローン作成することで、テスト時間を短縮します。
注:
デフォルトでは、自動テストを実行するためのシステムプロパティは、実稼働システムでは実行できないように無効になっています。データの破損や機能停止を避けるため、開発、テスト、および他の非本番インスタンスでのみテストを実行してください。
すべてのテストの警告メッセージ
| 警告メッセージ | 設計上の考慮事項 |
|---|---|
| 既存のユーザーを代理操作すると、このテストで予期しない動作が発生する可能性があります。代わりに「ユーザーを作成」ステップを追加することで、潜在的な問題を回避します。テスト設計の考慮事項についてのドキュメントを参照してください。 | 新しいユーザーを作成して適切なロールとグループを確保し、既存のレコードを使用しないようにします。詳細については、「一般的なテスト」を参照してください。 |
| アプリケーションファイル [sys_metadata] を拡張するテーブルを使用すると、並列で実行されている他のテストで予期しない動作が発生する可能性があります。テスト設計の考慮事項についてのドキュメントを参照してください。 | 他のテストに影響を与える可能性があるため、アプリケーションファイルを拡張するテーブルを使用してテストを実行しないでください。詳細については、「並列テスト」を参照してください。 |
| システムテーブルを使用すると、並列で実行されている他のテストで予期しない動作が発生する可能性があります。テスト設計の考慮事項についてのドキュメントを参照してください。 | 並列で実行されている他のテストに影響を与える可能性があるため、システムテーブルの使用は避けてください。詳細については、「並列テスト」を参照してください。 |
| 既存のレコードを使用すると、このテストで予期しない動作が発生する可能性があります。テスト設計の考慮事項についてのドキュメントを参照してください。 | 既存のレコードは使用しないでください。これらのレコードには、テストで想定されるステータスと値が含まれていない可能性があります。テスト中に作成されたレコードを使用して、適切な状況と値を確認します。詳細については、「一般的なテスト」を参照してください。 |
| 既存のレコードを変更すると、並列で実行されている他のテストで予期しない動作が発生する可能性があります。テスト設計の考慮事項についてのドキュメントを参照してください。 | 他のテストに影響を与える可能性があるため、既存のレコードは使用しないでください。テスト中に作成されたレコードを使用します。詳細については、「一般的なテスト」を参照してください。 |
| アサーションタイプ「--なし--」を使用すると、サーバー UI アクションで予期しない動作が発生する可能性があります。アサーションタイプを設定し、タイムアウトを使用することで、潜在的な問題を回避します。テスト設計の考慮事項についてのドキュメントを参照してください。 | サーバー UI アクションにより、現在のフォームが送信され、ページが再ロードされます。サーバー UI アクションの予期しない動作を回避するには、[なし] 以外のアサーションタイプを選択します。タイムアウトを設定して、次のステップに進む前に、テストがフォームの送信または未送信を必ず待機するようにします。サーバー UI アクションをテストする場合、アサーションタイプ [なし] は自動的に [サーバーにフォームを送信] に設定されます。 |
ドメインセパレーションテスト
ドメインセパレーションをテストする場合は、最初にドメインを設定する必要があります。各 ATF テストステップが設定中のドメインに依存する場合、これはその最初の代理操作ステップの一部になります。ドメインセパレーションの推奨プラクティスの詳細については、「サービスプロバイダー向けのドメインセパレーションの推奨プラクティス」を参照してください。