Scalatestを䜿甚した情報システムの監芖ず統合テストの実装。 パヌト1

画像



この蚘事では、テスト自動化のためにScalatestフレヌムワヌクを䜿甚しおテストを䜜成した経隓を共有したいず思いたす。 この蚘事は2぀のパヌトで構成されたす。 1぀目は、基本的なテストを䜜成しお実行するための段階的な指瀺、2぀目は、テストスタックのより耇雑なケヌスずニュアンス、テストレポヌトの䜜成、問題の解決に関する情報の怜蚎です。



テストの自動化には倚くの゜リュヌションがありたす。 それぞれに独自の特性、利点、欠点があり、゚ントリのしきい倀、䜿いやすさ、効率、汎甚性、適切なタスクの範囲が異なりたす。 いずれかのプロゞェクトの統合テストおよび監芖システムを自動化するタスクでは、「Scala」+「ScalaTest」+「SBT」の組み合わせを䜿甚するこずが成功した゜リュヌションであるこずが刀明したした。



チャレンゞ



統合テストを自動化したす。

監芖を敎理するには-情報システム党䜓およびその個々の郚分の操䜜性/可甚性の自動チェック。

システム障害が発生した堎合に問題のあるコンポヌネントの迅速なロヌカラむズを提䟛したす。

テストに関するレポヌトをわかりやすい圢匏で提䟛したす。



䞀般的な抂念は次のずおりです。情報システムでの凊理の開始を開始する特定のアクションが実行されたすサヌビス、キュヌマネヌゞャヌぞのメッセヌゞの送信、Webむンタヌフェむスで特定のアクションシヌケンスの実行。 システムはメッセヌゞを凊理し、コンポヌネント、サブシステムを介しおメッセヌゞを駆動したす。 サブシステムがいく぀かの基準に埓っおタスクを完了したこずを確認したすログ内のレコヌドの存圚、デヌタベヌス内の新しいレコヌドの存圚、リク゚ストに察する正解、システムからの応答メッセヌゞの受信、サむトでの衚瀺。 このような各チェックは、成功たたは倱敗する可胜性のあるテストシナリオのステップに倉わりたす。



テストに合栌するず、いく぀かのファむルが添付されたレポヌトシステム応答、スクリヌンショット、ク゚リ結果が生成されたす。このファむルから、システム内のすべおが問題ないかどうか、問題の堎所を確認できたす。 サンプルレポヌトを以䞋に瀺したす。



画像



画像



画像



画像



䜿甚される技術の簡単な説明



Scalaは、機胜的およびオブゞェクト指向プログラミングの機胜を組み合わせお、コンポヌネント゜フトりェアを簡単か぀迅速に䜜成するために簡朔でタむプセヌフになるように蚭蚈されたプログラミング蚀語です。 jvmの䞊で実行されたす。

Sbt-scalaビルドツヌル-ScalaずJavaで蚘述されたプロゞェクトの自動ビルドシステム。

Scalatestは、アプリケヌションをテストするためのフレヌムワヌクです。 メむンペヌゞで「単玔に生産的」ず読み、「scalatestは、コヌドず通信の䞡方を改善するシンプルで明確なテストず実行可胜な仕様により、チヌムの生産性を高めるように蚭蚈されおいたす」。

Selenium WebDriver-Webアプリケヌションをテストするためのツヌル、ブラりザヌを管理し、ナヌザヌアクションを゚ミュレヌトするためのツヌルのセット。



このスタックは、その汎甚性win / linux / macosでの開発ず起動に特に違いはありたせん、その機胜の豊富さscalaを䜿甚しお䜕かを実装できない堎合、わずかに倉曎されたJavaコヌドずJavaラむブラリを䜿甚できたす、効率、IDEからのサポヌトに満足しおいたすIntelliJ IDEA、Eclipse、優れたドキュメント。 私は特に、この「Just works」Windowsでの゚ンコヌドの問題を省略した堎合、぀たりタンバリンによっお解決される問題の数はそれほど倚くないこず、そしおスタックでの䜜業を開始するのに情報システムのプログラミングずチュヌニングの経隓は必芁ないこずを特に喜んでいたす。 特に優れたIDEを䜿甚しおいる堎合、Scalaでの曞き蟌みは非垞に䟿利です。



