Fastapi ストレス テスト
ローカストパイソン
スケーラビリティ テストは、Web サービスの運用準備を整える上で重要な部分です。Gatling、Apache JMeter、The Grinder、Tsung など、負荷テスト用のツールはたくさんあります。また、Python で記述され、Requestsライブラリ上に構築されたもの (および私のお気に入り) もあります: Locustです。
ローカストのウェブサイトで注目されているように:
Locust の基本的な機能は、すべてのテストを Python コードで記述することです。扱いにくい UI や肥大化した XML は必要なく、単純なコードだけで済みます。
バッタのインストール
パフォーマンス テスト Python モジュール Locust は PyPI で利用でき、pip または easy_install を介してインストールできます。
pip install locustio or: easy_install locust
例 locustfile.py
次に、ドキュメントの例に従ってlocustfile.pyを作成します。Django プロジェクトをテストするには、csrftoken サポートと ajax リクエスト用のヘッダーをいくつか追加する必要がありました。最終的なlocustfile.py は次のようになります。
# locustfile.py
from locust import HttpLocust, TaskSet, task
class UserBehavior(TaskSet):
def on_start(self):
self.login()
def login(self):
# GET login page to get csrftoken from it
response = self.client.get('/accounts/login/')
csrftoken = response.cookies['csrftoken']
# POST to login page with csrftoken
self.client.post('/accounts/login/',
{'username': 'username', 'password': 'P455w0rd'},
headers={'X-CSRFToken': csrftoken})
@task(1)
def index(self):
self.client.get('/')
@task(2)
def heavy_url(self):
self.client.get('/heavy_url/')
@task(2)
def another_heavy_ajax_url(self):
# ajax GET
self.client.get('/another_heavy_ajax_url/',
headers={'X-Requested-With': 'XMLHttpRequest'})
class WebsiteUser(HttpLocust):
task_set = UserBehavior
上記の python locust ファイルを使用して Locust を実行するには、そのファイルの名前がlocustfile.pyであれば、次のコマンドを実行できます ( locustfile.pyと同じディレクトリ内)。
locust --host=http://example.com
Python 負荷テスト アプリ Locust が開始されたら、アクセスする必要があります。http://127.0.0.1:8089/すると、Locust インスタンスの Web インターフェースが表示されます。次に、シミュレートするユーザー数(例: 300) とHatch rate (users spawned/second) (例: 10) を入力し、Start swarmingを押します。その後、Locust はユーザーの「ハッチング」を開始し、テーブルで結果を確認できるようになります。
Python データの視覚化
表はいいのですが、グラフで結果を確認したいと思います。人々が Locust にグラフィカル インターフェイスを追加するよう求める問題があり、Locust データのグラフを表示する方法がいくつか提案されています。Python インタラクティブ視覚化ライブラリBokehを使用することにしました。
pip を使用して PyPI から Python グラフ作成ライブラリ Bokeh をインストールするのは簡単です。
pip install bokeh
Bokeh サーバーを実行する例を次に示します。
JSON 形式で Locust データを取得できます。http://localhost:8089/stats/requests. データは次のようになります。
{
"errors": [],
"stats": [
{
"median_response_time": 350,
"min_response_time": 311,
"current_rps": 0.0,
"name": "/",
"num_failures": 0,
"max_response_time": 806,
"avg_content_length": 17611,
"avg_response_time": 488.3333333333333,
"method": "GET",
"num_requests": 9
},
{
"median_response_time": 350,
"min_response_time": 311,
"current_rps": 0.0,
"name": "Total",
"num_failures": 0,
"max_response_time": 806,
"avg_content_length": 17611,
"avg_response_time": 488.3333333333333,
"method": null,
"num_requests": 9
}
],
"fail_ratio": 0.0,
"slave_count": 2,
"state": "stopped",
"user_count": 0,
"total_rps": 0.0
}
みんなで走る
これで Locust が実行されます (実行されていない場合はで開始しますlocust --host=http://example.com) 。スクリプト呼び出しが示すように、ドキュメントを表示するための正しい URL に対してブラウザー タブが自動的に開かれます。Bokehserverbokeh servepython plotter.py
Locust が既にテストを実行している場合は、結果がすぐにグラフに表示されます。それ以外の場合は、新しいテストを開始しますhttp://localhost:8089/[Bokeh] タブに戻り、テストの結果をリアルタイムで確認します。
それでおしまい。コード全体はgithubで見つけることができます。自由にクローンを作成して、例を実行してください。
git clone https://github.com/steelkiwi/locust-bokeh-load-test.git
cd locust-bokeh-load-test
pip install -r requirements.txt
locust --host=<place here link to your site>
bokeh serve
python plotter.py

![とにかく、リンクリストとは何ですか?[パート1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































