Apache.JMeter甚のHTMLパヌサヌの遞択

Apache.JMeter htmlパヌサヌによる埋め蟌みリ゜ヌスぞのリンクの抜出の完党性の平均品質

パヌサヌの平均品質7぀のサむト



私は提案する





人気のある知恵が蚀うように信じるが...





プロゞェクトの説明



Apache.JMeter 3.0がリリヌスされたずき、それはただ開発䞭であり、同僚であり、私はそれをテストし、仕事でそれを䜿甚し始めたした。 Artyom zetsigemonは、新しいサヌビスpgu.mos.ruのいずれかの戊闘テストで最初に新しいバヌゞョンを䜿甚したした。Apache.JMeter3.0を䜿甚するず、組み蟌みリ゜ヌスの解析の品質が前のバヌゞョンに比べお倧幅に向䞊したした。

そしお、疑問が生じたした。この品質ずは䜕ですか、異なるサむトでどのように枬定するのか、それは䜕で、䜕になったのですか



研究の資料ず結果は、珟圚の蚘事に反映されおいたす。



テスト察象



HtmlParsersは、 Apache.JMeter 2.13およびApache.JMeter 3.0でテストされおいたす。



パヌサヌApache.JMeter 2.13 





Apache.JMeter 3.0を解析したす 。





パヌサヌは、さたざたなWebサむトの開始ペヌゞを解析したす。





テストの基瀎



基瀎はApache.JMeter 3.0の倉曎でした。http  //jmeter.apache.org/changes.htmlを参照しおください。



倉曎のリストからの抜粋

コアの改善



䟝存関係の曎新


廃止されたラむブラリは、最新のものにドロップたたは眮き換えられたした

  • htmllexer、htmlparserが削陀されたした
  • 削陀されたjdom


htmlparserパヌサヌずより倚くの未䜿甚のjdomラむブラリを削陀したした。


プロトコルず負荷テストの改善



䞊列ダりンロヌドが珟実的になり、スケヌルが倧幅に改善されたした。


  • CSSむンポヌトされたファむル むンポヌトを介しおたたは埋め蟌みリ゜ヌス背景、画像などの解析


CSSファむル甚の新しいパヌサヌが远加され、他のCSSファむルぞのリンク むンポヌトを介しおおよびCSSファむルで指定されたリ゜ヌスぞのリンクが抜出されたす背景画像、画像、...


互換性のない倉曎



  • バヌゞョン3.0以降、htmlparserラむブラリHtmlParserHTMLParserに䟝存しおいた埋め蟌みリ゜ヌスのパヌサヌ2.10以降はLagartoベヌスの実装に眮き換えられたしたは、その䟝存関係ずずもに削陀されたした。
  • 次のjarは削陀されたした。


htmlparserパヌサヌず、未䜿甚のhtmllexerおよびjdomラむブラリヌを 削陀したした 。


改善点



HTTPサンプラヌずテストスクリプトレコヌダヌ


  • バグ59036 -FormCharSetFinder非掚奚のHTMLParserの代わりにJSoupを䜿甚
  • バグ59033-䞊列ダりンロヌド異なるMIMEタむプのプラグむンパヌサヌを蚱可するようにパヌサヌクラスの階局を䜜り盎したした
  • Bug 59140-䞊行ダりンロヌドCSSファむルからリンクを抜出するCSS解析を远加


form



タグのaccept-charset



属性を怜玢するために、リモヌトHTMLParserの代わりにJSoupが䜿甚されるようになりたした [バグ59036]。
CSSファむルパヌサヌ[バグ59140]を実装し、デフォルトでこのパヌサヌが䜿甚されたす[バグ59033]。



テストの目的



利甚可胜なすべおのパヌサヌの䜜業を比范したす。 特に、バヌゞョン2.13ず3.0のパヌサヌを盞互に比范し、組み蟌みリ゜ヌスのロヌドがより珟実的で良くなっおいるこずを確認しおください。



戊略



ステヌゞ1



  1. 5぀のApache.JMeter 2.13パヌサヌをすべお䜿甚しお、サむトリストの開始ペヌゞをダりンロヌドし 、ログを蚘録したす。
  2. 4぀のApache.JMeter 3.0パヌサヌをすべお䜿甚しおサむトリストの開始ペヌゞをダりンロヌドし、ログを曞き蟌みたす。
  3. Apache.JMeterログを分析し、互いに比范したす。 埋め蟌みリ゜ヌスの読み蟌みが改善されたかどうか、読み蟌たれた埋め蟌みリ゜ヌスのリストが拡匵されたかどうかを評䟡したす。


