Jmeter вызывает исключение потока, когда один пользовательский патч после поста - PullRequest
0 голосов
/ 18 мая 2018

Я настраиваю тест для одного экземпляра EC2.В этом EC2 есть только приложение Django.У него нет S3 / CloundFront или RDS, которые ему помогают.Все чисто на Docker и базовая настройка памяти и процессора.

Моя цель - я хочу увидеть эмпирическую производительность моего единственного EC2.Это поможет мне приблизительно оценить стоимость производства.

Вы можете пропустить это и перейти к моей проблеме:
Вот мои настройки производства
1 баланс нагрузки
2 узла с идентичной настройкой с использованием образа докера
1 корзина / облачный фронт
1 rds

Программное обеспечение:
django == 2.0.5
djangorestframework-jwt == 1.11.0
djangorestframework == 3.8.2

Инструменты:
JMeter 4.0 r1823414
javac 10.0.1
java 10.0.1 2018-04-17
Java (TM) SE Runtime Environment 18.3 (сборка 10.0.1 + 10)
Java HotSpot (TM) 64-битный сервер VM 18.3 (сборка 10.0.1 + 10, смешанный режим)

Java-версия "1.8.0_171" Java (TM) SE Runtime Environment (сборка 1.8.0_171)-b11) Java HotSpot (TM) 64-разрядная серверная виртуальная машина (сборка 25.171-b11, смешанный режим) javac 1.8.0_171

Параметры:

ThreadГруппа
- Количество потоков: 10
- Период обновления: 1
- Количество циклов: 1

Диспетчер заголовков HTTP
- Content-Type, Application/json
- Authorization: jwt ${token}

HTTP-запрос
- http
- localhost
- порт: 8000
- POST
- путь: /api-token-auth/
- данные тела: {"username": "myname", "password": "mysecretpassword"}

На данный момент тест хорош.Все зеленые, я могу иметь token назад от Django.

Проблема:

org.apache.http.NoHttpResponseException: localhost:8000 failed to respond
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:141)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259)
at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)
at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:165)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl$5.doReceiveResponse(HTTPHC4Impl.java:401)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.executeRequest(HTTPHC4Impl.java:842)
at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:581)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:67)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1231)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1220)
at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:622)
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:546)
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253)
at java.lang.Thread.run(Thread.java:748)

Дополнительные параметры
JSON Extractor
- Main sample only
- Имена созданных переменных: token
- Выражения JSON Path: $.token
- Номер совпадения (0 для случайного): 1

HTTP-запрос
- http
- localhost
- port: 8000
- PATCH
- /api/branches/5/
-Данные тела: {"name": "Bangkok"}

Я пытался это Но я не мог заставить его работать.Вот мой навигатор
nav bar jmeter

Отладочный сэмплер:
Jmeter's token пуст

JMeterVariables:
JMeterThread.last_sample_ok=false
JMeterThread.pack=org.apache.jmeter.threads.SamplePackage@79e6c86e
START.HMS=095906
START.MS=1526612346142
START.YMD=20180518
TESTSTART.MS=1526639371341
__jm__Users__idx=0
__jmeter.USER_TOKEN__=Users 1-1
token=
token_matchNr=0

Вопросы:
Как разрешить jmeter захватить jwt токен и стрелять в другие конечные точки?

Обновление 1:
Когда я отключаюPatch Branch.Отладочный сэмплер показывает мне значение token

Update2:
Я ошибочно вызвал переменную.Но проблема PATCH все еще сохраняется.Теперь я могу позвонить token.Вот моя request

PATCH http://localhost:8000/api/branches/5/

PATCH data:
{
    "name": "Bangkok"
}


[no cookies]

Request Headers:
Connection: keep-alive
Autorization: jwt eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxMCwidXNlcm5hbWUiOiJ0b255b2QiLCJleHAiOjE1MjY2NzIzOTMsImVtYWlsIjoidG9ueW9kQG1teC5jb20iLCJvcmlnX2lhdCI6MTUyNjY0MzU5M30.mjKJ2sRFx26pyChET1ORzLmv6umL7B1_Sy8wnNJO-iQ
Content-Type: Application/json
Content-Length: 26
Host: localhost:8000
User-Agent: Apache-HttpClient/4.5.5 (Java/10.0.1)

Обновление 3:
Проблема, кажется, jmeter сторона, потому что.Когда я открываю бэкэнд-лог.PATCH никогда не доходят до бэкэнда

INFO|18/May/2018 11:52:04|"POST /api-token-auth/ HTTP/1.1" 200 224
INFO|18/May/2018 12:01:35|"POST /api-token-auth/ HTTP/1.1" 200 224

Обновление: 4
Найдена подсказка.Это может быть проблема из HTTPClient4

Обновление: 5
Попробуйте имитировать исходную среду java8.Возникает та же проблема https://jmeter.apache.org/download_jmeter.cgi

http://www.jmeter -archive.org / org-apache-http-NoHttpResponseException-td5719349.html

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Поскольку при снятии флажка «Использовать KeepAlive» это работает, это означает, что соединение, скорее всего, устарело, поскольку значения по умолчанию JMeter не работают для вашего варианта использования.

Вам необходимо настроить:

  • httpclient4.idletimeout
  • httpclient4.validate_after_inactivity: уменьшить его
  • httpclient4.time_to_live

См .:

0 голосов
/ 18 мая 2018

олег отвечает на мою проблему.Я должен снять отметку Use KeepAlive

...