paint-brush
QA 自動化の合理化: テスト ユーザー作成のための休暇プロジェクト@socialdiscoverygroup
465 測定値
465 測定値

QA 自動化の合理化: テスト ユーザー作成のための休暇プロジェクト

Social Discovery Group8m2023/06/02
Read on Terminal Reader

長すぎる; 読むには

Social Discovery Group チームは、製品テスト用に「履歴が豊富な」ユーザーを作成するツールである UMT を開発しました。現在、手動 QA チームは、自動化チームの関与を必要とせずに、最も複雑なユーザー プロファイルでも独自に生成できるようになりました。
featured image - QA 自動化の合理化: テスト ユーザー作成のための休暇プロジェクト
Social Discovery Group HackerNoon profile picture
0-item

QAプロフェッショナルにとって、製品テスト用の新しいユーザーの作成は簡単な作業のように思えるかもしれません。登録フォームに記入するだけで準備完了です。しかし、1 年間のメッセージ履歴を持つユーザーをテストする必要がある場合、または特定の A/B テスト グループに対してビデオ サービス機能がどのように機能するかを評価する必要がある場合はどうすればよいでしょうか?このような状況は、ユーザーを手動で作成するとすぐに退屈で時間がかかるものになる可能性があります。

この記事では、そのプロセスを完全に自動化するツールを開発する過程を共有します。飛び込んでみましょう!

ユーザー管理ツールのご紹介

Social Discovery Group では、世界中の人々を繋ぐオンライン サービスを提供しています。当社の製品を使用すると、ユーザーはチャットやビデオを通じてコミュニケーションし、メディア コンテンツを共有できます。製品が進化するにつれて、ますます複雑なテスト シナリオに遭遇するようになりました。たとえば、有効期限が切れたサブスクリプションを持つユーザーのプロファイルを調べたり、30 を超えるエントリが含まれる連絡先リストの機能を分析したりする必要がありました。

「履歴が豊富な」ユーザーを生成するには、複数の API クエリを実行し、RabbitMQ にメッセージを送信し、SQL スクリプトを実行する必要がありました。これらの手順はすでに自動テストに組み込まれていたため、手動 QA チームからは、必要なユーザーを作成するために自動テストを実行するように頻繁に要求されました。時間が経つにつれて、単一ユーザーの作成にテスト自体よりも時間がかかるようになりました。したがって、私たちはすべての従業員がユーザー作成プロセスを独立して処理できるようにする方法を見つけることにしました。

私たちのテスト自動化は C# で書かれています。私たちは自動テストでアプリケーション リソースへの API 呼び出しを積極的に利用しています。たとえば、クライアントの登録には次の方法を使用します。

 var client = new Client(); RegisterClient(client, param1, param2, param3);

フレームワークを分析した結果、テストに必要なユーザーを作成する最も簡単な解決策は、私たちのメソッドを使用して ASP.NET Web フォーム アプリケーションを開発することであるという結論に達しました。私たちは、QA テスターが必要なユーザーを簡単に作成できる Web サイトを想定していました。

私たちがやったことは次のとおりです。

  1. 「ユーザー管理ツール」または UMT と呼ばれる新しい ASP.NET Web フォーム プロジェクトを作成しました。
  2. プライマリ自動テスト プロジェクトを GIT のサブモジュールとして追加しました。
  3. Jenkins を介して、UMT のビルドとサーバー (IIS Web サーバーに基づく) の 1 つへのデプロイメントを構成しました。
  4. DNS を割り当て、機能の開発を開始しました。


まず、ユーザー作成用のページを追加しました。テスターは、新規ユーザーまたはチャット歴の長いユーザーとして、追加のパラメーターを選択し、好みに応じてユーザーを構成できます。

プロセスは次のようになります。

  1. ASPX ページを作成し、年齢、性別、名前、国などのユーザー構成に必要な要素を追加します。
  2. 結果を表示する要素を追加します。
  3. アクションボタンをクリックしたときに必要な関数を呼び出すロジックを実装します。


以下は、出力要素を含むページのコードです。

 <%@ Page Language = "C#" AutoEventWireup = "true" CodeBehind = "WebForm1.aspx.cs" 
Inherits = "Habrl.Pages.Registration.RegistrationForm1" %> <!DOCTYPE html> <html xmlns = "http://www.w3.org/1999/xhtml" > <head runat = "server" > <title></title> </head> <body> <form id = "registration" runat = "server" > <div> <div> <label>Client type:</label> <asp:DropDownList ID = "clientType" runat = "server" AutoPostBack = "true" 
CssClass = "select" OnSelectedIndexChanged = "clientType_OnSelectedIndexChanged" > <asp:ListItem value = "regularClient" Selected = "True" >Regular client</asp:ListItem> <asp:ListItem value = "clientWithChatHistory" >Client with chat history</asp:ListItem> <asp:ListItem value = "inactiveClient" >Inactive Client</asp:ListItem> </asp:DropDownList> </div> <div id = "usersCountDiv" runat = "server" > <label>How much clients we should register:</label> <asp:TextBox ID = "clientsCount" runat = "server" CssClass = "input" 
Text = "1" ></asp:TextBox> <div class = "errorMsg" > <asp:RequiredFieldValidator Display = "Dynamic" runat = "server" 
ControlToValidate = "usersCount" ErrorMessage = "Define clients count!" ></asp:RequiredFieldValidator> <asp:RangeValidator Display = "Dynamic" runat = "server" 
ControlToValidate = "clientsCount" Type = "Integer" MinimumValue = "1" MaximumValue = "30" 
ErrorMessage = "We can create from 1 till 30 clients at once!" ></asp:RangeValidator> </div> </div> <div> <asp:Button CssClass = "MyButton separateButton" ID = "SubmitButton" runat = "server" 
text = "Register" OnClick = "OnRegisterButtonClick" ></asp:Button> </div> </div> </form> <div runat = "server" id = "result" ></div> </body> </html>

