一、locust测试脚本
使用的是命令行测试,节省测试机的资源。用locust与jmeter都已300个并发去测试,比较二者的一个测试结果。
import time,os
from locust import HttpUser, task, between
from locust.contrib.fasthttp import FastHttpUser
import pymysql
class QuickstartUser(FastHttpUser):
wait_time = between(1, 2.5)
@task(3)
def on_start(self):
head = {"Content-Type":"application/json"}
data = {"userId":"380670A1D61644C7BDAE774558565263","flag":"2"}
re = self.client.post("/URI", json=data,headers=head)
# print(re.text)
if __name__ == '__main__':
# 连接数据库
db = pymysql.connect(host='',
port=3306,
user='',
password='',
database='',
charset='utf8'
)
db2 = pymysql.connect(host='',
port=3306,
user='',
password='',
database='',
charset='utf8'
)
# 创建游标(操作数据库,必须使用游标,相当于指针)
cursor = db.cursor()
cursor2 = db2.cursor()
sql = r'show global status like "%Com_select%"'
cursor.execute(sql)
cursor2.execute(sql)
results = cursor.fetchone()
results2 = cursor2.fetchone()
# print(results,int(results[1]))
start_count = int(results[1])
start_count2 = int(results2[1])
#当前时间的时间戳,单位为秒
start_time = time.time()
os.system("d:")
os.system(r"cd \test_auto\venu1\myself")
#10.206.112.62 10.206.115.58
#300个并发执行300秒
os.system(r'locust -f locust_test.py -H http://10.206.116.81:9026 --headless -u 300 -r 300 -t 300 --html d:\user\111.html')
cursor.execute(sql)
cursor2.execute(sql)
results_end = cursor.fetchone()
results_end2 = cursor2.fetchone()
# print(results_end,int(results_end[1]))
end_count = int(results_end[1])
end_count2 = int(results_end2[1])
# 当前时间的时间戳,单位为秒
end_time = time.time()
# 关闭游标
cursor.close()
cursor2.close()
# 关闭数据库
db.close()
db2.close()
#计算数据库每秒查询select的次数(TPS)
tps = (end_count-start_count)/(end_time-start_time)
tps2 = (end_count2-start_count2)/(end_time-start_time)
print(end_count-start_count,end_time-start_time,tps)
print(end_count2-start_count2,end_time-start_time,tps2)
二、locust使用HttpUser的测试数据
测试机的资源消耗情况
去服务器上统计接口的调用次数
grep ‘380670A1D61644C7BDAE774558565263’ integral-filter.log |awk -F ‘,’ ‘{print$1}’|sort -n |uniq -c |sort -rn |head -50
locust的测试结果
tps在170左右
Name # reqs # fails | Avg Min Max Median | req/s failures/s
POST /URI 42972 0(0.00%) | 122 11 14145 15 | 169.60 0.00
Aggregated 42972 0(0.00%) | 122 11 14145 15 | 169.60 0.00
三、locust用FastHttpUser
测试机的资源消耗情况
去服务器上统计接口的调用次数
locust的测试结果
TPS也是在170左右
Name # reqs # fails | Avg Min Max Median | req/s failures/s
POST /URI 44675 0(0.00%) | 118 11 14145 15 | 171.40 0.00
Aggregated 44675 0(0.00%) | 118 11 14145 15 | 171.40 0.00
四、jmeter测试
测试机资源消耗
去服务器上统计接口的调用次数
jmeter的测试结果
五、说明的问题
locust同样的设置300个并发,但是每秒向服务器发起的请求数并没有300个,一开始怀疑服务器的处理一秒可能最多只能到120左右,所以locust测试过程中才会一秒调接口120次左右。但是实际情况是用jmeter的300个并发去调用是能达到200以上的,并不是服务器的问题,是locust本身的问题,它产生的并发用户数上不去。然后我把locust的并发数再次调大,还是上不去。locust的并发数上不去是硬伤,实际根本没有产生300个并发。
第二个问题就是locust的测试结果是tps在170左右,而jmeter的测试结果在1300左右,原因是因为jmeter是根据公式计算的。
TPS=并发数/响应时间,jmeter的Throughput = (number of requests) / (total time) ,即
Throughput =(sample样本数)/(最后一个线程启动的时间+最后一个线程持续的时间-第一个线程启动的时间)