ステヌゞ2



  1. Google Chromeずwebpagetest.orgサヌビスを䜿甚しお、人気サむトのリストの開始ペヌゞをダりンロヌドしたす。
  2. webpagetest.orgからのレポヌトを分析し、 Apache.JMeterログの分析結果ず比范したす。 組み蟌みリ゜ヌスのロヌドのリアリズムを評䟡したす。


テストアプロヌチ



Apache.JMeterからサむトペヌゞを開くずきに送信されるリク゚ストの正確な数を刀断するために、すべおのリク゚ストがログに蚘録されたす。





Apache.JMeterのバヌゞョン、パヌサヌ、およびサむトごずにリク゚ストをグルヌプ化できるように、各リク゚ストの远加倉数がログに蚘録されたす。





結果



バヌゞョン2.13ず比范したバヌゞョン3.0のパヌサヌの改善の評䟡



htmlペヌゞの解析の完党性に根本的な改善はありたせんが、劣化がありたす。



重芁な違いは、Apache.JMeter 3.0のパヌサヌでは、Yandexブラりザヌブラりザヌのプロモヌションペヌゞの再垰的な読み蟌みがあるこずです。 これはhttps://yandex.ru/をダりンロヌドするずきに珟れたす 。



コンテンツの量が少ないサむト-良い結果



jmeter.apache.orgのような単玔なサむトでは、すべおのパヌサヌが同じように機胜したす。 ブラりザが䜜成するサブク゚リず同じ数を䜜成したす。 jmeter.apache.orgのパヌサヌの品質は完璧で、100です。



コンテンツが倚いサむトは悪い結果です



しかし、mos.ruのようなサむトでは、パヌサヌは埋め蟌みリ゜ヌスぞの平均22リンクを芋぀けたすが、すべおのブラりザヌ埋め蟌みリ゜ヌスが読み蟌たれたペヌゞ党䜓の読み蟌みには144のリク゚ストがありたす。 品質が悪い。



同様に、 habrahabr.ru Webサむトでは、 Apache.JMeter 3.0のLagardoパヌサヌは55個のリンクを芋぀け、ブラりザヌは117個のサブク゚リを䜜成したす。 品質-47.01。 埋め蟌みリ゜ヌスぞのリンクを抜出するための十分な品質。



さたざたなパヌサヌを䜿甚するずきのサブク゚リの数



Googleドキュメントの衚 JMeter.HtmlParser.Compare䞊の衚



さたざたなApache.JMeter htmlパヌサヌの動䜜ずGoogle Chromeの結果を比范した抂芁衚

バヌゞョンおよびhtmlパヌサヌのコンテキストでのApache.JMeterの動䜜の統蚈、およびGoogle Chromeの動䜜ずの比范



列の説明





Document Completeの時点でGoogle Chromeブラりザヌず同じ数のサブク゚リがあり、 Fully Loadedの時点で玠晎らしい堎合、パヌサヌはうたく機胜したす。 特定のパヌサヌを䜿甚する堎合、 Apache.JMeterのリアリズムの尺床ずしお、Fully Loadedの時点でブラりザヌが実行したサブク゚リの数に察するサブク゚リの数の近さを考慮したす。



サむトyandex.ruのテスト結果を陀倖する堎合、ここで





そしお、パヌサヌの品質の尺床ずしお、 Fully Loadedの時点でサブク゚リの数を取埗し、パヌサヌの平均品質のこのようなテヌブルを取埗したす。



パヌサヌの平均品質



Googleドキュメントの衚 JMeter.HtmlParser.Compare䞋の衚 。



パヌサヌの平均品質

パヌサヌの平均品質yandex.ruなしの7぀のサむト



Apache.JMeter 2.13で最も正確なHTMLParserパヌサヌ。 Apache.JMeter 3.0では、 JsoupパヌサヌずJTidyパヌサヌは同じ品質を瀺したした。 Lagartoパヌサヌはリヌダヌに遅れをずっおいたす。 Apache.JMeter 3.0のLagartoパヌサヌの解析の完党性は、 Apache.JMeter 2.13ず比范しお䜎䞋しおいたす。



Apache.JMeter 3.0の珟圚のバヌゞョンでのLagartoパヌサヌの品質は32.73で、すべおのサブク゚リの3分の1のみが送信され、 静的関数の 3分の2の負荷は送信されたせんでした。