ロジックの実装は次のとおりです。

 public partial class RegistrationForm : System . Web . UI . Page
    { int _clientsCount; string _clientType; protected void Page_Load ( object sender, EventArgs e )
 { _clientsCount = int.Parse(clientsCount.Text); _clientType = clientType.SelectedValue; } protected void OnRegisterButtonClick ( object sender, EventArgs e )
 {            var clients = new ConcurrentBag<Client>(); Parallel.For( 0 , _clientsCount, _ =>
 {                var client = new Client(); RegisterClient(client, _clientType); clients.Add(client); }); result.InnerHtml = GenerateTableViewForClientsEnumerable(clients); } }


登録すると、次のテーブルが表示されます。


UMT で使用される RegisterClient メソッドは、自動テストで使用されるものと同じです。これは、製品に新しい機能を導入するたびに、自動テストが自動的に更新され、それらの変更が UMT にも反映されることを意味します。 UMT は基本的に、基礎となる自動テスト コードを提供するコントラクト上のフロントエンド実装として機能します。

UMT のおかげで、チーム全体が数回クリックするだけで、多数のテスト環境のいずれかで必要なユーザー プロファイルを簡単に作成できるようになりました。手動 QA チームは、自動化チームの関与を必要とせずに、最も複雑なユーザー プロファイルでも独自に生成できます。驚いたことに、開発チームも自分たちの目的のために UMT を活用し始めました。

開発と改善

UMT をリリースした後、新機能のリクエストを受けるようになりました。ユーザー管理 (オンライン ステータス エミュレーションとメッセージングを含む) と支払い管理のページを追加しました。その後、モバイル チームから、モバイル デバイスで UMT ユーザーを作成するには、電子メールとパスワードの詳細を入力するのに多大な時間と労力が必要であるという懸念が寄せられました。これに応えて、私たちは UMT に小さいながらも便利な機能、つまりモバイル アプリケーション用のログイン リンクとディープ リンクを含む QR コードを生成する機能を追加しました。

UMT の開発を続ける中で、2 つの大きな再設計が行われ、サイトにツリー状のメニューが追加されました。その結果、元のユーザー登録ページは大幅に変更され、まったく異なる外観になりました。



UMT の 5 年半の存続の過程で、私たちは製品テストを容易にするという本来の目的をはるかに超えてこのツールを拡張しました。サービスとサーバーの再起動、テスト環境の構成、クリーニング、リンク、統計情報やナレッジ ベースなどの提供など、DevOps アクティビティを自動化するセクションを追加しました。次のセクションでは、これらの機能のいくつかを詳しく見ていきます。

認可

しばらくして、特定の従業員 (試用期間中の従業員など) に対して UMT へのアクセスを制限することにしました。これを行うために、データベースとロールとユーザーを含むテーブルを追加し、ドメイン認証を実装し、アクセス許可を割り当てました。このシステムを導入すると、ユーザー セッションを識別し、ユーザーの権限に基づいて特定の機能へのアクセスを許可できます。また、当社では Google サービスを使用しているため、UMT に Google 認証を追加しました。

サービスとテスト環境

UMT がチーム内で人気のツールになるにつれ、QA チームは、Ansible などのさまざまなスクリプトやツールに依存するのではなく、UMT を通じてサービスとテスト ベッドを管理したいと考えました。 Docker サービス、Windows サービス、IIS、Web ノードを再起動し、それらのサービスの構成を編集する機能を追加しました。これらのサービスを構成し、テスト ベッド間で比較する機能も組み込みました。

TestRail と Jenkins

テストの自動化は私たちの仕事の重要な部分であり、常に 10 を超えるテストが進行中であることもよくあります。ただし、Jenkins 内の多くの実行の中から特定の実行を見つけたり、キュー内のその位置を確認したりするのは困難な場合があります。この問題に対処するために、現在のすべての実行とキュー内のデータを表示するページを UMT で開発しました。このページでは、すべての Jenkins インスタンスをポーリングして、実行中のジョブに関する情報を収集します。情報は簡単に参照できるように表に表示されます。

さらに、UMT は、TestRail で TestRuns を有効にした TestPlan を作成するための別のページを提供します。数回クリックするだけで、ユーザーはテスト シナリオを含むいくつかの基本的な TestPlan から選択できます。


UMT は、失敗した自動テストを解析したり、異常なユーザーの動作を調査したりするのにも役立つことが証明されています。以前は、これらのタスクでは、API クエリのために Fiddler を手動で開くか、データベースに接続して SQL クエリを実行する必要がありました。ただし、UMT を使用すると、専用ページでテスト ベッドで作成されたユーザーに関する包括的な技術情報が提供されるため、問題解決がより迅速かつ効率的になります。

現在、UMT は本格的なプロジェクトであり、テスト自動化部門が機能の追加やバグ修正のための新しいタスクを受け取るにつれて進化し続けています。優先度の高いタスクはスプリントに含まれます。 UMT は引き続きスタッフにとって不可欠なツールであり、多くの日常的なアクティビティを 1 か所に集めて時間と労力を節約します。メモを取ったり、API クエリを Fiddler や Postman に保存したり、SQL Studio を開いてデータベース ルーチンを実行したりする必要はなくなりました。したがって、あなたの会社が同様の課題に直面した場合、何をすべきかがわかります。

執筆者:Pavel Yasonau、Social Discovery Group チーム リード QA オートメーション