Python接口压测
对Http接口进行压力测试,作为一个码农,我十分喜欢自己写脚本来压测接口,这是我之前写的用来压测http接口的python脚本,用了一个生产者消费者模式,和一个并发队列,用生产者方法来攒接口参数压入并发队列,消费者从队列中取数据执行调用接口,可以准确的记录调取接口的次数,还是比较有用的。
源码下载链接
https://github.com/Dahlin/HTTPInterfaceTest
脚本源代码
脚本里都有注释,挺简单的,我直接上源码了,其实就是对python线程池的一个简单的应用。
from concurrent.futures import ThreadPoolExecutor
import time
from queue import Queue
from HTTPInterfaceTest import HTTPInterfaceTest
import uuid
test_queue = Queue(maxsize=100000)
def create_test(publickey, key, usernames, param, url, timeout=1000):
"""
生产者创建测试对象
:param publickey:
:param key:
:param usernames:
:param param:
:param url:
:param timeout:
:return:
"""
ti = HTTPInterfaceTest(publickey=publickey,
key=key,
usernames=usernames,
param=param,
url=url,
timeout=timeout)
test_queue.put(ti)
def call_test(q):
"""
调取测试接口
:param q:
:return:
"""
while not q.empty():
ti = q.get()
ti.test_http('json')
def exec_pressuretest(index, pcount, ccount):
"""
压力测试 调取总次数 = index*pcount
:param index:
:param pcount:
:return:
"""
for i in range(0, index):
with ThreadPoolExecutor(pcount) as Producer:
for p in range(pcount):
base_url = 'http://192.168.127.131/'
publickey = '123456789'
key = 'A123B456C789D123'
usernames = ['Jike', 'Jone', 'Ada']
param = uuid.uuid1()
Producer.submit(create_test, publickey, key, usernames, param, base_url)
print(str(p)+' -> '+str(param))
Producer.shutdown()
with ThreadPoolExecutor(ccount) as Consumer:
for c in range(ccount):
Consumer.submit(call_test, test_queue)
Consumer.shutdown()
if __name__ == '__main__':
exec_pressuretest(100, 500, 400)