内部AngularJSアプリケーションのテストにはprotractor
を使用しています。
機能テストに加えて、 protractor-perf
これはnodejsに基づいています browser-perf
ライブラリ。なぜなら、 "パフォーマンスは機能です" 。
protractor-perf
ブラウザのアクションを実行しながら、さまざまなパフォーマンス特性を測定してアサートできます。 たとえば :
browser.get('http://www.angularjs.org');
perf.start(); // Start measuring the metrics
element(by.model('todoText')).sendKeys('write a protractor test');
element(by.css('[value="add"]')).click();
perf.stop(); // Stop measuring the metrics
if (perf.isEnabled) { // Is perf measuring enabled ?
// Check for perf regressions, just like you check for functional regressions
expect(perf.getStats('meanFrameTime')).toBeLessThan(60);
};
ここで、別の内部アプリケーション用に、Pythonで記述されたSeleniumベースのテストのセットがあります。
Selenium-pythonでパフォーマンスの低下をチェックすることは可能ですか、それともブラウザのパフォーマンステストを記述できるようにprotractor
を使用してテストを書き直す必要がありますか?
に近づく可能性があります what browser-perf
はchromeパフォーマンスログ を収集して分析します。
パフォーマンスログを取得 にするには、performance
の必要な機能を調整して、loggingPrefs
ログをオンにします。
from Selenium import webdriver
from Selenium.webdriver.common.desired_capabilities import DesiredCapabilities
caps = DesiredCapabilities.CHROME
caps['loggingPrefs'] = {'performance': 'ALL'}
driver = webdriver.Chrome(desired_capabilities=caps)
driver.get('https://stackoverflow.com')
logs = [json.loads(log['message'])['message'] for log in driver.get_log('performance')]
with open('devtools.json', 'wb') as f:
json.dump(logs, f)
driver.close()
この時点で、 devtools.json
ファイルには、一連のトレースレコードが含まれます。
[
{
"params": {
"timestamp": 1419571233.19293,
"frameId": "16639.1",
"requestId": "16639.1",
"loaderId": "16639.2",
"type": "Document",
"response": {
"mimeType": "text/plain",
"status": 200,
"fromServiceWorker": false,
"encodedDataLength": -1,
"headers": {
"Access-Control-Allow-Origin": "*",
"Content-Type": "text/plain;charset=US-ASCII"
},
"url": "data:,",
"statusText": "OK",
"connectionId": 0,
"connectionReused": false,
"fromDiskCache": false
}
},
"method": "Network.responseReceived"
},
{
"params": {
"timestamp": 1419571233.19294,
"encodedDataLength": 0,
"requestId": "16639.1"
},
"method": "Network.loadingFinished"
},
..
]
さて、問題は、それをどうするかということです。
最初に提案されたオプションの1つ Google Test Automation Conference中に は、ログを webpagetest.org に送信することです。例がありますJavaで利用可能 ここ ですが、現時点では、Pythonで実装することができませんでした。
理論的には、webpagetest.orgによって生成されるUIレポートは次のようになります。
また、さらに分析できるJSON/XMLおよびその他の形式のメトリックも提供します。
ポインティングコメントをくれたVivekSinghのおかげで、これは本当に何かです。
browser-perfは、ログ機能を使用してトレースログを取得し、データを分析します。
Seleniumを使用してパフォーマンス回帰テストを実行することができます。ただし、すでにお気づきかもしれませんが。 Seleniumの核となる本質は、ユーザーの行動を模倣することです。これは、ユーザーが同じアクションを実行できる場合にのみ、Seleniumがアクション(ボタンのクリックなど)を実行することを意味します。また、Seleniumスクリプトを実行できるようにするために必要な特定のコード、回避策(つまり、ハードウェイト、さまざまなチェック、カスタムコード)も考慮に入れます。これは、Seleniumを使用したパフォーマンステストの「定義」が、従来のパフォーマンステストとはわずかに異なることを意味します。
あなたがしたいのは、Seleniumが実行している各アクションのタイマー(開始/停止)を用意することです。例:ボタンをクリックして、後で使用できるようにファイルに記録します。
Seleniumを使用すると、パフォーマンスベースラインを作成し、それ以降、連続する各結果をベースラインと比較できます。これにより、統計が得られ、さらに分析するために使用できます。
SeleniumもWebdriver(Selenium 2.0)も、この機能をすぐに使用できます。したがって、これを機能させるには、いくつかのカスタムコーディングを行う必要があります。