性能测试工具-locust

news2024/9/20 19:39:01

简介

Locust是基于python语言的性能测试框架。

Locust支持分布式部署,单实例并发线程数可达1000,界面简约。

locust基于事件。

Locust的缺点

1、无可视化脚本编写功能,需要基于Python语言和locust框架进行脚本编写,纯代码编写。

2、需要安装Python环境。

环境搭建

Python安装和pip安装

Locust安装

数码内网安装:pip install locust。可以使用国内源安装

Locust使用

脚本编写

示例1

代码
from locust import HttpUser, task, between
from common.common import logger_print
import yaml
import time


class MyTest(HttpUser):
    wait_time = between(1, 1)
    with open('../config/config.yaml', 'r', encoding='utf-8') as f:
        config = yaml.safe_load(f)
        f.close()
    logger_file = config["logger"]["logger_file"]
    logger_level = config["logger"]["logger_level"]
    logger = logger_print(logger_file, logger_level)
    @task
    def test_demo(self):
        url = "***"
        headers = {'Content-Type': 'application/json;charset-utf-8'}
        json_data = {"facility": "qqg***"}
        start_time = time.time()
        with self.client.post(url=url, headers=headers, json=json_data, catch_response=True) as response:
            run_time = time.time() - start_time
            self.logger.info(response.text)
            self.logger.info("本次请求耗时: %.2f ms" % (run_time * 1000))
            try:
                if response.json()["status"] == 1 and response.json()["message"] == "查询**统计成功!":
                    response.success()
                    self.logger.info("请求消息体返回正确")
                else:
                    response.failure("返回消息不正确, %s" % response.text)
                    self.logger.error("返回消息不正确, %s" % response.text)
            except Exception as e:
                response.failure("返回消息不正确, %s, 报错: %s" % (response.text, e))
                self.logger.error("返回消息不正确, %s, 报错: %s" % (response.text, e))
说明

1、locust脚本需要编写测试类并继承HttpUser;

2、测试用例需要使用task进行标注;

3、需要设置单个请求发起的间隔时间,wait_time = between(1, 1),between()方法入参最小等待时长和最大等待时长;

4、断言添加需要使用with self.client.post(url=url, headers=headers, json=json_data, catch_response=True) as response: ;

5、断言支持自定义,并使用response.success()和response.failure()进行标注成功或失败。

示例2

代码
from locust import HttpUser, TaskSet, task
from common.common import logger_print
import yaml
import time


class MyTestCases(TaskSet):
    with open('config/config.yaml', 'r', encoding='utf-8') as f:
        config = yaml.safe_load(f)
        f.close()
    logger_file = config["logger"]["logger_file"]
    logger_level = config["logger"]["logger_level"]
    logger = logger_print(logger_file, logger_level)
    @task
    def test_demo(self):
        url = "***"
        headers = {'Content-Type': 'application/json;charset-utf-8'}
        json_data = {"facility": "***"}
        start_time = time.time()
        with self.client.post(url=url, headers=headers, json=json_data, catch_response=True) as response:
            run_time = time.time() - start_time
            self.logger.info(response.text)
            self.logger.info("本次请求耗时: %.2f ms" % (run_time * 1000))
            try:
                if response.json()["status"] == 1 and response.json()["message"] == "查询**统计成功!":
                    response.success()
                    self.logger.info("请求消息体返回正确")
                else:
                    response.failure("返回消息不正确, %s" % response.text)
                    self.logger.error("返回消息不正确, %s" % response.text)
            except Exception as e:
                response.failure("返回消息不正确, %s, 报错: %s" % (response.text, e))
                self.logger.error("返回消息不正确, %s, 报错: %s" % (response.text, e))

class WebSitUser(HttpUser):
    tasks = [MyTestCases]
    min_wait = 1000
    max_wait = 1000
说明

1、测试用例类继承TaskSet,执行类继承HttpUser,在执行类中初始化tasks, min_wait,max_wait参数,tasks需要为list,存放用例类,min_wait,max_wait单位为ms。

