Syntheticを使ってWebサイトのテストを行う場合、アクセス先のサイトにBasic認証を要する場合があります。
Basic認証の認証情報はURLにいれることができるので、ドキュメントでは、「https://username:password@site.com」のようにURLに認証情報をいれる方法が紹介されています。
Syntheticテストで最初にアクセスするページからBasic認証が必要な場合は、上記で特に問題ないのですが、途中から必要とする場合が少し面倒です。
この途中から行われる場合に、より容易に対応する方法を2つ紹介します。
なお、今回スクリプトの実証には、こちらのサイトを利用します。サイトのトップページアクセスへは認証情報は必要ありませんが、「Basic HTTP/NTLM Authentication」のタイルにある、「HTTP/NTLM Auth」のリンクをクリックすると、Basic認証が必要なページにアクセスするようになっています。
方法1:Authenticationヘッダーを利用する方法
Basic認証ではAuthenticationヘッダーで認証情報を渡すこともできます。例えば、認証情報が、ユーザ名:user、パスワード:passの場合、「user:pass」の文字列を base64エンコードした値「dXNlcjpwYXNzCg==」を利用し、以下のように追加することでヘッダーに付与することで対応ができます。
スクリプト全体としては、以下のようになります。
「HTTP/NTLM Auth」のリンクをクリックした先のページではBasic認証が必要ですが、上記ヘッダの追加のみで、Basic認証が通り、テストが成功することが確認いただけます。
方法2:Chromeのキャッシュを利用する方法
SyntheticのScripted browserは、ChromeのRuntimeが動作しています。また、Chromeでは、Basic認証の認証情報がキャッシュされ、2回目以降はそのキャッシュが利用されることを活用します。
では、実際のスクリプトを見てみましょう。
スクリプトは非常に簡単で、以下のようになっています。
- Basic認証が必要なページへ直接アクセスして、認証情報を記憶させる
- 本来テストしたい最初のページ(https://authenticationtest.com)へアクセスする
- 認証が必要なページへのリンクをクリックし、表示されたコンテンツを確認し、h1要素に「HTTP/NTLM Auth」の文字列が表示されているか、assertで確認する
こちら実際にScripted browserにて実行していただくと、リンククリック時のURLに認証情報を記載していなくても、テストが無事に成功することがご確認いただけます。
まとめ
どちらの方法も非常に簡単に対応できることがわかっていただけたと思います。
1つ目の方法に関しては、ヘッダーへ追加のみ、2つ目の方法に関しては、事前に認証が必要なページへアクセスすることで、その後の認証を省略することができました。お客様のポリシーや好みに応じていずれかの方法にてご対応いただくことができます。
なお、Scripted browserのテストは、テストの実行ごとにRuntimeのインスタンスが新規に生成されるため、各テストはキャッシュがクリアされた状態で行われます。
また、パスワード情報をスクリプトに直書きしたくない場合は、Secure credentialsも併用してご利用いただけます。
Les opinions exprimées sur ce blog sont celles de l'auteur et ne reflètent pas nécessairement celles de New Relic. Toutes les solutions proposées par l'auteur sont spécifiques à l'environnement et ne font pas partie des solutions commerciales ou du support proposés par New Relic. Veuillez nous rejoindre exclusivement sur l'Explorers Hub (discuss.newrelic.com) pour toute question et assistance concernant cet article de blog. Ce blog peut contenir des liens vers du contenu de sites tiers. En fournissant de tels liens, New Relic n'adopte, ne garantit, n'approuve ou n'approuve pas les informations, vues ou produits disponibles sur ces sites.