场景设计

  1. 实现登陆基本功能,输出相应结果,脚本通
  2. 多用户实现随机登陆
  3. 添加初始化方法on_start: 每个用户只运行一次
  4. 添加检查点: catch_responses = True

脚本设计

  1. # 导入对应的库
  2. from locust import HttpUser, task, between
  3. import os
  4. # 任务类
  5. class TestLogin(TaskSet):
  6. # 定义一个登陆任务
  7. @task
  8. def to_login(self):
  9. """
  10. 1. 登陆需要账号密码,body以json格式
  11. 2. 登陆是post请求 '/v1/token'
  12. 3. 打印res值
  13. """
  14. data = {"account": "wangxiao@qq.com", "password": "123456"}
  15. res = self.client.post("/v1/token", json=data)
  16. print(res.text)
  17. class WebUser(HttpUser):
  18. tasks = [TestLogin]
  19. # 任务执行之间等待的时间,最小2秒,最大5秒
  20. wait_time = between(2, 5)
  21. # 被测地址:这个接口是自己写的一个登陆接口,实际可以需要自己抓包,更换真实环境中的地址
  22. host = "http://127.0.0.1:5000"
  23. if __name__ == '__main__':
  24. os.system("locust -f testsm_demo.py")
  25. # 设置用户1,每秒启动用户1,确定脚本是通,从打印出来的内容我们可以看出,脚本是通过的(这里你也可以打开locust webUI界面)
  26. [2020-08-19 10:53:19,249] md2bkpyc/INFO/locust.runners: All users hatched: WebUser: 1 (0 already running)
  27. {
  28. "error_code": 0,
  29. "token": "eyJhbGciOiJIUzUxMiIsImlhdCI6MTU5NzgwNTYwNCwiZXhwIjoxNTk3ODEyODA0fQ.eyJ1aWQiOjEsInNjb3BlIjpudWxsfQ.GS-lHngBcboPvnipWOl1ad5bkSEYweLwzSMa8fZpYVoz5ZDndV0gJOPvUiu8oiXIZi6AR7amLUcG7KKcBsf0Cg"
  30. }

多用户实现随机登陆

  • 定义一组登陆账号
  • 导入choice方法,从data中随机选一个登陆
  1. __author__ = 'wangxiao'
  2. # 导入对应的库
  3. from locust import HttpUser, task, between, TaskSet
  4. import os
  5. from random import choice
  6. # 任务类
  7. class TestLogin(TaskSet):
  8. @task
  9. def to_login(self):
  10. data = [{"account": "wangxiao@qq.com", "password": "123456"},
  11. {"account": "tester06@qq.com", "password": "123456"},
  12. {"account": "admin@admin.com", "password": "123456"}
  13. ]
  14. res = self.client.post("/v1/token", json=choice(data))
  15. print(res.text)
  16. class WebUser(HttpUser):
  17. tasks = [TestLogin]
  18. wait_time = between(2, 5)
  19. host = "http://127.0.0.1:5000"
  20. if __name__ == '__main__':
  21. os.system("locust -f testsm_demo.py")
  • 设计场景,总共5个用户,每秒启动5个,图表

添加初始化方法on_start

  • on_start 与on_stop方法对应,每个虚拟用户执行操作时前会运行一次on_start 推迟执行 on_stop
  • 重构方法,把data放到on_start中
  1. __author__ = 'wangxiao'
  2. # 导入对应的库
  3. from locust import HttpUser, task, between, TaskSet
  4. import os
  5. from random import choice
  6. # 任务类
  7. class TestLogin(TaskSet):
  8. def on_start(self):
  9. self.data = [{"account": "wangxiao@qq.com", "password": "123456"},
  10. {"account": "tester06@qq.com", "password": "123456"},
  11. {"account": "admin@admin.com", "password": "123456"}
  12. ]
  13. def on_stop(self):
  14. print("task结束")
  15. @task
  16. def to_login(self):
  17. res = self.client.post("/v1/token", json=choice(self.data))
  18. print(res.text)
  19. class WebUser(HttpUser):
  20. tasks = [TestLogin]
  21. wait_time = between(2, 5)
  22. host = "http://127.0.0.1:5000"
  23. if __name__ == '__main__':
  24. os.system("locust -f testsm_demo.py")

设置检查点: catch_responses = True

  • catch_response: 布尔值,True or False, 用于发送请求,作为with语句返回上下文管理器的参数,将根据不同的响应将请求内容标记成功or失败,所以这边用 catch_response来捕捉,注意要用with语句来返回上下文
  • success() failure(): 响应类中充当了上下文管理器,他提供了两个方法success() or failure()

  • 脚本实例
  1. __author__ = 'wangxiao'
  2. # 导入对应的库
  3. from locust import HttpUser, task, between, TaskSet
  4. import os
  5. from random import choice
  6. # 任务类
  7. class TestLogin(TaskSet):
  8. def on_start(self):
  9. self.data = [{"account": "wangxiao@qq.com", "password": "123456"},
  10. {"account": "tester06@qq.com", "password": "123456"},
  11. {"account": "admin@admin.com", "password": "123456"},
  12. {"account": "admin@admin.com", "password": "12334456"}
  13. ]
  14. @task
  15. def to_login(self):
  16. with self.client.post("/v1/token", json=choice(self.data), catch_response=True) as response:
  17. res = response.json()
  18. if res['error_code'] == 0:
  19. response.success()
  20. else:
  21. response.failure(res['msg'])
  22. def on_stop(self):
  23. print("task结束")
  24. class WebUser(HttpUser):
  25. tasks = [TestLogin]
  26. wait_time = between(2, 5)
  27. host = "http://127.0.0.1:5000"
  28. if __name__ == '__main__':
  29. os.system("locust -f testsm_demo.py")
  • 图表分析

  • 错误信息提示

