locust与jmeter对比

一、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样本数)/(最后一个线程启动的时间+最后一个线程持续的时间-第一个线程启动的时间)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值