در این مطلب به معرفی یک ابزار برای تست کردن 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

نظرات