در این مطلب به معرفی یک ابزار برای تست کردن APIها میپردازیم. Locust یکی از ابزارهایی است که امکان ارسال ریکوئست های زیاد را برای ما فراهم میکند. برای استفاده از Locust میتوانیم از image آن استفاده کنیم و یک فایل python به نام locustfile.py باید ایجاد کنیم که در آن دستورات لازم برای ارسال ریکوئست به API را انجام دهد.
برای اجرا کردن Locust میتوانید از فایل docker-compose.yml زیر استفاده کنید:
version: '3'
services:
master:
image: locustio/locust
ports:
- "8089:8089"
volumes:
- ./:/mnt/locust
command: -f /mnt/locust/locustfile.py --master -H http://master:8089
worker:
image: locustio/locust
volumes:
- ./:/mnt/locust
command: -f /mnt/locust/locustfile.py --worker --master-host master
در کنار فایل docker-compose.yml باید فایل locustfile.py را نیز ایجاد کنید. فایل locustfile.py:
from locust import task, between
from locust.contrib.fasthttp import FastHttpUser
from random import randint
import xml.etree.ElementTree as ET
class MyUser(FastHttpUser):
wait_time = between(5, 20)
@task
def index(self):
URL="http://yourwebsite.com/api/v1/Users"
with self.client.get(URL, name="DotNetDocs") as response:
pass
در فایل locustfile.py مشخص کردهایم که باید به آدرس http://yourwebsite.com/api/v1/Users ریکوئستها ارسال شوند.
اکنون اگر دستور
docker-compose up
را اجرا نمایید و به آدرس http://127.0.0.1:8089 بروید، داشبورد Locust را مشاهده خواهید کرد و میتوانید عملیات Load Test را اجرا نمایید.
در صورتی که بخواهید هدرهایی به ریکوئستتان اضافه نمایید، میتوانید به صورت زیر عمل نمایید:
from locust import task, between
from locust.contrib.fasthttp import FastHttpUser
from random import randint
import xml.etree.ElementTree as ET
class MyUser(FastHttpUser):
wait_time = between(5, 20)
@task
def index(self):
URL="http://yourwebsite.com/api/v1/Users"
with self.client.get(URL, name="DotNetDocs", headers={"Authorization":"Bearer YourJwtToken"}) as response:
pass
در قسمت بالا هدر مربوط به Authorization به ریکوئست های ارسالی به API مربوط به api/v1/Users اضافه خواهد شد.
در صورتی که فایل docker-compose.yml را بر روی سیستم خود اجرا نمایید، و بخواهید به لوکال هاست خودتان ریکوئست هارا ارسال نمایید باید آدرس هاست را به host.docker.internal (اطلاعات بیشتر) تغییر دهید:
from locust import task, between
from locust.contrib.fasthttp import FastHttpUser
from random import randint
import xml.etree.ElementTree as ET
class MyUser(FastHttpUser):
wait_time = between(5, 20)
@task
def index(self):
URL="http://host.docker.internal/api/v1/Users"
with self.client.get(URL, name="DotNetDocs", headers={"Authorization":"Bearer YourJwtToken"}) as response:
pass
همچنین میتوانید تعداد workerها برای ارسال ریکوئست را در زمان ساخت کانتینر داکر تغییر دهید:
docker-compose up --scale worker=12
;)
Powered by Froala Editor