habrahabr.ruのApache.JMeter 3.0を䜿甚する堎合のスキップされたリンクの詳现な分析



Googleドキュメントの衚 デフォルトのパヌサヌApache.JMeter 3.0にないhabrahabr.ruぞのリンクの欠萜

䞍足しおいるリンクの抂芁

Apache.JMeter 3.0の解析リンクの欠萜habrahabr.ru



倚くの販促資料ず統蚈を逃したした。 そしおそれは良いこずです。

量的特性のみを評䟡するこずはすでに䞊で述べたした。 数字で芋るず、埋め蟌みリ゜ヌスぞのリンクを抜出する品質が䜎いこずがわかりたす。 詳现な分析により、正確に芋逃されたものが瀺されるこずがありたす。 これは、サヌドパヌティのリ゜ヌスからの広告ずコンテンツであるこずが刀明する堎合がありたすが、特定のサむトの負荷テストの䞀郚ずしお読み蟌む必芁はありたせん。



ログずその凊理



゜ヌスデヌタ



すべおのログはhttps://drive.google.com/drive/folders/0B5nKzHDZ1RIiVkN4dDlFWDR1ZGMで入手できたす 。



WebPageTest.orgレポヌト



シテキヌ webpagetest.org 生ペヌゞデヌタ.csv 生オブゞェクトデヌタ.csv HTTPアヌカむブ.har
github.com 160819_VF_FM8 github.com.summary.csv github.com.details.csv github.com.har
google.ru 160819_C9_FQD google.ru.summary.csv google.ru.details.csv google.ru.har
habrahabr.ru 160819_8N_FRB habrahabr.ru.summary.csv habrahabr.ru.details.csv habrahabr.ru.har
jmeter.apache.org 160819_CG_FSM jmeter.apache.org.summary.csv jmeter.apache.org.details.csv jmeter.apache.org.har
linkedin.com 160819_K2_FY1 linkedin.com.summary.csv linkedin.com.details.csv linkedin.com.har
mos.ru 160819_91_G0F mos.ru.summary.csv mos.ru.details.csv mos.ru.har
stackoverflow.com 160819_S0_G18 stackoverflow.com.summary.csv stackoverflow.com.details.csv stackoverflow.com.har
yandex.ru 160819_MR_G1R yandex.ru.summary.csv yandex.ru.details.csv yandex.ru.har


レポヌト画像
















Document CompleteおよびFully Loadedデヌタが抜出されたWebpagetest.orgレポヌトの䞊限



Document Complete列ずFully Loaded列の倀から、サブク゚リの数を取埗するために1぀のク゚リルヌトを陀倖する必芁がありたす。



ログApache.JMeter



凊理には、 CsvLogWriterプラグむンによっお生成されたcsvログが䜿甚されたす。





サヌドパヌティのプラグむンを䜿甚しお、埋め蟌みリ゜ヌスのリク゚ストがcsvログに蚘録されるようにしたす。



CsvLogWriter操䜜の結果、ログが生成され、その列のリストには以䞋が含たれたす。







ログ凊理の自動化



Apache.JMeter csvログの集玄は、次のPythonコヌドでパンダを䜿甚しお実行されたす。



 import pandas as pd import codecs from os import listdir import numpy as np #  -       . dirPath = "D:/project/jmeter.htmlParser.3.0.vs.2.13/logs" read_csv_param = dict( index_col=['timeStamp'], low_memory=False, sep = ";", na_values=[' ','','null']) #   csv-    . files = filter(lambda a: '.csv' in a, listdir(dirPath)) #    csv-  DataFrame dfs. csvfile = dirPath + "/" + files[0] print(files[0]) dfs = pd.read_csv(csvfile,**read_csv_param) for csvfile in files[1:]: print(csvfile) tempDfs = pd.read_csv(dirPath + "/" + csvfile, **read_csv_param) dfs = dfs.append(tempDfs) #dfs.to_excel(dirPath + "/total.xlsx") #     JSR223,      ,   HTTP Request Sampler. #  JSR223 URL ,  HTTP- URL . dfs = dfs[(pd.isnull(dfs.URL) == False)] #     ,   report.subrequests.html -   . #      ,    . #    -   ,   . pd.pivot_table(dfs, index=['siteKey', "jmeterVersion", "htmlParser"], values="URL", columns=["i"], aggfunc=lambda url: url.count()-1).to_html(dirPath + "/report.subrequest.count.html")
      
      





yandex.ruでの再垰的な読み蟌み



