テスト自動化 道の始まり

こんにちは、Habr!



今日の記事のトピックは、Webアプリケーションの機能テストの自動化です。 より正確には、テストそのものとしての自動化そのものではなく、これのクイックスタート、もちろんエキサイティングな取り組みです。

機能テストと回帰テストに関与する多くのテスターは、遅かれ早かれ、プロセスを自動化するというアイデアを思いつきます。 同じリグレッションケースの実行が時間の経過とともにひどく迷惑になることは間違いありません。

この記事は、このアイデアに近づき、自動化の旅をどこから始めるべきかを知らない人向けに設計されています。



このパスの最初に自分のことを覚えていると、次の初期データが得られます(私は一人ではないに違いありません):



リーダーシップは別の問題です。

あなたはそれを受け取って「自動化したい!」と言うことはできません。そして最終的には承認とタスクを完了する時間を得ることができます。 経営陣は結果を必要とするため、「何がわからないか」という時間を割り当てないことが非常に合理的です。



ここから2つの状況が続きます。



状況1。



次に、開発が始まり、試行錯誤、新しい知識、テスターは限界に向かって動機付けられます。 しかし、ここに期限が来ます。可能性の90%は開発の難しさ(私たちは初心者です)です。そのため、期限が過ぎたため、ToRで考慮されなかった新しいアイデアがありましたが、本当にそれを実装したかったのです。 その結果、システムが予定どおりに配信されず、経営陣が動揺する可能性が高くなります(多くのことを達成したこと、多くのことを学んだこと、より有能になったことは関係ありません)。結果はありません。



予約します。 おそらく、親愛なる読者、彼はこの道を歩き、すべてがうまくいきましたが、私はそのような人々の少数がいると確信しています。



状況2。



私の意見では、パス2がここで好ましいです(おそらく私自身がこのパスを取ったのでそのように思われます)、それはあなたが成功しない場合、誰もそれを知らないので、否定的な結果の欠如を保証するからです



この記事を投稿することで、いくつかの目標があります。

  1. 自動化エンジニアである初心者テスターに​​利益をもたらします。最初の自動テストをすばやく作成し、自動化を続けます。
  2. としてプロジェクトの批判を取得します まだ飲まれて満たされています。
  3. システムを使用する人を見つけ、そうでない人にはどの機能が欲しいかについてのフィードバックを受け取ります。


この記事が初心者の自動化機能に役立つことを願っています。

また、批判を期待します。 添付のプロジェクトは現在開発中であり、補足する必要があります。



使用されるもの:



アプリケーションのインストールとプロジェクトのセットアップ



動作するには、次のものが必要です。



リポジトリからプロジェクトをダウンロードするには、フォルダー(格納する場所)でgit bashを開き、コマンドを実行する必要があります。



git clone git://github.com/4gott3n/AT.git master







たとえば、 この記事でGitの仕事に慣れることができます。



次に、Visual StudioでAT.sln



ファイルを開き、ATプロジェクト(フレームワーク自体)を含むソリューション、およびページ、テストなどの実装を確認できるテストプロジェクトの例を確認します。 (彼は自分のプロジェクトを作成するための便利な例です)。



次のステップは、すべてのテスト、ページ、その他すべてを保存するプロジェクトを作成することです。



