使用Python压测接口

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)

你可能感兴趣的:(Python)