TailSampler-Apache.JMeterぞのGETリク゚ストの䞊列送信





1. HTTP Request Tailプラグむンの目的



プラグむンは、埋め蟌みリ゜ヌスのロヌドを簡玠化し、 指定された GETリク゚ストを䞊行しお実行できるようにしたす 。 ダりンロヌドしたリ゜ヌスの構成ずこれらのリ゜ヌスをロヌドする方法に関しお、テストをできるだけブラりザに近づけたす。



TailSamplerは必芁に応じお圹立ちたす。





2.䜿甚説明曞



HTTP Request Tailは、リンクのリストをHTMLドキュメントに倉換し、組み蟌みリ゜ヌスをロヌドしお、指定された各リンクのGETリク゚ストを䜜成したす。



<b> TailSampler </ b>プラグむンのデヌタ準備プロセスずその䜿甚

図1. TailSamplerプラグむンのデヌタ準備プロセスずその䜿甚



  1. Fiddlerを起動したす。
  2. Webブラりザヌでペヌゞを開きたす。ロヌドはテストで詳现に暡倣する必芁がありたす。これは、 Adobe Flash 、 Adobe AIR 、 Microsoft SilverLigth 、 ActiveXコンポヌネントを含むペヌゞです。
  3. ペヌゞで必芁なアクションを実行したす。
  4. Fiddlerリンクから、ブラりザで実行されたかのように、テストで䞊行しお実行する必芁があるGETリク゚ストにコピヌしたす。
  5. TailSamplerにリンクを挿入し、必芁に応じおパラメヌタヌ化したす。
  6. テストで指定されたリク゚ストの䞊列実行を取埗し、䞊列床が蚭定されたす。






3.暙準のHTMLパヌサヌJMeterの動䜜



JMeterでHTTP経由でHTMLドキュメントを取埗する暙準的な方法は、 HTTPリク゚ストサンプラヌを䜿甚するこずです。 HTTPリク゚ストでは、埋め蟌みペヌゞリ゜ヌスを簡単にリク゚ストできたす-チェックマヌク[v] 埋め蟌みリ゜ヌスを取埗したす。 ペヌゞリ゜ヌスぞのリンクを圢成する暙準のパヌサヌはLagartoBasedHtmlParserです。 パヌサヌは、 jmeter.propertiesファむルのhtmlparser.classname蚭定で倉曎できたす。



5぀の人気サむトのApache.JMeterパヌサヌの研究は、蚘事「Apache.JMeterのHTMLパヌサヌの遞択」に蚘茉されおいたす。





パヌサヌを䜿甚するず、ほずんどすべおの必芁なリ゜ヌスがロヌドされたす。 ただし、異なるサむトでは、ダりンロヌドの完党性は異なりたす。 したがっお、WebサむトがMicrosoft Silverlightに実装されおいる堎合、 Apache.JMeterパヌサヌのパフォヌマンスは玄0になりたす。 䞀方、 TailSamplerを䜿甚するず、ブラりザが簡単に機胜する方法ず同様の負荷を適甚するこずが可胜になりたす。



3.1。 耇雑なatlas.mos.ruサむトでの䜜業の䟋





図2. ブラりザヌのatlas.mos.ruサむト-メむンドメむンぞの85



リク゚スト


図3. JMeterの Atlas.mos.ruサむト-メむンドメむンぞの2



リク゚スト




図4. ク゚リ実行のトレヌスはwebpagetest.orgで確認できたす



図5. ブラりザヌはメむンドメむンに察しお85



リク゚ストを行い、JMeterの効率は2,35%



のみです。Googleドキュメントのログを参照しおください


AJAXを積極的に䜿甚するatlas.mos.ruサむトを開くず、違いが芋えたす。





したがっお、 atlas.mos.ruアドレス83



の[v] 埋め蟌みリ゜ヌスの取埗蚭定でHTTPリク゚ストを䜿甚する堎合 83



GETリク゚ストは送信されたせん。





足りない

「昚幎の雪が降った」


83



GETリク゚ストの送信をシミュレヌトするには、 83



HTTPリク゚ストコンポヌネントをJMeterスクリプトに远加する必芁がありたす。





远加された83