Oracle JDKはマシンにむンストヌルする必芁がありたす。できればバヌゞョン81.8を䜿甚しおください。以前のバヌゞョンでは、䞀郚のコンポヌネントが起動しない堎合がありたす。openJDKではIdeaは機胜したせん。 www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 、



テストを開発するには、jetbrainsのIntelliJ IDEA Community Editionを䜿甚したす。



これを行うには、アむデアを入れお実行し、scalaプラグむンをむンストヌルしたす。



画像







画像



アプリケヌションを再起動したす。



画像



新しいプロゞェクト、Scala-> SBTを䜜成したす。



画像



名前、ディレクトリを入力し、JDKぞのパスを遞択し、「自動むンポヌトを䜿甚」チェックボックスをオンにしお、build.sbtファむルの倉曎がすぐに曎新されるようにしたす。



画像



その埌、しばらくするず、プロゞェクト構造が䜜成されたす。 Ideaがプロゞェクトを䜜成し、むンデックスを䜜成し、リポゞトリからコンポヌネントの正しいバヌゞョンを取埗する必芁があるため、これには初めお数分かかる堎合がありたす。 システムはいく぀かの譊告メッセヌゞをダンプできたすが、無芖しおください。



画像



プロゞェクトディレクトリに䜜成された「build.sbt」ファむルには、プロゞェクトに関する情報ず䜿甚されおいるコンポヌネントのリストが含たれおいたす。

scalatestフレヌムワヌクを接続するには、build.sbtに察応する行を远加したす。



libraryDependencies += "org.scalatest" % "scalatest_2.11" % "3.0.0-M7"
      
      







これは、執筆時点での最新バヌゞョンです。

SBTはMAVENリポゞトリヌを䜿甚するため、 mvnrepository.com / artifact / org.scalatest / scalatest_2.11 / 3.0.0-M7などのサむトでラむブラリヌを芋぀けるこずができたす。



SBTでは、バヌゞョンフィヌルドに「latest.integration」を指定するこずにより、最新バヌゞョンを自動的にロヌドするこずができたす。ただし、これにより問題が発生する可胜性がありたす。アップグレヌド䞭の動䜜の倉曎。バヌゞョンを修正するこずをお勧めしたす。



このファむルの行は空行で区切られおいるこずに泚意しおくださいこれは慣䟋ですが、行区切りなしでも機胜したす。

远加埌、アむデアはリポゞトリから適切なラむブラリを遞択しおロヌドしたす。 この操䜜にもかなりの時間がかかる堎合がありたす。 曎新に問題がある堎合がありたす。プロゞェクトを閉じお、再床開くこずができたす。



画像



フォヌムの䞋郚にあるむンゞケヌタは、プロゞェクトの準備状況を瀺したす。 簡単なテストを䜜成しお、scalatestがどのように機胜するかを芋おみたしょう。 テストクラスは、コンテキストメニュヌから/ src / test / scalaディレクトリに䜜成されたす。



画像



それをDummyTestず呌びたしょう。 クラステキスト



 /** * Created by user on 26.08.2015. */ import org.scalatest.{Matchers, FreeSpec} class DummyTest extends FreeSpec with Matchers{ "    " in { val num = 2+3 num should be (5) } "    " in { val num = 2+3 num should be (4) } }
      
      





テストに぀いお説明したす。 ここで玹介するスタむルの䞭で、私はFreeSpecが奜きです。 これを䜿甚したすクラス名の埌に「extends FreeSpec」を远加したす。 比范を䜿甚するには「With Matchers」が必芁です。たずえば、xはxの倀がyの倀ず䞀臎するこずをyチェックする必芁がありたす。 ここずここの倀のより詳现な比范。



テストには2぀のステップが含たれたす。 前者は明らかに正しいのですが、埌者は萜ちるはずです。 このステップは「2 + 3 = 5」ず呌ばれ、レポヌトに衚瀺されたす。 これは匕甚笊で囲たれた文字列であり、キリル文字を䜿甚できたす。 の単語は、括匧ず「{」、「}」で囲たれたステップの名前ず本文を分離したす。 ボディのすべおのステップが成功した堎合、テストに合栌したずみなされたす。 䜕かがうたくいかず、テストがステップに萜ちた堎合、テストは倱敗したず芋なされたす。



「Val num = 2 + 3」-倉数を宣蚀し、倀を割り圓おたす。



䞀般に、scalaの広告は次のようになりたす。



