python - Locust各种http client 测试
Max.Bai
2019-08
Table of Contents
python - Locust各种http client 测试
0x00 前言
Locust是一个python的分布式性能测试工具,可以通过python编程实现各种协议的压测,详细查看locust官网 https://locust.io/
经过长时间的使用大家肯定会发现,高并发的时候locust还是不错的选择,但是需要高压力的时候,经常觉得locust压力不够(资源有限)
今天测试的目的是测试各种http client的性能在locust中的表现。
涉及的client都有:
python http.client
python geventhttpclient
python urllib3
go net.http
go fasthttp
java Jmeter
测试的服务端是4cpu 的Nginx服务。
客户端是4 cpu centos6.5
下面的测试没有记录服务器的消耗,主要是服务器没有到瓶颈,客户端已经到了瓶颈,网路卡住了。
0x01 locust自带client
locust自带client是requests, 功能强大,但是性能就一般了。
代码:
#!/usr/bin/env python
#coding:utf-8
from locust import HttpLocust, TaskSet, events, task
class WebsiteUser(HttpLocust):
host = "http://200.200.200.230"
min_wait = 0
max_wait = 0
class task_set(TaskSet):
@task
def index(self):
self.client.get('/')
if __name__ == '__main__':
user = WebsiteUser()
user.run()
10 user 1 slave 使用中客户端cpu使用100%
30 user 2 slave 使用中客户端cpu使用100%
0x02 http.client
python3 中的http.client, 使用晦涩,但是性能比requests 确实高了不少。
代码:
#!/usr/bin/env python
#coding:utf-8
import time
# import StringUtils
import random
import json
import requests
from threading import Lock
from requests.exceptions import HTTPError, Timeout, ConnectionError, TooManyRedirects, RequestException
from locust import HttpLocust, TaskSet, events, task
import http.client
class WebsiteUser(HttpLocust):
host = "200.200.200.231"
min_wait &