ブロックを取得せずに、Instagramアカウントを使用してUIテストを作成する方法

こんにちは、Habr。 多くの場合、さまざまなサービスを自動テスト(セレンまたはappium)でカバーする場合、他のソーシャルネットワークのアカウントを使用する必要があります。 これは、たとえば、このソーシャルネットワーク、または承認、共有、いいねなどでサービスの登録をテストする場合に必要になることがあります。



そしてもちろん、ソーシャルネットワークはテストユーザーを禁止します。なぜなら、彼らはテストではなく「疑わしい」と見なすからです。 この記事では、Instagramの禁止に対処する方法と、その理由説明します







問題の本質



それでは、順番に整理しましょう。 まず、UIテストでカバーする必要があるサービスがあります。 また、ソーシャルネットワークに依存する特定の機能を備えています。 たとえば、Instagramからサイトにログインする機会があります。 そのような機能をテストでカバーする方法は?



一見、すべてがシンプルです。 Instagramでユーザーを作成し、テスト用に電子メールとパスワードを登録します(このために特別に作成された場所で):



class InstagramUsers: EMAIL = "some_email@example.com" PASS = "secret"
      
      





次に、必要なアイコンを見つけてクリックするテストを作成します。



もちろん、ブラウザでテストを実行すると、「クリーン」セッションが開始されます。 これは、いずれのサイトにも権限がないことを意味します(対応するCookieはありません)。 ネイティブアプリケーションにも同じことが当てはまります。エミュレーターを上げるか、アプリケーションを「正直に」起動するため、どのサービスについても承認されるべきではありません。



テストは次のことを行います。 彼は目的の画面を開き、ソーシャルネットワークのアイコンを見つけてクリックします。 Instagramでの承認プロセスが開始されます。 必要なウィンドウで、アカウントのメールとパスワードを入力します(ウェブの例):







したがって、テストは承認され、サービスとInstagramの相互作用の検証が行われます。 希望する成功テストのステータスが表示され、喜んでいます-すべてが順調です。



その後、テストをCIに追加し、スケジュールどおりに実行を開始します。 そして、数日または数時間後、テストは落ち始めます。 エラーのあるスクリーンショットを開き、次を参照してください。







Instagramがユーザーを禁止し、テストが機能しなくなりました...一見、できることは、新しいInstagramアカウントを作成することだけです。 ただし、テスト自動化の本質は失われます。 :)



この問題には2つの解決策があります。



最初の決定



テスト実行の間にInstagramから受信したCookieを保存できます。 そして、必要な場合にのみログインします。 確かに、ここにはいくつかの問題があります。



まず、多くのテストがある場合、遅かれ早かれ、テストプロセスが速くなるようにそれらを並列化する必要があります。 この場合、データへの並列アクセスの問題を解決する必要があります。 認証Cookieの有効期限が切れると、2つ以上のテストが並行スレッドからInstagramに同時にログインしようとしないようにする必要があります。



第二に、「プレインストール」認証でアプローチする場合、ソーシャルネットワークとのやり取りの完全なプロセスを、そこでの認証からサービスの認証までチェックしません。 自動テストでケースの半分しかチェックされない場合、サービスが機能することをどのように保証できますか?



第二の解決策



実際、私が記事を書くために座ったもののために... Facebook経由でInstagramにログインできます。 奇妙に聞こえますよね? それでは、もう少しお話しします。



何らかの理由で、Instagramはログインフォームの代わりにFacebookにログインしているアカウントを時々禁止しません。 正直なところ、これがなぜ起こるのかはわかりませんが、私は絶望のためにこの機能に出会い、禁止アカウントの問題を解決しようとしました。 そして、私はあなたと共有することにしました。



したがって、アクションのシーケンスは次のとおりです。 Facebookでユーザーを作成します。 次に、Facebookユーザーにすぐに結び付けられるInstagramユーザーを作成します。 テストでは、Facebookユーザーへのアクセスのみを登録します。



Facebook経由でInstagramにログインするようにテスト自体を教える必要があります。 問題はないはずです。



まとめ



回避策は好きではありません。 テストで使用するアプローチが単純であればあるほど、正直になります。 したがって、あなたが夜寝ることができる穏やかな。 しかし、残念ながら、時には「出て」いなければなりません。



Instagramとは異なり、Facebookには、自動テストで使用するときに禁止されていないテストユーザーを正直に作成する機能があります。 これについては、この記事で詳しく説明します



いつかすべての主要なサービスが同様のAPIを持つようになることを本当に望んでいます。 さらに、Instagramのメンバーがこの資料を見ると、この機能を修正するだけでなく、自動テスト用のテストアカウントを取得する適切な方法になることを願っています。



私はすべてを持っています、あなたの注意をありがとう。



All Articles