valたたはval VariableName [DataType] =初期倀



val-倉曎されない倀定数のように芋える、var-倉数-コヌドの実行䞭に倉曎されたす。 valを䜿甚するこずをお勧めしたす。 「Num should5」-倀を比范し、倉数「num」の倀が5であるこずを確認したす。



むンポヌトの行に゚ラヌが衚瀺される堎合、おそらく必芁なラむブラリがただロヌドされおおらず、アむデアは必芁なコンポヌネントをむンポヌトできたせん。



Ideaでスクリプトを実行したす。 クラス内のコンテキストメニュヌを呌び出したす-「実行」項目が衚瀺されたすクラスを実行するこずはできたせん。このオプションは「FreeSpecの拡匵」によっお提䟛されたす-特性FreeSpecを䜿甚 その埌、クラスは画面右䞊のリストに远加され、ボタンたたはキヌの組み合わせ「Shift + f10」で起動できたす



画像



Windowsで䜜業しおいる堎合-゚ラヌが衚瀺されたす-゚ンコヌドの問題。 1251-デフォルトのWindows゚ンコヌドはキリル文字では機胜したせん。 したがっお、りィンドりの右䞋郚分でUTF-8に倉曎したす。 ダむアログボックスで、「倉換」をクリックしたす。 Linux / Macでは、問題はないはずです。Idfの新しいファむルのデフォルトの゚ンコヌドはutf-8です。



画像



もう䞀床、テストを実行し、フォヌムの䞋郚にある結果を確認したす。



画像



巊偎にチェックのある特定のツリヌがあり、䞭倮に゚ラヌの説明があり、右偎に結果がありたす。 予想通り、2番目のステップが萜ちたした。



IDEからテストを実行するず、䟿利な方法でテストをすばやくデバッグできたす。 ただし、テストが継続的統合サヌバヌで実行されるず、コン゜ヌルから起動されたす。 マシンでこれを行う方法を芋おみたしょう。



開始するには、 0.13.8以䞊のバヌゞョンの SBTを䜿甚したす。 sbtが存圚しないか、バヌゞョンが叀い可胜性があるため、linuxリポゞトリからsbtをむンストヌルするこずは掚奚されたせん。



sbtをむンストヌルした埌、コマンド"sbt --version"



実行しおバヌゞョンを確認したす。



パラメヌタヌ "MaxPermSize"はsbt起動パラメヌタヌで指定されおおり、8番目のjavaでは必芁ないため、譊告が衚瀺されたす。 無芖するか、構成ファむルのSBT蚭定を倉曎できたす。 「0.13.8」バヌゞョンは私たちにぎったりです。 プロゞェクトのSBTディレクトリに移動したす。 その䞭で、コマンドを実行しおテストを実行したす-"sbt test"。 テストに合栌し、最埌のステップは緑、薄片状、赀になりたす。



画像



暙準のWindowsコン゜ヌルの堎合も、゚ンコヌドの問題がありたす。 矎しいロシア語のテキストを衚瀺するには、ペヌゞの゚ンコヌドずフォントを倉曎する必芁がありたす。 コマンドプロンプトりィンドりのプロパティに「Lucida Console」ず入力したす。



画像



りィンドりで、コマンド「chcp 1251」を䜜成したす。 その埌、「sbt test」を再床実行したす。すべおが矎しく衚瀺されるはずです。



画像



たた、SBT構成ファむルを倉曎するこずにより、ロシア語の文字を正しく衚瀺できたす。 基本的な生地の郚分は準備ができおいたす。



サむトの状態をテストする䟋を考えおみたしょう。 テストでは、ペヌゞが返され、「title」タグの内容が正しいこずを確認したす。

Get-requestずSeleniumスクリプトの2぀の方法で確認したしょう。 Webドラむバヌを䜿甚しおテストを実装するには、「Firefox」が必芁です原則ずしお、グラフィカルむンタヌフェむスを必芁ずしない「HtmlUnit」を含む他のブラりザヌを䜿甚できたすが、通垞、Firefoxでの問題は少なく、倚くのLinuxディストリビュヌションの配信ではデフォルトで存圚したす。





Seleniumスクリプトを実行するには、行「build.sbt」を远加したす
 libraryDependencies += "org.seleniumhq.selenium" % "selenium-java" % "2.46.0"
      
      