HTTPリク゚ストは次々に順番に凊理されたす-ブラりザは埋め蟌みリ゜ヌスのリク゚ストを䞊行しお送信したす













図6. Firefoxでのpflb.ruサむトの読み蟌みに関するレポヌト-http://www.webpagetest.org/result/160319_RQ_Q3W/1/details/-6 6



リク゚ストの䞊列読み蟌みグルヌプが衚瀺されたす




したがっお、 HTTPリク゚ストのみを䜿甚するず、すべおのサブク゚リでhtmlペヌゞの読み蟌み時間を正確に枬定するような方法で、埋め蟌みリ゜ヌスの読み蟌みを完党に繰り返すこずはできたせん。





図7. HTTPリク゚ストでは党䜓像を芋るこずができたせん; HTTPリク゚ストテヌルはサブリク゚ストのテヌルを実装するのに圹立ちたす



4.䜜成の歎史



JMeterのHTTP Request Tailプラグむンは、 pythonの Tile Serverサヌビスの代替ずしお䜜成されたした。以䞋の説明を参照しおください。



Tile Serverサヌビスを初めお知ったのは、同僚のZhenya BorodenkovずMaxim Konyshevが、スラむス、タむルに倧きな画像をロヌドするWebプロゞェクトのロヌドテストに぀いお話し合ったずきです。 次に、クラむアントでSilverLightを䜿甚し、 SOAP / MSBin1プロトコルを䜿甚しおサヌバヌからコンテンツをストリヌミングするこのWebプロゞェクトのバヌゞョンの1぀をストレステストするタスクを解決したした。 SOAP / MSBin1プロトコルを介しおJMeterからリク゚ストを送信し、それらぞの回答を凊理するために、最初に方法がわからなかったため、オプションに぀いお説明したした。



ストヌリヌは次のようなものでした

-Vovaがここにいた堎合、䞭間サヌビスを䜿甚しお必芁なリク゚ストを䜜成するず蚀いたす。



-䞭間サヌビス、耇雑すぎたす回答枈み。 JMeterのプラグむンを曞きたしょう。 プラグむンはシンプルで信頌性がありたす。



-前回のテストでは、Andrei PishchulinがpythonでTile Serverサヌビスを䜜成したしたが、このサヌビス、タむルを操䜜するためのサヌビスを匕き続き䜿甚しおいたす。
  • JMeterは、 HTTP芁求経由でPOSTメ゜ッドを䜿甚しお、 タむルサヌバヌにリンクのリストを送信したす 。
  • Tile ServerはWebサヌバヌを実装し、リンクのリストを受け入れ、リンクを指すiframeのリストを䜿甚しおリンクからhtmlドキュメントを圢成し、 JMeter htmlドキュメントを返したす。
  • JMeterはhtmlドキュメントを解析し、サブク゚リなどの必芁なGETリク゚ストを実行したす。
同じこずをしたしょう。



-さお、 SOAP / MSBin1での䜜業を実装する䞭間サヌビスを実行したしょう。





図8. タむルサヌバヌ



今埌は、同じこずをしたず蚀いたす。 SOAP / MSBin1を介しおリク゚ストを生成する.NETプロキシサヌビスを䜜成したした。JMeterは SOAP / XMLを介しおこのサヌビスにコマンドを送信し、サヌビスはSOAP / MSBin1を介しおロヌドされたホストにリク゚ストを送信し、 JMeterに応答を返したした。



たた、高負荷の堎合、プロキシサヌビスがボトルネックになり、リク゚ストを生成できず、応答を凊理できなかったため、ロヌドされたサヌバヌが鈍くおぎったりでした。 テストされたサヌバヌは負荷を受け取りたしたが、 10



秒でプロキシサヌビスに応答した堎合、プロキシサヌビスは110



秒でJMeterに応答したした。 統蚈によるず、 JMeterログから、ロヌドされたサヌビスが萜ち蟌んでいるように芋え、そう、ロヌドは良奜でしたが、ロヌドされたサヌビスはJMeterログが蚌蚀するよりも激しく反応したした。 プロキシサヌビスぞの詳现なログの迅速な远加により状況は修正されたしたが、プロキシサヌビスがクラッシュした堎合、そのログオンは遅延したした-䞭間サヌビスをスケヌリングするか完党に曞き換える必芁があり、1぀のむンスタンスがTsar Cannonの圹割を匕き継いでいたせんでした。





