223 lines
11 KiB
XML
223 lines
11 KiB
XML
<?xml version="1.0"?>
|
||
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
|
||
<tsung loglevel="notice" version="1.0">
|
||
<clients>
|
||
<client host="localhost" use_controller_vm="true" maxusers="5000"/>
|
||
</clients>
|
||
|
||
<servers>
|
||
<server host="localhost" port="8080" type="tcp"/>
|
||
</servers>
|
||
|
||
<load>
|
||
<arrivalphase phase="1" duration="3" unit="minute">
|
||
<users interarrival="0.1" unit="second"/>
|
||
</arrivalphase>
|
||
</load>
|
||
|
||
<sessions>
|
||
<session name="eventhub_user" probability="100" type="ts_http">
|
||
|
||
<setdynvars sourcetype="random_number" start="1" end="9999999">
|
||
<var name="rand_id" />
|
||
</setdynvars>
|
||
|
||
<!-- 1. Регистрация -->
|
||
<request subst="true">
|
||
<http url="/v1/register" method="POST" content_type="application/json"
|
||
contents='{"email": "loadtest_%%_rand_id%%@example.com", "password": "testpassword123"}'/>
|
||
</request>
|
||
<thinktime min="1000" max="3000" random="true"/>
|
||
|
||
<!-- 2. Логин (извлекаем токен) -->
|
||
<request subst="true">
|
||
<dyn_variable name="token" re="(?:\{|,\s*)"token"\s*:\s*"([^"]+)"/>
|
||
<http url="/v1/login" method="POST" content_type="application/json"
|
||
contents='{"email": "loadtest_%%_rand_id%%@example.com", "password": "testpassword123"}'/>
|
||
</request>
|
||
<thinktime min="2000" max="5000" random="true"/>
|
||
|
||
<!-- 3. Создание календаря (с авто‑подтверждением бронирований) -->
|
||
<request subst="true">
|
||
<dyn_variable name="calendar_id" re="(?:\{|,\s*)"id"\s*:\s*"([^"]+)"/>
|
||
<http url="/v1/calendars" method="POST" content_type="application/json"
|
||
contents='{"title": "Tsung Calendar", "confirmation": "auto"}'>
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="1000" max="3000" random="true"/>
|
||
|
||
<!-- 4. GET /v1/calendars/:id – конкретный календарь -->
|
||
<request subst="true">
|
||
<http url="/v1/calendars/%%_calendar_id%%" method="GET">
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="500" max="2000" random="true"/>
|
||
|
||
<!-- 5. GET /v1/calendars/:id/view?month=2026-06 – HTML-представление -->
|
||
<request subst="true">
|
||
<http url="/v1/calendars/%%_calendar_id%%/view?month=2026-06" method="GET">
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="1000" max="2000" random="true"/>
|
||
|
||
<!-- 6. Создание события -->
|
||
<request subst="true">
|
||
<dyn_variable name="event_id" re="(?:\{|,\s*)"id"\s*:\s*"([^"]+)"/>
|
||
<http url="/v1/calendars/%%_calendar_id%%/events" method="POST" content_type="application/json"
|
||
contents='{"title":"Tsung Event","start_time":"2027-01-01T10:00:00Z","duration":60}'>
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="2000" max="4000" random="true"/>
|
||
|
||
<!-- 7. GET /v1/events/:id – конкретное событие -->
|
||
<request subst="true">
|
||
<http url="/v1/events/%%_event_id%%" method="GET">
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="500" max="2000" random="true"/>
|
||
|
||
<!-- 8. Запись на событие -->
|
||
<request subst="true">
|
||
<dyn_variable name="booking_id" re="(?:\{|,\s*)"id"\s*:\s*"([^"]+)"/>
|
||
<http url="/v1/events/%%_event_id%%/bookings" method="POST" content_type="application/json"
|
||
contents='{}'>
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="1000" max="2000" random="true"/>
|
||
|
||
<!-- 9. Подтверждение бронирования -->
|
||
<request subst="true">
|
||
<http url="/v1/bookings/%%_booking_id%%" method="PUT" content_type="application/json"
|
||
contents='{"action":"confirm"}'>
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="1000" max="3000" random="true"/>
|
||
|
||
<!-- 10. GET /v1/bookings/:id – конкретное бронирование -->
|
||
<request subst="true">
|
||
<http url="/v1/bookings/%%_booking_id%%" method="GET">
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="500" max="2000" random="true"/>
|
||
|
||
<!-- 11. Поиск -->
|
||
<request subst="true">
|
||
<http url="/v1/search?q=Tsung" method="GET">
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="1000" max="2000" random="true"/>
|
||
|
||
<!-- 12. Оставить отзыв (захватываем review_id) -->
|
||
<request subst="true">
|
||
<dyn_variable name="review_id" re="(?:\{|,\s*)"id"\s*:\s*"([^"]+)"/>
|
||
<http url="/v1/reviews" method="POST" content_type="application/json"
|
||
contents='{"target_type":"event","target_id":"%%_event_id%%","rating":5,"comment":"Excellent!"}'>
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="1000" max="2000" random="true"/>
|
||
|
||
<!-- 13. GET /v1/reviews/:id – конкретный отзыв -->
|
||
<request subst="true">
|
||
<http url="/v1/reviews/%%_review_id%%" method="GET">
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="500" max="2000" random="true"/>
|
||
|
||
<!-- 14. Пожаловаться -->
|
||
<request subst="true">
|
||
<http url="/v1/reports" method="POST" content_type="application/json"
|
||
contents='{"target_type":"event","target_id":"%%_event_id%%","reason":"Spam"}'>
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="1000" max="2000" random="true"/>
|
||
|
||
<!-- 15. Создать тикет (захватываем ticket_id) -->
|
||
<request subst="true">
|
||
<dyn_variable name="ticket_id" re="(?:\{|,\s*)"id"\s*:\s*"([^"]+)"/>
|
||
<http url="/v1/tickets" method="POST" content_type="application/json"
|
||
contents='{"error_message":"Error during load test","stacktrace":"line 42"}'>
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="1000" max="2000" random="true"/>
|
||
|
||
<!-- 16. GET /v1/tickets/:id – конкретный тикет -->
|
||
<request subst="true">
|
||
<http url="/v1/tickets/%%_ticket_id%%" method="GET">
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="500" max="2000" random="true"/>
|
||
|
||
<!-- 17. Активировать подписку -->
|
||
<request subst="true">
|
||
<http url="/v1/subscription" method="POST" content_type="application/json"
|
||
contents='{"action":"start_trial"}'>
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="2000" max="5000" random="true"/>
|
||
|
||
<!-- 18. GET /v1/subscription – получить подписку -->
|
||
<request subst="true">
|
||
<http url="/v1/subscription" method="GET">
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="1000" max="3000" random="true"/>
|
||
|
||
<!-- 19. GET /v1/user/me – профиль -->
|
||
<request subst="true">
|
||
<http url="/v1/user/me" method="GET">
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="1000" max="2000" random="true"/>
|
||
|
||
<!-- 20. GET /v1/user/bookings – свои бронирования -->
|
||
<request subst="true">
|
||
<http url="/v1/user/bookings" method="GET">
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="1000" max="2000" random="true"/>
|
||
|
||
<!-- 21. GET /v1/user/reviews – свои отзывы -->
|
||
<request subst="true">
|
||
<http url="/v1/user/reviews" method="GET">
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="1000" max="2000" random="true"/>
|
||
|
||
<!-- 22. GET /v1/calendars – список календарей -->
|
||
<request subst="true">
|
||
<http url="/v1/calendars" method="GET">
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="2000" max="5000" random="true"/>
|
||
|
||
<!-- 23. Обновление токена -->
|
||
<request subst="true">
|
||
<http url="/v1/refresh" method="POST" content_type="application/json"
|
||
contents='{"refresh_token":"dummy"}'>
|
||
<http_header name="Authorization" value="Bearer %%_token%%"/>
|
||
</http>
|
||
</request>
|
||
<thinktime min="1000" max="3000" random="true"/>
|
||
</session>
|
||
</sessions>
|
||
</tsung> |