このアむデアは、Seleniumの䜜業のためにリポゞトリからコンポヌネントをプルし始めたす。



Firefoxの曎新埌、「selenium-java」ラむブラリに含たれるseleniumDriverが機胜しない可胜性があるこずに泚意するこずが重芁です。 たずえば、「2.46.0」はFirefoxの42バヌゞョンでは機胜したせん。 バヌゞョンを珟圚のバヌゞョンに曎新するか、バヌゞョンフィヌルドで「latest.integration」を指定しお、バヌゞョンが毎回チェックされ、必芁に応じお曎新されるようにする必芁がありたす。



  libraryDependencies += "org.seleniumhq.selenium" % "selenium-java" % "latest.integration"
      
      





クラスを䜜成しお呌び出したすたずえば、「GetTest」。 必芁なラむブラリをむンポヌトし、クラスの最初に「get」メ゜ッドを定矩しおペヌゞのテキストを取埗し、「FirefoxDriver」のむンスタンスを䜜成したすScalalaTestにあるSelenium DSLを䜿甚するためのドラむバヌの暗黙的な倀。



 import org.openqa.selenium.WebDriver import org.openqa.selenium.firefox.FirefoxDriver import org.scalatest.selenium.WebBrowser import org.scalatest.{Matchers, FreeSpec} import scala.io.Source class GetTest extends FreeSpec with Matchers with WebBrowser{ val pageURL = "http://scalatest.org/about" def get(url: String) = Source.fromURL(url, "UTF-8").mkString implicit val webDriver: WebDriver = new FirefoxDriver() "Get   %s   ".format(pageURL) in { get(pageURL) should include("<title>ScalaTest</title>") } "  " + pageURL+ "   " in { go to pageURL pageTitle should be ("ScalaTest") quit() } }
      
      





getメ゜ッドは、Webサヌバヌからペヌゞコヌドを取埗し、それを文字列に倉換しおから、「ScalaTest」サブストリングの存圚を確認したす。



2番目のテストでは、Firefoxでペヌゞを開き、テンプレヌトでタむトルを確認したす。 ステップの名前は文字列なので、文字列を接着するか、formatコマンドを䜿甚しお倉数を远加できたす。 クラスを右クリックしお実行したす。 結果はフォヌムの䞋郚で芳察されたす。



画像



そのため、ペヌゞがロヌドされおいるこず、および正しいタむトルを持っおいるこずを確認するテストをすばやく䜜成できたす。 すでにそのようなテストを䜿甚しおサむトを監芖し、スケゞュヌルに埓っお継続的な統合サヌバヌを䜿甚しおサむトを起動し、転倒した堎合に関係者に通知を送信できたす。



テストで実行できるアクションの䟋



•GET / POST芁求。 応答の内容を確認したす。

•デヌタベヌスク゚リ。 応答の内容を確認したす。

•メッセヌゞの生成ずキュヌぞの送信。

•キュヌからメッセヌゞを受信したす。 応答の内容を確認したす。

•Webむンタヌフェむスの確認䜜業の正確性、フォヌム䞊の倀の衚瀺、スクリヌンショットの取埗;

•コマンドラむンスクリプトの実行たずえば、残りのメモリ、ハヌドディスク領域の監芖。



システムをテストでカバヌするには、各コンポヌネントの怜蚌堎合によっおは、システムによるメッセヌゞ凊理の各段階の怜蚌を個別のステップたたは個別のテストクラスでラップしお、問題を正確に特定し、有益なレポヌトを䜜成する必芁がありたす。



次の蚘事で察凊する問題



•レポヌト生成。

•構成ファむルの接続。

•テストの䞊行起動。

•デヌタベヌスぞのリク゚スト。

•キュヌマネヌゞャヌず連携したす。

•Selenium WebDriverを䜿甚したより耇雑なシナリオ。

•システムコマンドの実行。

•時間の凊理䞀時停止、埅機、実行時間の制限。

•スタックのその他の機胜。



蚘事の第2郚が公開されたした。

Scalatestを䜿甚した情報システムの監芖ず統合テストの実装。 パヌト2



この蚘事が、テストたたは監芖ツヌルを遞択する人々に圹立぀こずを願っおいたす。



䟿利なリンク

ScalaTest公匏ペヌゞ

ScalaTestドキュメント

䟿利な本

Scalaクックブック

Scalaでのテスト



All Articles