У нас есть API, написанный на Python и использующий Bottle и Cherrypy, который мы должны подвергнуть стресс-тестированию. Для этого мы создали JMeter-скрипт, но через пару минут выполнения вызовы перестают работать со следующим исключением: -
java.net.BindException: Address already in use: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
Кажется, я не могу понять, как сказать JMeter, чтобы он не висел на гнездах, или как заставить Bottle бросить их. Мы пробовали это с такими опциями, как KeepAlive JMeter, но безуспешно.
Мы вытащили почти все из API, и у этого скрипта все еще есть проблема (без какого-либо нашего функционального багажа).
"""
This script provides a dummy API, which responds to every GET as if it found something.
"""
import bottle
import os
import sys
import datetime
import routes
if __name__ == '__main__':
HOST = 'localhost'
PORT = 5555
@bottle.route('/thing/:id', builtin_function_or_method='GET')
def get_thing(id):
response_json = {
'data': {
'type': 'thing',
'id': id,
'meta': {
'date_retrieved': datetime.datetime.now().isoformat()
}
}
}
bottle.response.headers['Cache-Control'] = 'public,max-age=0'
return response_json
bottle.run(server='cherrypy', host=HOST, port=PORT)
Это Python 3.6.5, Cherrypy 8.9.1 и JMeter 3.3, работающие в Windows.