今日の記事のトピックは、Webアプリケーションの機能テストの自動化です。 より正確には、テストそのものとしての自動化そのものではなく、これのクイックスタート、もちろんエキサイティングな取り組みです。
機能テストと回帰テストに関与する多くのテスターは、遅かれ早かれ、プロセスを自動化するというアイデアを思いつきます。 同じリグレッションケースの実行が時間の経過とともにひどく迷惑になることは間違いありません。
この記事は、このアイデアに近づき、自動化の旅をどこから始める
このパスの最初に自分のことを覚えていると、次の初期データが得られます(私は一人ではないに違いありません):
- 自動化したいという要望があり、自動化できるプロジェクトがあります。
- 自動化、セレン、フレームワークの構築などに関する情報を含む、ブラウザで開かれている50以上のタブ。
- 行き止まりと間違ったアプローチの認識の結果として既に放棄されているVisual Studioプロジェクトをいくつか開始しました。
- 自動化のために管理者によって公式に割り当てられた時間不足 経験がない、何が判明するか(そして、それが判明するかどうか)不明です。
リーダーシップは別の問題です。
あなたはそれを受け取って「自動化したい!」と言うことはできません。そして最終的には承認とタスクを完了する時間を得ることができます。 経営陣は結果を必要とするため、「何がわからないか」という時間を割り当てないことが非常に合理的です。
ここから2つの状況が続きます。
状況1。
- ステップ1.テスターは自動化のアイデアを表明し、おそらく技術仕様を作成し、人件費と投資回収の評価を行いました。
- ステップ2.管理者は次のように述べました。「OK、相棒、始めましょう。 学期の終わりまでに、完了した作業に関するレポートを提出する必要があります。
次に、開発が始まり、試行錯誤、新しい知識、テスターは限界に向かって動機付けられます。 しかし、ここに期限が来ます。可能性の90%は開発の難しさ(私たちは初心者です)です。そのため、期限が過ぎたため、ToRで考慮されなかった新しいアイデアがありましたが、本当にそれを実装したかったのです。 その結果、システムが予定どおりに配信されず、経営陣が動揺する可能性が高くなります(多くのことを達成したこと、多くのことを学んだこと、より有能になったことは関係ありません)。結果はありません。
予約します。 おそらく、親愛なる読者、彼はこの道を歩き、すべてがうまくいきましたが、私はそのような人々の少数がいると確信しています。
状況2。
- ステップ1.テスターは空き時間に
静かにトピックを勉強し、記事を読み、少し自動化しました。 - ステップ2.時間が経ち、テスト担当者はすでに多かれ少なかれ自動化プロジェクト、数十の自動テストを実施しています。 はい、プロジェクトはまだ完了していませんが、今度は経営陣にイニシアチブとその成功を通知します。これにより、価格が上昇し、さらなる動機付けが得られます。
- ステップ3.テスト担当者は経営陣に通知し、完了したプロジェクトではないものの、結果がプロジェクトを完了するための承認と時間を受け取るため、作業者に表示します。
私の意見では、パス2がここで好ましいです(おそらく私自身がこのパスを取ったのでそのように思われます)、それはあなたが成功しない場合、誰もそれを知らないので、否定的な結果の欠如を保証するからです
この記事を投稿することで、いくつかの目標があります。
- 自動化エンジニアである初心者テスターに利益をもたらします。最初の自動テストをすばやく作成し、自動化を続けます。
- としてプロジェクトの批判を取得します まだ飲まれて満たされています。
- システムを使用する人を見つけ、そうでない人にはどの機能が欲しいかについてのフィードバックを受け取ります。
この記事が初心者の自動化機能に役立つことを願っています。
また、批判を期待します。 添付のプロジェクトは現在開発中であり、補足する必要があります。
使用されるもの:
- 開発言語と環境:MS Visual Studio 2012のC#(クラスライブラリプロジェクト)。
- ブラウザー管理:Selenium Webdriver。
- テストフレームワーク:NUnit。
- データベースを操作するには(どこかからテストデータを取得する必要がありますか?)この段階では、標準の
OracleClient
とSqlClient
ます。
アプリケーションのインストールとプロジェクトのセットアップ
動作するには、次のものが必要です。
- Git
- Visual Studio 2010/2012;
- Nunit 2.6.1;
- Resharper(テストの実行とデバッグの便宜上);
- Selenium IDE-firefoxのプラグイン (ページ上の要素のロケーターを認識するため)。
リポジトリからプロジェクトをダウンロードするには、フォルダー(格納する場所)でgit bashを開き、コマンドを実行する必要があります。
git clone git://github.com/4gott3n/AT.git master
たとえば、 この記事でGitの仕事に慣れることができます。
次に、Visual Studioで
AT.sln
ファイルを開き、ATプロジェクト(フレームワーク自体)を含むソリューション、およびページ、テストなどの実装を確認できるテストプロジェクトの例を確認します。 (彼は自分のプロジェクトを作成するための便利な例です)。
次のステップは、すべてのテスト、ページ、その他すべてを保存するプロジェクトを作成することです。
あなたがする必要があること:
- ソリューションに新しいプロジェクト(クラスライブラリ)を追加します;後でこの名前をApp.configに登録する必要があります。
- リンクを接続します。
結果は図のようになります。
- 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" /> <--! -->
- ページ(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パラメーター)
- 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();
- テスト用のフォルダーを作成します(テスト)
特別なルールはありません。プロジェクトルートに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を使用しているとしか言えませんが、これは非常に便利で習得しやすいと思います。
この投稿を読んで、誰かの役に立つことを願っています。
ご清聴ありがとうございました。