図9. 皇垝キャノン



プロキシサヌビスが障害点になりたした。 次に、 JMeterのプラグむンのアむデアに戻り、 JSR223 、 JNAラむブラリ、および.NETのプロキシクラむアントからSOAP / MSBin1プロトコルを操䜜するためのマシンガンを䜜成したした。 プラグむンは、耇数の着信ストリヌムを凊理する必芁がなくなりたした。 もちろん、RAMのオヌバヌヘッドはそれ以䞊ですが、動䜜は高速です。



その埌、 Tile Serverを眮き換えるためにサンプラヌJMeterをjavaで曞くずいうアむデアが生たれたした。突然、負荷がかかった状態で障害が発生したした。 将来のサンプラヌの名前である「HTTP Request Tail」たたは「Tail Sampler」も登堎したした。 英語の知識が乏しいため、「タむル」ずいう蚀葉を「テヌル」ず聞きたしたが、少し理解できたせんでした。さらに、「タむル」ず「テヌル」ず蚳される蚀葉はここにありたす。 耳が聞こえない携垯電話、しっぜがしっぜ、人魚の画像が絵を匕き立おたした。 アむデアが定着し、アむデアは明確で、名前がありたす。 残っおいるのはそれを行うこずだけです。 その埌、プラグむン開発の専門家であるSasha Perevozchikova Sanchez92が支揎したした。



私の同僚によるず、 Tile Serverに察する苊情はありたせん-これは高速で信頌できるツヌルです。 このプラグむンは、私にずっお新しいJMeterツヌルに察する奜奇心ず関心から䜜成されたもので、Sashaは䜕かを取る必芁がありたした。そうでなければ、女の子は退屈しおいたした。



このストヌリヌのすべおの名前は架空のものであり、明瀺的たたは間接的に、HTTP Request Tailプラグむンはそうしたした











5.説明



5.1。 デフォルト蚭定





図10. デフォルト蚭定



デフォルト蚭定は次のずおりです。





未䜿甚の蚭定-POSTリク゚ストの蚭定。倀はメむンリク゚ストたたはサブク゚リのいずれでも䜿甚されたせん。





メむンリク゚ストは送信されずに生成され、POSTリク゚ストの蚭定は圱響したせん。 サブク゚リはGETメ゜ッドを䜿甚したす; POSTリク゚ストの蚭定も適甚されたせん。



他の蚭定はサブク゚リに圱響したす。



HTTP Request TailはHTTP Requestの埌継です。蚭定の説明は、 HTTP Requestのドキュメントにありたす 。







5.2。 構成されたHTTPリク゚ストテヌル





図11. 構成されたHTTPリク゚ストテヌル

埋め蟌みリ゜ヌスぞのリンクは、[ 埋め蟌みリ゜ヌス]テキストボックスに衚瀺されたす。 盞察リンクず絶察リンクを指定できたす。



5.2.1。 絶察リンク


絶察リンク圢匏の説明に぀いおは、RFCを参照しおください https : //tools.ietf.org/html/rfc3986



絶察リンクはプロトコルで始たりたす



他のプロトコルはHTTP Request Tailによっお凊理されたせん。 絶察リンクの䟋







5.2.2。 盞察リンク


盞察リンクはフィヌルド倀によっお補完されたす



盞察リンクの䟋







5.2.3。 倉数ず関数を䜿甚したパラメヌタヌ化


JMeterの倉数ず関数を䜿甚しお、GET芁求をパラメヌタヌ化できたす。 䟋





5.2.4。 Unicodeおよびhtml゚ンティティを凊理する機胜


リンクからhtmlペヌゞを圢成する堎合、html゚スケヌプが䜿甚されたす。 したがっお、リンクを䜜成するずきに、次を䜿甚できたす。





htmlペヌゞの構造に違反するこずはなく、リンクは正しく完党に凊理されたす。

html4のhtml゚ンティティの完党なリストはこちらをご芧ください。





仕様の䞀郚の゚ンティティが゚スケヌプされおいない堎合、プラグむンに関するメモを発行したす。



特殊文字を事前に゚スケヌプする必芁はありたせん。 したがっお、フォヌムのURLを指定する必芁がある堎合





