性能测试使用locust进行接口的性能测试(一)(代码片段)

黑黑白白君 黑黑白白君     2022-12-03     636

关键词:

前置知识:
《【性能测试】性能测试基础》
《【接口测试实战(零)】接口测试简介》


文章目录


1)接口性能测试

1.1常见指标:

  • QPS(Queries Per Second,每秒查询率):

    是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准
    • 在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力

*QPS VS. TPS

  • TPS:Transactions Per Second(每秒传输的事物处理个数),即服务器每秒处理的事务数

    • TPS包括一条消息入和一条消息出,加上一次用户数据库访问。(业务TPS = CAPS × 每个呼叫平均TPS)
    • TPS是软件测试结果的测量单位
    • 一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程:客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
    • 一般的,评价系统性能均以每秒钟完成的技术交易的数量来衡量。系统整体处理能力取决于处理能力最低模块的TPS值。
  • 区别:Qps基本类似于Tps,但是不同的是,对于一个页面的一次访问,形成一个Tps;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“Qps”之中。

    • 例如:访问一个页面会请求服务器3次,一次放,产生一个“T”,产生3个“Q”
  • RT(Reaction Time,响应时间):

    指系统对请求作出响应的时间。
    • 在讨论一个系统的响应时间时,人们通常是指该系统所有功能的平均时间或者所有功能的最大响应时间。当然,往往也需要对每个或每组功能讨论其平均响应时间和最大响应时间

一个系统的吞吐量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。单个reqeust对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。

  • 一个系统吞吐量通常由QPS(TPS)、并发数两个因素决定,每套系统这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,原因是系统超负荷工作,上下文切换、内存等等其它消耗导致系统性能下降。
  • 并发数(系统同时处理的request/事务数):

    • 并发数 = QPS*平均响应时间
    • 或者,QPS(TPS)= 并发数/平均响应时间
    • 注意:并发用户数与每秒的并发请求数不同,前者是同一时间内向服务器发送请求的用户数量。所以一定要确认需求的目的是并发用户数还是并发请求数。

  • 资源利用率:

    在一定负载下,服务器资源占用情况。不是越小越好,如果资源利用率太小,会造成资源的浪费。

    • CPU利用率:一般不允许超过70-80%,需要考虑队列长度。
    • Mem利用率:一般80%以下,也考虑页交换频率(虚拟内存和物理内存之间交换的频繁程度)。
    • 带宽利用率:服务器的带宽利用率。


2)Locust入门级使用

2.1 Locust是什么

Locust 是一个开源负载测试工具。使用 Python 代码定义用户行为,也可以仿真百万个用户。

  • 是非常简单易用的、分布式的用户负载测试工具,官网:https://locust.io/
  • 主要为网站或者其他系统进行负载测试,能测试出一个系统可以并发处理多少用户
  • Locust 是完全基于时间的,因此单个机器支持几千个并发用户。相比其他许多事件驱动的应用,Locust 不使用回调,而是使用轻量级的处理方式 gevent(一个基于 greenlet 的 Python 的并发框架,以微线程greenlet为核心,使用了epoll事件监听机制以及诸多其他优化而变得高效)。

2.2 Locust的安装

  • 在mac上安装,python版本用的是3.9

1、安装locust,安装命令:pip3 install locust。安装完之后,使用locust –-help这个命令查看是否安装成功。

2、简单使用,查看安装效果(本次安装的是locust 1.6.0版本):
创建load_test.py文件,通过Python编写性能测试脚本。

from locust import HttpUser, TaskSet, task

class UserBehavior(TaskSet):  # 创建UserBehavior()类继承TaskSet类,为用户行为

    @task(1)  # 用@task()装饰该方法为一个任务,1表示一个Locust实例被挑选执行的权重,数值越大,执行频率越高
    def baidu(self):  # 创建baidu() 方法表示一个行为,访问百度首页
        self.client.get("/")

class WebsiteUser(HttpUser):  # WebsiteUser()类用于设置性能测试
    tasks = [UserBehavior]  # 指向一个定义了的用户行为类
    min_wait = 3000  # 用户执行任务之间等待时间的下界,单位:毫秒
    max_wait = 6000  # 用户执行任务之间等待时间的上界,单位:毫秒

*参考其他人代码时出现了两个问题

  • 关于HttpLocust的报错,解决方法:将脚本中引用的所有HttpLocust都改为HttpUser
  • 关于User.task_set的报错,解决方法:将task_set = UserBehavior 修改为 tasks = [UserBehavior]

解决方法参考自:https://blog.csdn.net/DaisyCold/article/details/108261611

3、切换到性能测试脚本所在的目录,启动这个python脚本,其中:load_test.py 为测试脚本,https://www.baidu.com 为测试的网站。

…/> locust -f load_test.py –host=https://www.baidu.com

4、打开浏览器访问:http://127.0.0.1:8089:

2.3 写一个locust脚本

