场景设计

  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. 装java开发环境 报client/jvm.dll找不到

    jdk安装成功,明明有jvm.dll就是找不到,导致eclipse打不开.此时eclipse为64位,jdk为32位:查了好多方法,不起作用.最后将jdk换位64位问题解决. 所以,一般64位的系统建 ...

  2. Zookeeper(2)---节点属性、监听和权限

    之前通过客户端连接之后我们已经知道了zk相关的很多命令(Zookeeper(1)---初识). 节点属性: 现在我们就通过stat指令来看看节点都有哪些属性,或者使用get 指令和-s参数来查看节点数 ...

  3. Boxing

    测试自动装箱和自动拆箱,意思是运行的时候编译器帮我们加了两个代码: public class AutoBoxingandUnBoxing { public static void main(Strin ...

  4. Java学习的第二十二天

    1.异常处理 try...catch...finally... finally带return finally也可省略 try里面可以有try 多个异常用IllegalAgruementExceptio ...

  5. DP百题练索引

    就是一篇还在咕的文章 DP百题练(一) DP百题练(二) DP百题练(三)

  6. Git的介绍及使用

    一.配置用户信息: 配置用户名和邮箱: $ git config --global user.name "chunyu" $ git config --global user.em ...

  7. AtCoder Beginner Contest 181 题解

    总结 第一次 \(AK\ ABC\) 的比赛,发一个截图纪念一下 A - Heavy Rotation 题目大意 一个人一开始穿白衣服,一天后换成黑衣服,再过一天又换成白衣服,问第 \(n(n \le ...

  8. PASS模型-第一周个人报告

    PASS模型-第一周个人报告 博客班级 https://edu.cnblogs.com/campus/zjcsxy/SE2020 作业要求 https://edu.cnblogs.com/campus ...

  9. Tomcat 总结

    JavaWeb简介 JavaWeb,是用Java技术来解决相关web互联网领域的技术总和. Web包括:web服务器和web客户端两个部分,有两种软件架构 ​ C/S:客户端/服务器端 ​ B/S:浏 ...

  10. 怎么解决Git中出现 "LF will be replaced by CRLF" 警告

    Windows中使用CRLF标识一行的结束,而在Linux/UNIX系统中只使用LF标识一行的结束.CRLF即Carriage-Return Line-Feed的缩写.通常情况下,Git库不会自动修改 ...