首页 > 解决方案 > JMeter 和 Python 瓶 - 不关闭套接字

问题描述

我们有一个 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 放下它们。我们已经尝试过使用 JMeter 的 KeepAlive 等选项打开和关闭,但没有成功。

我们已经从 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)

这是在 Windows 上运行的 Python 3.6.5、Cherrypy 8.9.1 和 JMeter 3.3。

标签: pythonpython-3.xjmeterbottlecherrypy

解决方案


我在 Windows 机器上运行 JMeter 压力测试时遇到了类似的情况。这应该是由于 Windows 作为标准设置的端口限制。根据他们的文档,有 5000 个默认端口。您可以尝试使用本指南增加此值


推荐阅读