【性能测试】【locust】场景性能测试步骤的更多相关文章

  1. [性能测试] locust学习-基础篇

    在本文中,我将介绍一个名为Locust的性能测试工具.我将从Locust的功能特性出发,结合实例对Locust的使用方法进行介绍. 概述 Locust主要有以下的功能特性: 在Locust测试框架中, ...

  2. 基于locust的性能测试平台搭建

    前段时间加入性能测试组,并参与搭建基于locust的性能测试平台,我分到的任务相对独立,开发locust的启动接口和停止运行接口,现开发的差不多了,做一个总结 一.locust运行的相关内容 二.lo ...

  3. 【原创】相对完整的一套以Jmeter作为工具的性能测试教程(接口性能测试,数据库性能测试以及服务器端性能监测)

    准备工作 jmeter3.1,为什么是3.1,因为它是要配合使用的serveragent所支持的最高版本,下载链接 https://pan.baidu.com/s/1dWu5Ym JMeterPlug ...

  4. 性能测试===Locust介绍

    简述性能测试 提起性能测试,可能移动APP的从业人员会感觉比较混淆,因为在客户端(Android.iOS)中也有性能测试专项,主要涉及的是APP的启动时间.内存.包大小.帧率,流量等客户端相关的指标. ...

  5. Locust 接口性能测试 - 转载一 (后期熟悉实践自己出一套完整的)

    转载大佬   ,.. 另外一篇:https://www.cnblogs.com/imyalost/p/9758189.html记录一下接口性能测试的学习 先熟悉一下概念: Locust是使用Pytho ...

  6. Jmeter性能测试之一 性能测试的流程和步骤介绍

    Step1: 知道在架构上,你要做的性能测试要cover几个部分,如下图,性能测试从用户角度,PC端之后都要要考虑进行的,例如网络,app server,Database等等 N1+N2+N3+N4 ...

  7. 通过locust进行性能测试

    首先我们需要准备好python环境 接口 安装python 插件 locust,网上有很多文章而且都很错,这里不再赘述 我是通过pycharm 编写的代码  导入 HttpLocust,TaskSet ...

  8. c# sqlsugar,hisql,freesql orm框架全方位性能测试对比 sqlserver 性能测试

    在2022年1月份本人做过一次sqlsugar,hisql,freesql三个框架的性能测试,上次主要是测的sqlserver下的常规插入(非bulkcopy的方式数据插入),hisql与目前比较流行 ...

  9. 关于Cocos2d-x项目运行的过程和场景切换步骤

    1.AppDelegate.cpp文件里面的applicationDidFinishLaunching函数其实可以看做C语言里面的main函数,是整个游戏运行的入口 这个函数里面的语句 auto sc ...

随机推荐

  1. 如何解决 Nginx 端口映射到外网后访问地址端口丢失的问题

    1. 问题说明 一个手机h5页面的项目,使用nginx(监听80端口)进行访问,内网访问的地址是192.168.12.125/h5,访问正常,nginx中的配置如下: #微信H5页面访问 locati ...

  2. ceph踩坑日记之rgw_dynamic_resharding

    1.背景说明 参考说明: https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/2/html/object_gatewa ...

  3. 4G工业路由器的信号强度应该怎么保证呢?

    在M2M无线方面,最薄弱的环节是差的间歇性的信号强度.低信号电平导致系统性能差,响应时间慢和可靠性问题.对于系统安装人员和其他4G工业路由器供应商,如何确保最佳的蜂窝信号强度? 检查2G/3G/4G信 ...

  4. 时间UTC格式装换php时间格式

    date_default_timezone_get("UTC");date("Y-m-d", strtotime("2017-11-13T18:04: ...

  5. 不停机不更新代码线上调试BUG的工具

    如果你有以下痛点,请你查看本文章: 1.我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 2.遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 3.线上遇到某个用户的 ...

  6. 【Kata Daily 190917】Numericals of a String(字符出现的次数)

    题目: You are given an input string. For each symbol in the string if it's the first character occuren ...

  7. 为什么要谨慎使用Arrays.asList、ArrayList的subList?

    1. 使用Arrays.asList的注意事项 1.1 可能会踩的坑 先来看下Arrays.asList的使用: List<Integer> statusList = Arrays.asL ...

  8. 最全总结 | 聊聊 Python 办公自动化之 Word(上)

    1. 前言 日常自动化办公中,使用 Python 真的能做到事半功倍! 在上一个系列中,我们对 Python 操作 Excel 进行了一次全面总结 最全总结 | 聊聊 Python 办公自动化之 Ex ...

  9. 5. Spark调优

    *以下内容由<Spark快速大数据分析>整理所得. 读书笔记的第五部分是讲的是Spark调优相关的知识点. 一.并行度调优 二.序列化格式优化 三.内存管理优化 四.Spark SQL性能 ...

  10. [MIT6.006] 4. Heaps and Heap Sort 堆,堆排序

    第4节课仍然是讲排序,但介绍的是一种很高效的堆排序. 在编程过程中,有时候会需要进行extrat_max的操作,即从一个数列里挨个抽取最大值并将其它从原数列中移除.而排序问题也可以看作是一个extra ...