httprunner学习16-locust性能测试

前言

HttpRunner 的 yaml 脚本文件,可以结合locust做性能测试

locust环境准备

安装完成 HttpRunner 后,系统中会新增locusts命令,但不会同时安装 Locust。
使用locusts -V查看时,会提示需要先安装locustio

C:\Users\dell>locusts -V
WARNING  Locust is not installed, install first and try again.
install command: pip install locustio

使用 pip 安装 locustio 包

pip install locustio

查看locustio相关信息

C:\Users\dell>pip show locustio
Name: locustio
Version: 0.11.0
Summary: Website load testing framework
Home-page: https://locust.io/
Author: Jonatan Heyman, Carl Bystrom, Joakim Hamrén, Hugo Heyman
Author-email: UNKNOWN
License: MIT
Location: e:\python36\lib\site-packages
Requires: pyzmq, flask, gevent, requests, six, msgpack
Required-by:

关于locust相关的教程,可以查看前面写的系列https://www.cnblogs.com/yoyoketang/tag/locust/

脚本准备

在做压测之前,我们得保证单个脚本是可以正常运行的,比如我在本地搭建一个接口环境,信息如下

接口访问地址:/api/test/demo
请求方式:get

接口返回:
{
    "code": 0,
    "msg": "success!",
    "datas": [{
        "age": 20,
        "create_time": "2019-09-15",
        "id": 1,
        "mail": "[email protected]",
        "name": "yoyo",
        "sex": "M"
    }, {
        "age": 21,
        "create_time": "2019-09-16",
        "id": 2,
        "mail": "[email protected]",
        "name": "yoyo111",
        "sex": "M"
    }]
}

test_get_demo.yml脚本内容如下

- config:
    name: logincase
    variables: {}

# 上海悠悠,QQ交流群:750815713
- test:
    name: get user info case1
    request:
        url: http://127.0.0.1:8000/api/test/demo
        method: GET
        headers:
            Content-Type: application/json
            User-Agent: python-requests/2.18.4
    validate:
        - eq: [status_code, 200]
        - eq: [headers.Content-Type, application/json]
        - eq: [content.datas.0.age, 20]
        - eq: [content.datas.0.name, yoyo]
        - eq: [content.datas.0.mail, [email protected]]

使用hrun 运行上面脚本,保证是可以正常运行的

locusts 启动

使用locusts -f 启动脚本文件

locusts -f test_get_demo.yml

D:\soft\untitled\projectdemo>locusts -f test_get_demo.yml
e:\python36\lib\site-packages\locust\core.py:17: MonkeyPatchWarning: Monkey-patching ssl after ssl has already been imported may lead to errors, including RecursionError on Python 3.6. It may also silently lead to incorrect behaviour on Python 3.7. Please monkey-patch earlier. See https://github.com/gevent/gevent/issues/1016. Modules that had direct imports (NOT patched): ['urllib3.contrib.pyopenssl (e:\\python36\\lib\\site-packages\\urllib3\\contrib\\pyopenssl.py)', 'urllib3.util (e:\\python36\\lib\\site-packages\\urllib3\\util\\__init__.py)'].
  monkey.patch_all()
INFO     Starting web monitor at *:8089
INFO     Starting Locust 0.11.0

运行完成之后,可以看到locust的web页面在8089端口启动,接着在浏览器输入:http://localhost:8089/ 即可访问

运行脚本

locust界面有2个输入框,Number of users to simulate 是用户并发数,Hatch rate (users spawned/second)是每秒启动用户数
比如我设置10个并发,每秒启动10个用户,测试结果如下

从测试结果可以看出,实际上每秒并没有触发10个请求(RPS值不到10),因为在locustfile.py文件里面有个等待机制

  • min_wait = 1000 最小等待时间1秒
  • max_wait = 5000 最大等待时间5秒
    把max_wait改成1000就可以达到 10 RPS了

locustfile.py

当启动locusts的时候,会在当前目录自动生成一个locustfile.py文件。这个才是locust的脚本文件

#coding: utf-8
import zmq
from locust import HttpLocust, TaskSet, task
from httprunner.task import LocustTask

class WebPageTasks(TaskSet):
    def on_start(self):
        self.test_runner = LocustTask(self.locust.file_path, self.client)

    @task
    def test_specified_scenario(self):
        self.test_runner.run()

class WebPageUser(HttpLocust):
    host = "http://127.0.0.1:8000"
    task_set = WebPageTasks
    min_wait = 1000
    max_wait = 1000    #    max_wait改成 1000了

    file_path = "test_get_demo.yml"

使用locust执行locustfile.py脚本文件

locust -f locustfile.py

测试结果 RPS=9.9 接近10

原文地址:https://www.cnblogs.com/yoyoketang/p/11644998.html

时间: 10-09

httprunner学习16-locust性能测试的相关文章

【Spark深入学习 -16】官网学习SparkSQL

