性能测试工具locust

29 篇文章 0 订阅
11 篇文章 0 订阅

目录

1.背景

2.环境

3.正文

4.“坑”

1)没有了HttpLocust

4)发不出去的请求

5)被pytest绊了一下

6)把header给弄丢了

5.参考资料


1.背景

         没啥背景,就是测着玩儿,嘿嘿~~

2.环境

python3.7.3
locust2.14.2

3.正文

class CasesLogin(TaskSet):
    def on_start(self):
        pass

    @task(1)
    def test_login(self):

        header = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36",
            "Content-Type": "application/json;charset=UTF-8"
        }

        # POST请求
        url = "/api/sys/login"
        data = {
            "password": "123456",   # 密码需要加密,这里省略
            "username": "admin"
        }
        
        with self.client.post(url, json=data, headers=header, verfiy=False, catch_response=True) as resp:    # 这里需要捕获响应,否则locust中无数据显示
            if resp.status_code == 200:
                resp.success()
            else:
                resp.failure(f"failed: {resp.text}")

        # Get请求
        # url = "/api/sys/config"
        # with self.client.get(url, headers=header, verfiy=False, catch_response=True) as resp:
       
    def on_stop(self):
        pass

class WebsiteUser(HttpUser):
    tasks = [CasesLogin]    # 2.X中要这样写用例,否则用例执行不到
    wait_time = between(3, 6)
    host = "http://192.168.0.180:8081"

运行结果示例:

4.“坑”

1)没有了HttpLocust

        以前只是粗略了解了大概,没曾想版本差异还蛮大,原来1.x版本中使用的HttpLocust已经替换成了HttpUser。

2)所谓的host到底是什么

        开始总没懂,后来发现host是指被测环境,而不是locust所在的测试执行机。这个host可以在这里指定,如图所示:

class WebsiteUser(HttpUser):
    tasks = [CasesLogin]
    wait_time = between(3, 6)
    host = "http://192.168.0.180:8081"

        也可以在启动的main()中指定,如下所示:

if __name__ == "__main__":
    os.system("locust -f testLocust.py -P 8300 --host=http://192.168.0.180:8081")

        还可以在页面指定:

 3)“8089”没位置了

        如果启动时,出现了类似这样的报错,就说默认的8089端口被某个程序占用着。

  •  若想继续使用8089端口,可以这样处理,以Windows下举例:
C:\>netstat -ano | findstr 8089
  TCP    [::]:8089              [::]:0                 LISTENING       9072

C:\>tasklist /fi "pid eq 9072"

映像名称                       PID 会话名              会话#       内存使用
========================= ======== ================ =========== ============
python.exe                    9072 Console                    1     51,044 K

C:\>taskkill /pid 9072 /f
成功: 已终止 PID 为 9072 的进程。
  • 若想使用其他端口,可以自行指定:
locust -f testLocust.py -P 8300

4)发不出去的请求

       遇到一个类似这样的报错:“ Tried to set status on a request that has not yet been made”。不知道确切根因,但采用了这样的解法:

        首先,需要使用locust自身的请求。即,self.client.post/get这样的方式。

        其次,将请求放在with...as这样的语句块中。

with self.client.post(url, catch_response=True) as resp:
	if resp.status_code == 200:
		resp.success()
	else:
		resp.failure("failed")

5)被pytest绊了一下

        因为偷懒,在一个pytest工程中随意建了一个测试文件,并且用“test_”命名了文件,于是被自动识别为自动化测试的脚本。运行main方法时,就报如下错误:

if __name__ == "__main__":
    os.system("locust -f testLocust.py -P 8300")

  

 解决方案:

        别偷懒~~另外起一个python工程好好测试吧。

        参考:Empty suite_懒笑翻的博客-CSDN博客_empty suite

6)把header给弄丢了

        因为没有写header导致web页面看到的请求结果全是失败

5.参考资料

接口压测之Locust_locust rps_失眠的书的博客-CSDN博客

性能工具之locust工具get与post请求_7DGroup的博客-CSDN博客_locust post

locust 报错:[WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。: (‘‘, 8089)_locust报错_wuyouywe的博客-CSDN博客

Locust性能测试工具的使用

locust工具使用详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值