场景设计

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

脚本设计

# 导入对应的库

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

多用户实现随机登陆

  • 定义一组登陆账号
  • 导入choice方法,从data中随机选一个登陆
__author__ = 'wangxiao'

# 导入对应的库

from locust import HttpUser, task, between, TaskSet
import os
from random import choice # 任务类 class TestLogin(TaskSet): @task
def to_login(self):
data = [{"account": "wangxiao@qq.com", "password": "123456"},
{"account": "tester06@qq.com", "password": "123456"},
{"account": "admin@admin.com", "password": "123456"}
] res = self.client.post("/v1/token", json=choice(data))
print(res.text) class WebUser(HttpUser):
tasks = [TestLogin]
wait_time = between(2, 5)
host = "http://127.0.0.1:5000" if __name__ == '__main__':
os.system("locust -f testsm_demo.py")
  • 设计场景,总共5个用户,每秒启动5个,图表

添加初始化方法on_start

  • on_start 与on_stop方法对应,每个虚拟用户执行操作时前会运行一次on_start 推迟执行 on_stop
  • 重构方法,把data放到on_start中
__author__ = 'wangxiao'

# 导入对应的库

from locust import HttpUser, task, between, TaskSet
import os
from random import choice # 任务类 class TestLogin(TaskSet):
def on_start(self):
self.data = [{"account": "wangxiao@qq.com", "password": "123456"},
{"account": "tester06@qq.com", "password": "123456"},
{"account": "admin@admin.com", "password": "123456"}
] def on_stop(self):
print("task结束") @task
def to_login(self):
res = self.client.post("/v1/token", json=choice(self.data))
print(res.text) class WebUser(HttpUser):
tasks = [TestLogin]
wait_time = between(2, 5)
host = "http://127.0.0.1:5000" if __name__ == '__main__':
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()

  • 脚本实例
__author__ = 'wangxiao'

# 导入对应的库

from locust import HttpUser, task, between, TaskSet
import os
from random import choice # 任务类 class TestLogin(TaskSet):
def on_start(self):
self.data = [{"account": "wangxiao@qq.com", "password": "123456"},
{"account": "tester06@qq.com", "password": "123456"},
{"account": "admin@admin.com", "password": "123456"},
{"account": "admin@admin.com", "password": "12334456"}
] @task
def to_login(self): with self.client.post("/v1/token", json=choice(self.data), catch_response=True) as response:
res = response.json()
if res['error_code'] == 0:
response.success()
else:
response.failure(res['msg']) def on_stop(self):
print("task结束") class WebUser(HttpUser):
tasks = [TestLogin]
wait_time = between(2, 5)
host = "http://127.0.0.1:5000" if __name__ == '__main__':
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. jsp 记录1 bs/cs

    1.jsp = html + js + css + jsp语法 + Java片段: 2.jsp是基于Java语言的,具有跨平台性: 3.jsp编译后的class文件会常驻内存中,运行速度快,对服务器的 ...

  2. 实现多Realm时,可能会出现的问题

    问题背景 在实现多Realm时,扩展了ModularRealmAuthenticator 和 UsernamePasswordToken,于是在MyAuthenticationToken token ...

  3. Swagger配置与使用

    问题:前后端分离时代的到来 前端需要测试后端数据 后端提供接口,实时更新接口的改动 一.Swagger简介 号称世界上最流行的api框架 Restful api文档在线自动生成工具-->api文 ...

  4. 惊呆了!Spring Boot 还能开启远程调试?

    持续原创输出,点击上方蓝字关注我 目录 前言 什么是远程调试? 为什么要远程调试? 什么是JPDA? 如何开启调试? transport server suspend address onthrow ...

  5. Windows炫酷桌面钢铁侠主题 雨滴 Rainmeter

    首先附上我现在的这个桌面,喜欢的话可以直接使用,我在公众号中设置了回复,[雨滴桌面下载]可以查看下载链接. 介绍一下我们用的工具. Rainmeter 雨滴程序 喜欢的人有研究应该都知道这个程序 这里 ...

  6. 4G DTU比GPRS/3G DTU的优势

    4G DTU一般来说是采用电脑和数据线连接来进行参数设置的,为了适应不同的工作环境,提高工作的效率,成都远向电子4G DTU还支持远程参数配置和远程固件升级,只需一部手机即可轻松完成操作.今天我们就来 ...

  7. [Luogu P3959] 宝藏 (状压DP+枚举子集)

    题面 传送门:https://www.luogu.org/problemnew/show/P3959 Solution 这道题的是一道很巧妙的状压DP题. 首先,看到数据范围,应该状压DP没错了. 根 ...

  8. python-sys模块、导入自定义包

    import问题:https://zhuanlan.zhihu.com/p/69099185 一.sys模块 sys模块是python自带模块,包含了与Python解释器和它的环境有关的函数.利用 i ...

  9. .NetCore中简单使用EasyNetQ

    前言 我们在.Net中使用RabbitMQ,最原始的就是基于RabbitMQ.Client进行编码,在这个过程中我们需要通过代码约定和维护队列,Exchange等.如果是自行编码封装通用型的Rabbi ...

  10. .netcore使用autofac

    .netcore3.1使用autofac (.netcore中本身已经实现了IOC容器,其实没有必要替换成autofac.如果非常习惯autofac,替换也是无可厚非的.) 第一步.在项目中引入Aut ...