2、通过name定义用例或接口名称,如:with self.client.post(url=url, headers=headers, json=json_data, catch_response=True, name="目标查询") as response: 

 3、可通过@task(1)、@task(5)定义测试类每轮执行过程中执行次数

Locust启动

单机启动

locust -f locust_test_demo.py

分布式启动:

1、master节点启动:locust -f locust_test_demo.py --master

2、worker节点启动:locust -f locust_test_demo.py --worker --master-host=10.3.171.23(10.3.171.23为Master节点IP)

Locust使用

1、打开浏览器,输入地址:节点ip:8089

2、输入参数: Number of users表示用户总数,即并发数

Spawn rate 每秒增加用户数

Host 被测试接口集host,可被用于接口地址参数化,如:

Host也可随意填写,但请求url需要在脚本中写全,可用户不固定ip和端口的测试,配置到配置文件中

3、统计页面

4、报告

后台日志:

前端html报告

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1464928.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新版Java面试专题视频教程——多线程篇①

新版Java面试专题视频教程——多线程篇① Java多线程相关面试题 0. 问题汇总0.1 线程的基础知识0.2 线程中并发安全 1.线程的基础知识1.1 线程和进程的区别?1.2 并行和并发有什么区别?1.3 创建线程的四种方式1.4 runnabl…

LeetCode 2583.二叉树中的第 K 大层和:层序遍历 + 排序

【LetMeFly】2583.二叉树中的第 K 大层和:层序遍历 排序 力扣题目链接:https://leetcode.cn/problems/kth-largest-sum-in-a-binary-tree/ 给你一棵二叉树的根节点 root 和一个正整数 k 。 树中的 层和 是指 同一层 上节点值的总和。 返回树中第 k …

Codeforces Round 927 (Div. 3)

F. Feed Cats 题目大意 给一长度为的数轴,个区间在数轴上选取一些点作为特殊点在满足个区间中,每个区间内只能有一个特殊点问最多能选多少个特殊点 解题思路 对于每个点有放或不放两种状态考虑表示位置可能放或不放的最优结果若不放,若放…

制造业客户数据安全解决方案(终端安全/文件加密/介质管理等)

针对前文制造业客户数据安全解决方案(数据防泄密需求分析)提到的泄密风险,本文详细介绍一套完整、合理的解决方案,通过该方案构建公司数据安全防护边界,自动加密、全方位保护数据安全。 PC端:https://isite…

《VitePress 简易速速上手小册》第10章 维护与更新(2024 最新版)

文章目录 10.1 博客的日常维护10.1.1 基础知识点解析10.1.2 重点案例:内容更新策略10.1.3 拓展案例 1:性能优化实践10.1.4 拓展案例 2:备份和安全性策略 10.2 VitePress 版本更新与迁移10.2.1 基础知识点解析10.2.2 重点案例:平稳…

基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台

结尾有链接 基于SpringBoot2/SpringSecurity/SpringSession/SpringSocial/SpringSecurityOAuth2构建的互联网应用基础框架,包含认证中心、消息通知、安全中心和用户中心。支持Session/JWT/OAuth2认证模式,支持账号密码/短信验证码/社会化登录等登录模式…

ONLYOFFICE 桌面应用程序 v8.0 发布:全新 RTL 界面、本地主题、Moodle 集成等你期待的功能来了!

目录 📘 前言 📟 一、什么是 ONLYOFFICE 桌面编辑器? 📟 二、ONLYOFFICE 8.0版本新增了那些特别的实用模块? 2.1. 可填写的 PDF 表单 2.2. 双向文本 2.3. 电子表格中的新增功能 单变量求解:…

vue组件渲染过程

前言 一个组件渲染到页面,修改data触发更新(数据驱动视图)其背后原理是什么,需要掌握哪些点考察对流程了解的全面程度 回顾三大核心知识点 响应式:监听data属性getter、setter(包括数组) 模板…

概率密度函数(PDF)与神经网络中的激活函数