locustfile 是一个普通的 python 文件,唯一的要求是它至少声明一个从类 User 继承的类。

  • User类(用户类):一个用户类代表一个用户(如果你愿意,也可以代表一群蝗虫)。 Locust 将为每个被模拟的用户生成一个 User 类的实例。 User 类可以定义一些通用属性。
    • 用户的 wait_time 方法是一个可选属性,用于确定模拟用户在执行任务之间应等待多长时间。 如果没有指定wait_time,一个新的任务一完成就会执行。
    • weight attribute(权重属性):如果文件中存在多个用户类,并且没有在命令行中指定用户类,Locust 将生成相同数量的每个用户类。
    • 主机属性(host attribute):主机属性是要加载的主机的 URL 前缀(即“http://google.com”)。 通常,这是在 Locust 的 Web UI 或命令行中指定的,在 locust 启动时使用 --host 选项。
    • 任务属性(tasks attribute):User 类可以使用 @task 装饰器将任务声明为它的方法,但也可以使用 tasks 属性指定任务。

当负载测试开始时,将为每个模拟用户创建一个 User 类的实例,并且他们将开始在自己的green thread中运行。 当这些用户运行时,他们选择他们执行的任务,睡一会儿,然后选择一个新任务等等。

  • 这些任务是普通的 Python 可调用程序,如果我们对拍卖网站进行负载测试,它们可以执行诸如“加载起始页”、“搜索某些产品”、“出价”等操作。
  • 为用户添加任务的最简单方法是使用任务装饰器@task 。@task 接受一个可选的权重参数,可用于指定任务的执行率。
    • 另一种定义用户任务的方法是设置任务属性。tasks 属性要么是一个 Task 列表,要么是一个 <Task : int> dict,其中 Task 要么是一个 python 可调用类,要么是一个 TaskSet 类。 如果任务是一个普通的 python 函数,它们会收到一个参数,即正在执行任务的 User 实例。
  • 通过使用@tag 装饰器标记任务,可以使用–tags 和–exclude-tags 参数对测试期间执行的任务进行挑选。

  • HttpUser类

    HttpUser 是最常用的 User。 它添加了一个用于发出 HTTP 请求的client属性。
    • client 是 HttpSession 的一个实例,可用于向我们要进行负载测试的目标系统发出 HTTP 请求。
      • HttpSession 是 requests.Session 的子类/包装器,因此它的功能有很好的文档记录。 HttpSession 增加的主要是将请求结果上报到 Locust 中(成功/失败、响应时间、响应长度、名称)。
      • client 包含所有 HTTP 方法的方法:get、post、put、… 就像 requests.Session 一样,它在请求之间保留 cookie,因此可以轻松地用于登录网站。
      • HttpSession 捕获 Session 抛出的任何 requests.RequestException(由连接错误、超时或类似原因引起),而不是返回一个 status_code 设置为 0 且内容设置为 None 的虚拟 Response 对象。

  • 验证响应:

    如果 HTTP 响应代码正常(<400),则认为请求成功,但对响应进行一些额外验证通常很有用。
    • 可以使用 catch_response 参数、with 语句和对 response.failure() 的调用将请求标记为失败
    • 还可以将请求标记为成功,即使响应代码是错误的

  • 创建请求:

    • 生成GET请求的例子:可见上面
    • 生成POST请求的例子:
      • 带json的POST请求:

        res = self.client.post("/login", json="username":"foo", "password":"bar")
        


【部分内容参考自】

  • TPS和QPS的区别和理解:https://www.huaweicloud.com/articles/0ba1ab1bf63d24b5e74391cc6eb0efc4.html
  • 什么是QPS,TPS,吞吐量:https://www.jianshu.com/p/2fff42a9dfcf
  • Locust的安装(mac安装):https://blog.csdn.net/Y12nre/article/details/80356070
  • https://docs.locust.io/en/stable/writing-a-locustfile.html#writing-a-locustfile

如何使用 Locust 进行 UI 性能测试?

】如何使用Locust进行UI性能测试?【英文标题】:HowtouseLocustforUIperformancetesting?【发布时间】:2019-12-0508:18:27【问题描述】:我想使用Locust进行UI性能测试。如何获取HTML元素(img、列表等)的加载时间?谢谢【问题讨论】:【参... 查看详情

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

前段时间加入性能测试组,并参与搭建基于locust的性能测试平台,我分到的任务相对独立,开发locust的启动接口和停止运行接口,以下是locust运行的相关内容  查看详情

locust性能测试1-环境准备与基本使用(代码片段)

Locust简介Locust是一款易于使用的分布式用户负载测试工具。它用于对网站(或其他系统)进行负载测试,并确定系统可以处理多少并发用户。这个想法是,在测试期间,一群蝗虫(Locust)会攻击你的网站。您定义了每个蝗虫Locust... 查看详情

locust性能测试4-参数关联(代码片段)

前言前面【Locust性能测试2-先登录场景案例】讲了登录的案例,这种是直接传账号和密码就能登录了,有些登录的网站会复杂一点,需要先从页面上动态获取参数,作为登录接口的请求参数,如【学信网:https://account.chsi.com.cn/pas... 查看详情

性能测试工具jmeter和locust比较

前言ApacheJMeter和Locust都是是最受欢迎的性能测试工具。当你想做性能测试的时候,你会选择什么样的测试工具呢?是会选择jmeter?locust?今天,笔者将根据自己使用经验,针对jmeter、locust常用的性能测试工具进行简单介绍和对比... 查看详情

locust性能测试入门案例及分布式压测

前言大家好,我是洋子。性能测试已经成为作为测试工程师/测试开发工程师一项重要的专项能力,在抢红包,活动秒杀这种短时间内流量突增的场景,已或者是健康宝这种使用用户超级多的场景,我们均需要进行压力测试,确... 查看详情

locust性能测试--接口加密参数关联

前言登陆接口:headers:时间戳--timestamp实时获取,clientId--android/ios/web/微信小程序固定值,sign--privatekey加密后得到查询报告接口:headers:时间戳--timestamp实时获取,clientId--android/ios/web/微信小程序固定值,sign--privatekey加密后得到,t... 查看详情

性能测试利器-locust框架解析

...件测试码同学抖音号:小码哥聊软件测试1认识Locust说起性能测试工具,大家肯定想到的都是Jmeter,是的,由于其简单易用、功能强大,已经变成主流的压测工具之一。当需要实现一些高级功能的时候,可以使用Java语言对Jmeter进... 查看详情

性能测试之locust(代码片段)

最近接触了性能压测的一款工具Locust,分享下:一、首先说下压测工具对比:Jmeter:开源免费:JMeter是一款免费的开源软件,使用它不需要支付任何费用跨平台:java开发的开源软件小巧:相比LR的庞大(LoadRunner4GB左右),它非常小... 查看详情

性能测试利器-locust框架解析

01认识Locust说起性能测试工具,大家肯定想到的都是Jmeter,是的,由于其简单易用、功能强大,已经变成主流的压测工具之一。当需要实现一些高级功能的时候,可以使用Java语言对Jmeter进行扩展。但是很多小... 查看详情

张同乐-从零开始,打造高效可靠的locust性能测试

...以模拟成千上万的用户同时访问你的应用程序,以测试其性能和稳定性。这个工具具有易于使用、可扩展和高度可定制化等特点,因此被广泛应用于各种类型的应用程序的负载测试中。在本视频教程中,我们将为您介绍Locust的基... 查看详情

使用jmeter进行http接口做功能性能测试

...接口需要做测试,我在这里介绍一下对HTTP接口做功能、性能的测试。首先我们会从开发人员拿到接口数据。  一、测试需求描述  1、本次测试的接口为http服务端接口  2、接口:查询功能接口  3、接... 查看详情

locust性能测试安装(代码片段)

Locust简介Locust是一款易于使用的分布式用户负载测试工具。它用于对网站(或其他系统)进行负载测试,并确定系统可以处理多少并发用户。这个想法是,在测试期间,一群蝗虫(Locust)会攻击你的网站。您定义了每个蝗虫Locust... 查看详情

locust性能测试5-参数化登录

前言实现场景:所有并发虚拟用户共享同一份测试数据,并且保证虚拟用户使用的数据不重复。例如,模拟10用户并发注册账号,总共有100个手机号,要求注册账号不重复,注册完毕后结束测试准备数据虚拟用户locust1locust2locust3l... 查看详情

locust性能测试使用方法(代码片段)

1fromlocustimportHttpLocust,task,TaskSet2importos345‘‘‘6-f指定性能测试脚本文件7--host指定被测试应用的URL的地址8--port端口设置,默认80899--no-web表示不使用Web界面运行测试10-c设置虚拟用户数11-r设置每秒启动虚拟用户数12-t设置运行时间13... 查看详情

locust性能-零基础入门系列(代码片段)

...功能点越来越多时,更需要考虑测试管理相关的内容。让性能测试更有条理和高效。以如下官方例子来讲解TaskSet的用法以及在测试运行中的一些细节。fromlocustimportUser,TaskSet,between,task,constantclassForumSection(TaskSet):wait_time=cons 查看详情

性能测试工具locust和jmeter比较-及相关书籍下载

ApacheJMeter™和Locust都是是最受欢迎的性能测试工具。JMeter和Locust-简介JMeter是久经考验的性能框架之一,其第一个版本大约在20年前发布。它是用纯Java语言编写的。最初,JMeter开发用于执行Web和FTP应用程序的负载测试。但是,现... 查看详情

fasthttplocust怎么安装

ContentsLocust这一款开源性能测试工具。然而,当前在网络上针对Locust的教程极少,不管是中文还是英文,基本都是介绍安装方法和简单的测试案例演示,但对于较复杂测试场景的案例演示却基本没有,因此很多测试人员都感觉难... 查看详情