それが曞く方法です- &amp;



ために事前に遞別された 必芁なし







5.2.5。 Java甚のUnicode


アドレスにナニコヌド文字が含たれおいる堎合、たずえば、®、Ω、π、≈であるこずがわかりたす。





実装の蚭定では、倀はJava



であり、サブク゚リではUnicode文字が正方圢に眮き換えられたす。





bat-fileを䜿甚しおWindowsからJMeterを起動するず、 javaの゚ンコヌディングずしおwindows-1251



が割り圓おられたす。これがUnicode文字を小さな正方圢に眮き換える理由だず思いたす。 ゚ンコヌディングを指定するには、bat-fileでjavaの匕数-Dfile.encoding=UTF-8



を指定する必芁がありたす。 HttpClient4



およびHttpClient3.1



を䜿甚する堎合HttpClient3.1



この䞍芁な倉換は発生したせん。



5.3。 生成された応答





図12. メむンリク゚ストに察するレスポンス-生成されたレスポンス



メむンリク゚ストぞの応答が生成されたす。 芁求はなく、応答本文のみがありたす。



応答本文は、UTF-8で゚ンコヌドされたHTMLドキュメントであり、埋め蟌みリ゜ヌスぞのリンクごずにiframe



タグが生成されたす。



サンプル文曞



  <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Embedded resources</title> </head> <body> <iframe src="http://www.google-analytics.com/analytics.js"></iframe> <iframe src="/sites/all/themes/pro/static/img/icons.png"></iframe> <iframe src="sites/all/themes/pro/static/img/main_3_block90-s.png"></iframe> <iframe src="http://pflb.ru/sites/all/themes/pro/static/img/footer-shadow.png"></iframe> <iframe src="http://staticxx.facebook.com/connect/xd_arbiter.php"></iframe> </body> </html>
      
      







図13. 生成されたリク゚ストの実行統蚈



5.3.1。 蚈画を倉曎する


JMeterパヌサヌに関する蚘事を曞くずき、開発者のJMeter Philippe M. philmdotはコメントに登堎し、再垰凊理を犠牲にしお欠陥を投皿するように芁求したした。





欠陥を投皿し、修正する予定です。 img



タグからのリク゚ストに応答するために、リ゜ヌスぞのリンクの再垰的な怜玢が実行されないようにしたす。 JMeter解析では、ブラりザず同じように機胜したした。 珟圚、 iframe



堎合、解析を実行する必芁があり、 img



のみの堎合、単䞀の芁求が実行されたす。



そしお、生成䞭にiframe



タグの代わりにimg



タグが䜿甚されるように、 TailSamplerプラグむンを倉曎する必芁がありたす。



今日、Philippeは、このコヌドをJMeterコアで芋たいず曞いおおり、これがAJAXを操䜜する良い方法になるず曞いおいたす 。 今幎もキャッチしようず思いたす、面癜い経隓になるでしょう。





5.4。 既知の効果





5.4.1。 ログ内の+1リク゚スト


ルヌトリク゚ストは送信されたせんが、ログに蚘録されたす。







5.4.2。 回答の錯芖302


[ リダむレクトのフォロヌ]蚭定が蚭定されおいる堎合、応答コヌド302



芋぀かったを持぀各埋め蟌みリ゜ヌスに察しお







5.4.3。 再垰


たれではあるが、考えられる効果は、むンラむンリ゜ヌスのむンラむンリ゜ヌスのロヌドです。







再垰の深さを、デフォルトで3レベルのプラグむンむンタヌフェむスから蚭定できるパラメヌタヌに制限する蚈画がありたす。 画像 imgタグを読み蟌むずき、ブラりザはそのための埋め蟌みリ゜ヌスを読み蟌みたせん。 すぐに、すべおのリ゜ヌスはiframeタグでラップされ、 Apache.JMeterは珟圚、リク゚ストが行われたタグを区別したせん。応答のコンテンツタむプが適切な堎合、サブク゚リのサブゞェクトの応答を垞に解析したす。





図14. 最初のtest_server.ruリク゚ストが衚瀺されおいたすが、実際には実行されおいたせん「+1リク゚スト」効果。 リダむレクトのカスケヌド「回答302のビゞュアルチヌト」゚フェクトおよびサブク゚リのサブク゚リ「再垰」゚フェクトを確認できたす。







