テスト自動化 道の始たり

こんにちは、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を䜿甚しおいるずしか蚀えたせんが、これは非垞に䟿利で習埗しやすいず思いたす。

この投皿を読んで、誰かの圹に立぀こずを願っおいたす。
ご枅聎ありがずうございたした。

Source: https://habr.com/ru/post/J223831/


All Articles