あなたがする必要があること:

  1. ソリューションに新しいプロジェクト(クラスライブラリ)を追加します;後でこの名前をApp.configに登録する必要があります。
  2. リンクを接続します。

    結果は図のようになります。





  3. App.config構成ファイルを作成します。



    このファイルには、プロジェクトのすべての基本パラメーターが含まれます。

    詳細。 App.config
     <add key="project_name" value="SampleTestProject"/> <!--    --> <!--         --> <add key="smtp_server" value=" smtp " /> <add key="smtp_port" value="" /> <add key="smtp_login" value="" /> <add key="smtp_password" value="" /> <add key="mail_from" value=" email" /> <add key="mail_to" value="   " /> <!-- end notif config --> <!--    --> <add key="ImplicitlyWait" value="   ( )" /> <add key="WaitForAjax" value="   ajax ( )" /> <add key="browser" value="  (firefox, chrome  iexplore)" /> <add key="browser_check_url" value="http://ya.ru" /> <!--      --> <!-- browser config end --> <!--   (webpages) --> <add key="Yandex" value="http://yandex.ru/" /> <!--     WebPages     (     WebPages    Yandex) --> <add key="dash_prefix" value="___" /> <!--     namespace (  ) --> <add key="extension_prefix" value="__" /> <--      (  ),    index-1.html     index___1__html --> <add key="folder_index_prefix" value="_fld" /> <!--      ,      ,    ,   https://yandex.ru/test/,      Yandex    test,     _fld --> <!-- pages config end--> <!--     --> <add key="database_name_prefix" value="db_" /> <!--   ,    --> <add key="database_selected_rows_limit" value="50" /> <!--    (- ) --> <add key="db_test" value="172.18.XX.XX;1521;SID;LOGIN;PASSWORD;oracle" /> <!--     --> <!-- : host;port;sid;login;password;type (type    oracle,  mssql--> <!-- data base config end --> <add key="test_step_prefix" value="step_" /> <!--       -,   step_01 --> <add key="test_case_prefix" value="test_" /> <!--     -,   test_000001 --> <add key="datetime_string_format" value="yyyy-MMM-dd -> hh:mm:ss" /> <!--     --> <add key="log_file_name" value="system.log" /> <--!     -->
          
          







  4. ページ(WebPages)用のフォルダーを作成します。



    このフォルダーには、ページクラスのファイルが含まれます。

    詳細。 WebPages
    いくつかのルール:

    • ページフォルダーはWebPagesと呼ばれる必要があります。
    • プロジェクトのルートにある必要があります。
    • 内部には、テストしたシステムのルートフォルダーが含まれている必要があります(たとえば、Yandexをテストしている場合、yandexフォルダーはWebPagesフォルダーにある必要があります)。
    • フォルダ内のページは、テスト対象のシステム内と同じ階層にある必要があります。

      例:

      ページ: test.ru/step1/service/index.html

      フォルダー階層:WebPages-> Test-> step1-> service-> index.html.cs

      重要:フォルダー名とクラス名は大文字と小文字が区別されます
    • ページクラスファイル名は実際のページ名と一致する必要があります


    ページクラス名:

    例:

    ページ:index-1.html

    クラス:index___1__html

    ここに:

    • ページタイトルのハイフンは3つのスラッシュに置き換えられます(App.configでdash_prefixパラメーターを変更できます)。
    • ファイルポイントは2つのスラッシュに置き換えられます(App.configでextension_prefixパラメーターを変更できます。


    ファイル名はないが、フォルダーのみがある場合のクラス名:

    例:

    ページ: test.ru/step1/service

    クラス:_fld(変更可能、App.configのfolder_index_prefixパラメーター)



  5. Pages.csクラスを作成する



     public static class Pages { }
          
          





    クラスにはページクラスオブジェクト(WebPage)が含まれます。

    詳細。 Pages.cs
    このクラスには、要素へのアクセスに使用されるページクラスオブジェクトなどが含まれます。



    いくつかのルール:

    • このクラスでは、サブクラスの階層はWebPagesフォルダーの階層と一致する必要があります。
    • クラスとその中のすべてのオブジェクトはpublic staticでなければなりません。


    クラスの例:

     public static class Pages { public static class Test { public static index__html Index = new index__html(); public static class step1 { public static class service { public static _fld Main = new _ fld(); } public static add__php Add = new add__php(); } } }
          
          







    このエントリにより、ページは次のようなテストで利用可能になります。



     Pages.Test.Index.Open(); Pages.Test.step1.service.Main.Open();
          
          







  6. テスト用のフォルダーを作成します(テスト)



    特別なルールはありません。プロジェクトルートにTestsフォルダーを作成し、必要に応じて、テストされたシステム上にテスト用のフォルダーを作成します。

    詳細。 テスト
    写真は、これが私のプロジェクトでどのように行われたかを示しています。









    常に最初と最後に実行される2つの「サービス」テストを作成することは非常に適切です。 最初のテストでは、さまざまなアクションを実行して環境を構成できます。最後のテストでは、たとえば、スタンドをきれいにして通知を開始します。

    Nunitは(完全なクラス名で)アルファベット順でカテゴリ内のテストを実行します



    通知を開始するには、コードを実行する必要があります。

     AT.Service.Notifier.SendNotif();
          
          





    Environment.csクラスを作成することも役立ちます

     public static class Environment { }
          
          





    個人的には、さまざまなグローバル変数と定数を保存するために使用します。




ページ作成の例(WebPages)



作成されるすべてのページは、ベースのPageBase



クラスから継承されます。このクラスには、すべてのページで同じ必要なメソッド(「開く」、「パラメーターで開く」、「get Url」)が含まれます。



ページクラスの例:

 public class index__php : PageBase { public void OpenVpdnTab() { new WebElement().ByXPath("//a[contains(@href, '#internet')]").Click(); } public string VpdnAction { get { return new WebElementSelect().ByXPath("//select[@name='action']").GetSelectedValue(); } set { new WebElementSelect().ByXPath("//select[@name='action']").SelectByValue(value); } } public string VpdnLid { set { new WebElement().ByXPath("//input[@name='lid']").SendKeys(value); } } public string VpdnTechlist { set { new WebElement().ByXPath("//input[@name='file']").SendKeys(value); } } public string VpdnStartDate { set { new WebElement().ByXPath("//input[@name='start_date']").SendKeys(value); } } public void VpdnSubmit() { new WebElement().ByXPath("//input[@value='']").Click(); } }
      
      





ルール:

ページに存在するすべての要素は、アクセス時に初期化する必要があります。



ページの使用例:

Pages.Test.Index.Open();



-オープン

Pages.Test.Index.Open(“?id=1”);



-パラメータで開く

var url = Pages.Test.Index.Url;



-ページアドレスを取得する

Pages.Test.Index.VpdnSubmit();



-上記のページクラスで規定されている機能の起動



テストケースの作成例(テスト)



上記のように、すべてのテストケースはTests



フォルダーにある必要があります。

すべてのテストケースはパブリックであり、 TestBase



基本クラスから継承する必要があります。



属性[TestFixture]



は、テストケースを持つクラスの名前の前に指定する必要があります。

テストケースの各ステップの前に、 [Test]



属性を指定する必要があります。



テスト属性の詳細については、 こちらをご覧ください



テストケースのあるクラスの例:



 namespace TestProject.Tests.OSE { [TestFixture] [Category("OSE"), Category("OSE_Internet")] /* , nunit       */ public class test_253750 : TestBase { [Test] public void step_01() { Pages.OSE.Inaclogin.Open(); Pages.OSE.Inaclogin.Login = “user”; Pages.OSE.Inaclogin.Password = “password”; Pages.OSE.Inaclogin.Submit(); Assertion(" ”, () => Assert.AreEqual(Pages.OSE.Inaclogin.IsAuthSuccess, true)); } }
      
      







Assertion



は、条件の検証です。



レコード形式:

Assertion ( , () => Assert._accert__nunit() );







なぜAssertを使用しないのですか?

すべてのアサートは、エラー、ロギングなどを登録するためのアクションが実行される特別なクラスに捕捉されます。



データベースの使用例



データベースを操作するには、メソッドを含むAT.DataBase.Executor



クラスがAT.DataBase.Executor



れます。



例:



選択してください:

 var query = select col1, col2 from table_name"; var list = Executor.ExecuteSelect(query, Environment._);
      
      





選択解除:

 var query = “DELETE FROM table_name"; Executor.ExecuteUnSelect(query, Environment._);
      
      





ストアドプロシージャの実行:

 Executor.ProcedureParamList.Add(new ProcedureParam("varchar", "_", «»)); /*   */ Executor.ProcedureParamList.Add(new ProcedureParam("varchar")); /*   */ var res = Executor.ExecuteProcedure("_", Environment._);
      
      





_



は、App.configのdb初期化文字列のsid値と一致する必要があります

 <add key="db_test" value="172.18.XX.XX;1521;SID;LOGIN;PASSWORD;oracle" /> <! --     -->
      
      







テスト結果とサンプルレポートの収集:



前述のように、通知を開始してメールへのレポートを受信するには、最後のテストを開始した後、コードAT.Service.Notifier.SendNotif();



実行する必要がありますAT.Service.Notifier.SendNotif();





NUnitのロジックは、それぞれアルファベット順にテストを実行するため、目的のテストが最後に起動されるように、それに応じて呼び出す必要があります。



アラート設定はApp.configファイルで指定されます。



レポートの例(まだ湿っていますが、情報が十分ではありません):



自動テストレポート

000001 失敗しました step_01:エラー

次へ ステップ:ステップが失敗した、前のステップのエラー

次へ ステップ:ステップが失敗した、前のステップのエラー

次へ ステップ:ステップが失敗した、前のステップのエラー



まとめ

合格率= 0%。



このミニインストラクションのすべてのポイントを完了した若いテスター-自動化エンジニアは、自分のプロジェクトをすばやく作成し、この旅を始めるために必要な最小限のものを手に入れることができます。



まとめます。

提案されたシステムがまだ完成していないこと、実装される多くのアイデアがあることは注目に値します(親愛なる読者からの改善のための提案を本当に期待しています)。

興味がある場合は、次の記事で、フレームワークの動作、テストのセットアップと実行について詳しく説明します。

テストの実行に関して言えば、仕事で無料のteamcityを使用しているとしか言えませんが、これは非常に便利で習得しやすいと思います。



この投稿を読んで、誰かの役に立つことを願っています。

ご清聴ありがとうございました。



All Articles