原创:项道德(daode3056,daode1212) 在量子力学中,许多现象都是统计的结果,基本上用的是正态分布,然而,从本质上思考,应该还存在低阶的分布,标准的正态分布是它的极限,这样一来,或许在…

P9221 「TAOI-1」Pentiment(珂朵莉树,颜色段均摊,ODT)

洛谷 P9221 「TAOI-1」Pentiment 题解区说这题同类型,先码住,有时间做一下。 思路: 这题是个动态规划,如何动规在洛谷题解区第一篇题解中讲的非常详细了,不赘述了。 这里主要考虑如何快速实现求解,假设现…

【STM32备忘录】【STM32WB系列的BLE低功耗蓝牙】一、测试广播配置搜不到信号的注意事项

一、预备知识: WB系列是双核单片机,用户写M4,无线协议栈使用M0新买到手的单片机,需要自己刷入使用的无线协议栈刷入无线协议栈的途径是通过一个叫FUS的东东,类似于bootloader,这个FUS新买的芯片通常已经刷…

v65.二维数组

int num[100];//表示有100个空:从num[0]到num[99] 一维数组(一个下标)这样放置的好处是刚好和线性代数中矩阵的理解是一样的。所以 坐标 的思想是挺必要的在一维数组中,遍历数组只需要一重循环;但在二维数组中&#xf…

ElementUI组件的安装和使用

Element UI 是一款基于 Vue 2.0 的桌面端组件库,主要用于快速构建网站的前端部分。它提供了丰富的组件,如按钮、输入框、表格、标签页等,以及一些布局元素,如布局容器、分割线等。Element UI 的设计风格简洁,易于上手&…

web基础及http协议 (二)----------Apache相关配置与优化

一、httpd 安装组成 http 服务基于 C/S 结构 1 .常见http 服务器程序 httpd apache,存在C10K(10K connections)问题 nginx 解决C10K问题lighttpd IIS .asp 应用程序服务器 tomcat .jsp 应用程序服务器 jetty 开源的servlet容器&#xf…

MYSQL-入门

一.安装和连接 1.1 安装 mysql安装教程: 2021MySql-8.0.26安装详细教程(保姆级)_2021mysql-8.0.26安装详细教程(保姆级)_mysql8.0.26_ylb呀的博客-cs-CSDN博客 workbench安装: MySQL Workbench 安装及使用-CSDN博客 1.2 配…

关于不同文件传输协议的笔记

几种不同的文件传输协议,在个人局域网的搭建中起到重要的作用。 原文地址:关于不同文件传输协议的笔记 - Pleasure的博客 下面是正文内容: 前言 最近正在搭建个人的局域网络,所以不同系统间文件的共享功能是必不可少的。 而自己…

左手“兑抵接”,右手债务逾期,华夏幸福离“上岸”还有多远?

撰稿|行星 来源|贝多财经 进入2024年,华夏幸福仍不太“幸福”。 近日,华夏幸福基业股份有限公司(SH: 600340,下称“华夏幸福”)发布了关于债务逾期、债务重组进展等事项的公告。内容显示,华夏幸福截至1月…

基于SpringBoot的CSGO赛事管理系统源码和论文

CSGO赛事管理系统是针对CSGO赛事管理方面必不可少的一个部分。在CSGO赛事管理的整个过程中,CSGO赛事管理系统担负着最重要的角色。为满足如今日益复杂的管理需求,各类的管理系统也在不断改进。本课题所设计的CSGO赛事管理系统,使用java进行开…

(3)(3.6) 用于OpenTX的Yaapu遥测脚本

文章目录 前言 1 安装和操作 2 参数说明 前言 这是一个开源 LUA 脚本,用于在使用 OpenTX 2.2.3 的 Horus X10、X12、Jumper T16、T18、Radiomaster TX16S、Taranis X9D、X9E、QX7 和 Jumper T12 无线电设备上显示 FrSky 的直通遥测数据(FrSky passthrough telem…

单元测试、系统测试、集成测试详解

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、单元测试的概念 单元测试是对软件基本组成单元进行的测试&…