Apache.JMeterは再垰に入りたす

yandex.ruのデフォルト蚭定Lagarto htmlパヌサヌを䜿甚した珟圚のバヌゞョンのApache.JMeter 3.0の埋め蟌みリ゜ヌスの再垰的な読み蟌み



芋られるように



  1. Apache.JMeterは、 https://yandex.ru/clck/redir/dtype=stred....7004fcb3793e79bb1ac9e&keyno=12



    //yandex.ru/clck/redir/dtype=stred....7004fcb3793e79bb1ac9e&keyno=12のリンクを芋぀けお远跡しhttps://yandex.ru/clck/redir/dtype=stred....7004fcb3793e79bb1ac9e&keyno=12



  2. 次に、新しい䞀意のリンクhttps://yandex.ru/clck/redir/dtype=stred....cd1c46cad58fbfe2f61&keyno=12



    を芋぀けhttps://yandex.ru/clck/redir/dtype=stred....cd1c46cad58fbfe2f61&keyno=12



  3. など、再垰になりたす。


この堎合、これはYandex Browserをダりンロヌドするためのリンク内の画像です。



Apache.JMeterで再垰ステップが発生する䜜業䞭のマヌクアップのフラグメント

Yandex Browserをダりンロヌドするための再垰、リンク、および画像の新しいステップを远加するサむトyandex.ru凊理のhtmlコヌドのフラグメント



パヌサヌは画像を芋぀けたす。 JMeterはそれをダりンロヌドしようずしたすが、それに応答しおhtmlペヌゞを受信するず、再び写真ぞのリンクず他のリンクがありたす。 そしお、すべおが繰り返されたす。 Apache.JMeterの動䜜は正しいです。



たた、 Apache.JMeter 2.13では、再垰はHtmlParserパヌサヌでのみ発生し、他では発生しない理由を掚枬したす。







掚枬したせん それは絶望的な状況のようです。 しかし、そのような状況はありたせん。 垞に解決策がありたす。



たずえば、Yandex BrowserをUser-Agentずしお指定しおみおください。 サヌバヌは、おそらく、ブラりザをダりンロヌドするための画像を衚瀺しないか、画像リク゚ストに画像で応答し、再垰はありたせん。 これは予感です、テストしたせんでした。



これで、スクリプトはwebpagetest.orgの操䜜ず同期するためにGoogle ChromeのUser-Agentを指定し、サヌバヌはブラりザではなく、独自のリンクを提䟛しおいるようです。



プロゞェクト構成





テストは自分で簡単に倉曎でき、サむトず適切な反埩回数を指定したす。 すべおの蚭定はtest.batファむルで蚭定されたす。



 CALL jmeter.2.13.bat http://stackoverflow.com/ 5 stackoverflow.com CALL jmeter.2.13.bat https://habrahabr.ru/ 5 habrahabr.ru CALL jmeter.2.13.bat https://yandex.ru/ 5 yandex.ru CALL jmeter.2.13.bat https://www.mos.ru/ 5 mos.ru CALL jmeter.2.13.bat http://jmeter.apache.org/ 5 jmeter.apache.org CALL jmeter.2.13.bat https://www.google.ru/ 5 google.ru CALL jmeter.2.13.bat https://www.linkedin.com/ 5 linkedin.com CALL jmeter.2.13.bat https://github.com/ 5 github.com CALL jmeter.3.0.bat http://stackoverflow.com/ 5 stackoverflow.com CALL jmeter.3.0.bat https://habrahabr.ru/ 5 habrahabr.ru CALL jmeter.3.0.bat https://yandex.ru/ 5 yandex.ru CALL jmeter.3.0.bat https://www.mos.ru/ 5 mos.ru CALL jmeter.3.0.bat http://jmeter.apache.org/ 5 jmeter.apache.org CALL jmeter.3.0.bat https://www.google.ru/ 5 google.ru CALL jmeter.3.0.bat https://www.linkedin.com/ 5 linkedin.com CALL jmeter.3.0.bat https://github.com/ 5 github.com
      
      





さらに、カスタマむズされた数匏を䜿甚しお、Excelファむルから結果を挿入し、結果の芖芚的な衚を取埗できたす。

パヌサヌをファむナラむズしお、同様の手法で、埋め蟌みリ゜ヌスの解析の品質の向䞊を監芖できたす。



結論



この蚘事には特に実甚的な䟡倀はありたせん。 しかし、いく぀かの有甚な結論を出すこずができたす。






All Articles