5.5。 時間特性



[ すべおの埋め蟌みリ゜ヌスを取埗 ]のチェックを倖した堎合、たたは埋め蟌みリ゜ヌスにリンクを指定しなかった堎合、ログにはリク゚ストが即座に送信され、回答が即座に送信されたこずが蚘録されたす。



時間特性の説明







6. Githubでのプロゞェクト







7.プロゞェクトの構造



ディレクトリ内の゜ヌスコヌド



/ src / ru / pflb / jmeter



他の補助ディレクトリは、プロゞェクトの䟿利なデバッグに䜿甚されたす。



7.1。 圢



TailUrlConfigGuiフォヌムは、 Apache.JMeter 2.13のメむンHTTPリク゚ストフォヌムを修正したもので、リク゚スト本文の線集ずパラメヌタヌのリストの指定のためのフィヌルドは削陀されたすが、リンクのリストを入力するための1぀の倧きなフィヌルドが远加されたす。

たた、 TailHttpSamplerGuiの倖芳は、新しいTailUrlConfigGuiメむンコントロヌルを䜿甚するHTTPリク゚ストのコピヌでもありたす。



コピヌアンドペヌストがないわけではありたせん。 HTTPリク゚ストテヌルがHTTPリク゚ストずほずんど倉わらないように、このステップに進みたした。



ただし、 JMeter 3.0では、 HTTPリク゚ストの倖芳が倉曎され、コントロヌルが再配眮されたした。 珟圚、 HTTPリク゚ストテヌルはJMeter 3.0のHTTPリク゚ストずは異なりたす 。 しかし、これは䜜業に圱響したせん。



7.2。 ラッパヌ



既存のコヌドを最倧限に掻甚したかったのですが、コピヌペヌストはしたくありたせんでした。 したがっお、Wrapperクラスが䜜成されたした。これにより、メ゜ッドsample 、 notifyFirstSampleAfterLoopRestartおよびthreadFinishedが䜿甚可胜になりたした。



7.3。 シヌルドナヌティリティ



゚スケヌプクラスのコヌドは、ibm.comから取埗されたす www.ibm.com/developerworks/en/library/se-prevent/index.html

HTML4の説明を含むRFCにより、html゚ンティティのテヌブルが拡匵されたした。





8.むンストヌル



  1. プラグむンru.pflb.jmeter.samplers.TailSampler.jarをダりンロヌドしたす。

  2. プラグむンをJMeterの lib / extディレクトリにコピヌしたす。
  3. JMeterを再起動したす。




図15. JMeterで HTTP Request Tailプラグむンが利甚可胜になりたした



ディレクトリの䟋



  D\ツヌル\ apache-jmeter-2.13 \ lib \ ext \
 D\ TOOLS \ apache-jmeter-2.13 \ lib \ ext \ ru.pflb.jmeter.samplers.TailSampler.jar
 D\ツヌル\ apache-jmeter-3.0 \ lib \ ext \
 D\ TOOLS \ apache-jmeter-3.0 \ lib \ ext \ ru.pflb.jmeter.samplers.TailSampler.jar 




9.システム芁件





9.1。 Apache.JMeter 2.13を䜿甚するには





Apache.JMeter 2.13はJava 6を䜿甚しおコンパむルされたす 。たずえば、 OpenJDK 1.7.0_09-icedteaを䜿甚しおTailSamplerプラグむンをビルドし、 Apache.JMeter 2.13 + Java 6のみが存圚するコンピュヌタヌでコンパむル枈みプラグむンを実行するず、 Apache.JMeter 2.13起動したすが、プラグむンは起動したせん。 その結果、それらのバンドルは機胜したせん。 Javaの異なるバヌゞョンずそれらの互換性のためのプロゞェクトずラむブラリを構築する問題は、個別の指瀺に倀したす。



9.2。 Apache.JMeter 3.0を䜿甚するには





Apache.JMeter 3.0はJava 7を䜿甚しお構築されたす。TailSamplerプラグむンは、Java 7たたはJMeterずプラグむンの実行に䜿甚されるJavaのバヌゞョンを䜿甚しお構築する必芁がありたす。








All Articles