Рефакторинг обработчиков. Финальное тестирование #21
This commit is contained in:
223
test/tsung/eventhub_tsung.xml
Normal file
223
test/tsung/eventhub_tsung.xml
Normal file
@@ -0,0 +1,223 @@
|
||||
<?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>
|
||||
Reference in New Issue
Block a user