----本节内容-------1.概览        1.1 Spark SQL        1.2 DatSets和DataFrame2.动手干活        2.1 契入点:SparkSession        2.2 创建DataFrames        2.3 非强类型结果集操作        2.4 程序化执行SQL查询        2.5 全局临时视图        2.6 创建DataSets        2.7 与RDD交互操作        2.8 聚集函数3.Sp

黑马程序员——java学习16(毕25)——正则表达式

正则表达式 符合一定规则的表达式 作用:专门用于操作字符串 特点:用于一些特定的符号来表示一些代码操作,这样就简化书写 好处:可以简化对字符串的复杂操作 具体操作功能: 1.匹配: public boolean matches(String regex) 参数 regex - 用来匹配此字符串的正则表达式 2.切割   String[] split(String  regex) 根据给定正则表达式的匹配拆分此字符串. 3.替换 String  replaceAll(String  regex ,

android学习16#--学习canvas.drawText

本来这篇文章是要写写我在设计高级跑马灯程序的心得的,但是编写过程中花了近一天多的时间搞明白canvas.drawText中的第三个参数[float y]代表的真实含义.学习本文应该能帮助大家掌握FontMetrics类和Rect类成员变量值具体含义. drawText引出问题 先来看看api中是如何定义drawText的参数. /** * Draw the text, with origin at (x,y), using the specified paint. The * origin is

性能学习-了解前端性能测试

原文:http://www.wangyuxiong.com/archives/51405 原文:http://www.cnblogs.com/fnng/archive/2012/07/11/2587196.html 性能测试一直是Web应用中非常受关注的部分,目前大多数人对于性能测试还主要集中在服务器端,重点都会放在服务器端的性能测试与调优,但实际上,除了考虑服务端在足够短的时间内返回页面数据之外,还可以从页面前端考虑. 从用户的感受来看,虽然传输速度受用户带宽的限制.但我们可以通过很多技术来使

黑马程序员——java学习16(张孝祥)——反射

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 反射机制 在运行状态中,对于任意一个类,能知道它全部的方法和属性, 对于任意一个对象,能能够调用它的任意一个方法和属性 就是把java类中的各种成分映射成相应的java类 反射的基础Class Class类的实例对象就是字节码,就是那个类被编译后形成的二进制数据代码 获取对象的方式为三种 1.类名.class 2.对象.getClass 3.Class.forName("类名") 1

Python学习-16.Python中的错误处理

虽然叫错误,但跟 C# 中的异常是一回事.只不过 Python 中叫错误(Error)而 C# 中叫异常(Exception). 先手工产生一个异常: 1 file = open('','r') 上面一句由于路径是空路径,因此文件肯定是不存在的,执行这一句会引发 FileNotFoundError 这个错误. 既然是错误的,程序也停止了,这是我们不希望的,因此得想办法处理一下. 在 Python 中,异常处理使用 try.except.finally 这三个关键字. 修改代码如下: 1 path

ndk学习16: unix domain socket

一.UNIX Domain Socket 概念: UNIX Domain Socket是在socket架构上发展起来的用于同一台主机的进程间通讯(IPC) 特点: 1. 它不需要经过网络协议栈,不需要打包拆包.计算校验和.维护序号和应答等 2. 只是将应用层数据从一个进程拷贝到另一个进程. 工作模式: SOCK_DGRAM     类似于UDP SOCK_STREAM    类似于TCP 用途: UNIX Domain Socket可用于两个没有亲缘关系的进程,是全双工的,是目前使用最广泛的IP

Sqlite学习笔记(二)&&性能测试

测试目标 获取SQlite的常规性能指标 测试环境 CPU:8核,Intel(R) Xeon(R) CPU E5-2430 0 @ 2.20GHz 内存:16G 磁盘:SSD Linux 2.6.32 SQlite最新版本3.8.11 测试场景 1)  主键查询测试 2)  主键更新测试 3)  批量导入测试 初始化 1)  测试表结构 CREATE TABLE user( id integer primary key autoincrement, c1 int, c2 varchar(1000

《转》Python学习(16)-python异常

转自 http://www.cnblogs.com/BeginMan/p/3171445.html 一.什么是错误,什么是异常,它们两者区别 这里解释如下:个人觉得很通俗易懂 错误是指在执行代码过程中发生的事件,它中断或干扰代码的正常流程并创建异常对象.当错误中断流程时,该程序将尝试寻找异常处理程序(一段告诉程序如何对错误做出响应的代码),以帮助程序恢复流程.换句话说,错误是一个事件,而异常是该事件创建的对象. 当使用短语"产生异常"时,表示存在问题的方法发生错误,并创建异常对象(包含

ExtJS4.2学习(16)制作表单(转)

鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-12-10/188.html ---------------------------------------------------------------------------------------- 一.我们来制作一个简单的表单: 代码: /** * ExtJS之制作表单——第一个表单 */ Ext.onReady(function(){ var f