场景设计

  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. c#用于时间日期的类型:DateTime

    https://blog.csdn.net/qq_42675313/article/details/82155446 写的简洁易懂了

  2. 全球最火的程序员学习路线!没有之一!3天就在Github收获了接近1w点赞

    大家好,我是G哥,目前人在荆州办事,但是干货还是要安排上! 国外有一个爆火的开发人员学习路线,目前已经在 Github收获了 131 k+ star,Star 数量在 Github 所有仓库中排名第 ...

  3. Java学习的第五十四天

    1.例13.1二次函数的解 import java.util.Scanner; public class Cjava { public static void main(String[]args) { ...

  4. Java学习的第五天

    1.值域转化的规则:值域小的类型可以自动转化成值域大的类型,值域大的类型可以强行转化成值域小的类型,但要注意精度,除了基本类型可以转换,引用类型之间也可以转换. 引用类型可以是类,借口,数组. 常见的 ...

  5. 热部署只知道devtools吗?JRebel不香吗?

    持续原创输出,点击上方蓝字关注我 目录 前言 JRebel收费怎么破? 什么是本地热部署? 什么是远程热部署? JRebel和devtools的区别 如何安装JRebel? 如何本地热部署? 如何远程 ...

  6. JavaWeb项目问题记录

    模板 [遇到的问题] [时间] [原因] [解决方案] [排查思路及方式] 思路: 1) 2) [遇到的问题] 品优购项目中运营商页面查询广告信息是,无法正常查询,错误如下: Failed to lo ...

  7. CH2101可达性问题

    CH2101可达性问题 拓扑排序应用基础 题意描述 具体见书P95. 给定一个N个点,M条边的有向无环图,问每个点直接或间接可到达的点的数量. 算法分析 书中有详细介绍,这里就不再赘述了. 简而言之就 ...

  8. 手写Koa.js源码

    用Node.js写一个web服务器,我前面已经写过两篇文章了: 第一篇是不使用任何框架也能搭建一个web服务器,主要是熟悉Node.js原生API的使用:使用Node.js原生API写一个web服务器 ...

  9. leetcode95:jump game

    题目描述 给出一个非负整数数组,你最初在数组第一个元素的位置 数组中的元素代表你在这个位置可以跳跃的最大长度 判断你是否能到达数组最后一个元素的位置 例如 A =[2,3,1,1,4], 返回 tru ...

  10. 剑指Offer-Python(1-5)

    1.二维数组的查找 查找,其实就可以挨个进行比较就可以.又由于题目说明(每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序),因此如果利用类似于二分查找的方法,那么比较次数则会更少 ...