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性能测试的相关文章

SQLite介绍、学习笔记、性能测试

SQLite介绍.学习笔记.性能测试 哪些人,哪些公司或软件在用SQLite: Nokia's Symbian,Mozilla,Abobe,Google,阿里旺旺,飞信,Chrome,FireFox可见SQLite的稳定性及性能是不会有什么问题的,详细列表请参见:http://www.sqlite.org/famous.html. 网上关于SQLite的介绍一抓一大把,总结起来,他有如下特点: SQLite优点及适应场合: 轻量级绿色组件单一文件跨平台查询效率极高使用事务插入速度极快支持limi

Python Locust性能测试框架实践

Locust的介绍 Locust是一个python的性能测试工具,你可以通过写python脚本的方式来对web接口进行负载测试. Locust的安装 首先你要安装python2.6以上版本,而且有pip工具.之后打开命令行,分别安装locustio和pyzmq(命令如下): pip install locustio pip install pyzmq 之后我们就可以写性能测试脚本了. Locust脚本编写 接下来我们拿两个接口做一下测试,编写脚本如下(每一步都有注释).我来解释一下,首先我们要i

locust性能测试4-参数关联

前言 前面[Locust性能测试2-先登录场景案例]讲了登录的案例,这种是直接传账号和密码就能登录了,有些登录的网站会复杂一点, 需要先从页面上动态获取参数,作为登录接口的请求参数,如[学信网:https://account.chsi.com.cn/passport/login]的登录接口请求参数 请求参数 需要先发个get请求,从返回的html页面中解析出需要的数据 lt : LT-277623-5ldGTLqQhP4foKihHUlgfKPeGGyWVI execution: e1s1 备注

爬虫学习 16.Python网络爬虫之Scrapy框架(CrawlSpider)

爬虫学习 16.Python网络爬虫之Scrapy框架(CrawlSpider) 引入 提问:如果想要通过爬虫程序去爬取"糗百"全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法二:基于CrawlSpider的自动爬取进行实现(更加简洁和高效). 今日概要 CrawlSpider简介 CrawlSpider使用 基于CrawlSpider爬虫文件的创建 链接提取器 规则解析器 今日详

Locust性能测试学习总结

Locust学习总结分享 简介: Locust是一个用于可扩展的,分布式的,性能测试的,开源的,用Python编写框架/工具,它非常容易使用,也非常好学.它的主要思想就是模拟一群用户将访问你的网站.每个用户的行为由你编写的python代码定义,同时可以从Web界面中实时观察到用户的行为. Locust完全是事件驱动的,因此在单台机器上能够支持几千并发用户访问.与其它许多基于事件的应用相比,Locust并不使用回调,而是使用gevent,而gevent是基于协程的,可以用同步的方式来编写异步执行的

OC学习16——对象归档

转载自  OC学习篇之---归档和解挡 OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOutputStream来进行操作的.当然在操作的这些对象都是需要实现一个接口:Serializable,同样的OC中操作的对象也是需要实现一个协议的,后面会说到. 一.已有类型的归档和解档 首先来看一个简单的例子: 1 // 2 // main.m 3 // 33_ObjectToFile 4 // 5 // Created by jiangwei on

python locust 性能测试:locust 关联---提取返回数据并使用

from locust import HttpLocust, TaskSet, taskimport jsonfrom common import readConfig class UserBehavior(TaskSet): # 定义用户行为 def on_start(self): # 当模拟用户开始执行TaskSet类的时候,on_start方法会被调用 pass def get_headers(self): """会员登录""" heade

Locust性能测试1-环境准备与基本使用

Locust简介 Locust是一款易于使用的分布式用户负载测试工具.它用于对网站(或其他系统)进行负载测试,并确定系统可以处理多少并发用户.这个想法是,在测试期间,一群蝗虫(Locust)会攻击你的网站.您定义了每个蝗虫Locust(或测试用户)的行为,并且实时地从Web UI监视群集过程.这将有助于您在让真正的用户进入之前进行测试并识别代码中的瓶颈.Locust完全基于事件,因此可以在一台计算机上支持数千个并发用户.与许多其他基于事件的应用程序相比,它不使用回调.相反,它通过协程(geven

locust性能测试安装

Locust简介 Locust是一款易于使用的分布式用户负载测试工具.它用于对网站(或其他系统)进行负载测试,并确定系统可以处理多少并发用户.这个想法是,在测试期间,一群蝗虫(Locust)会攻击你的网站.您定义了每个蝗虫Locust(或测试用户)的行为,并且实时地从Web UI监视群集过程.这将有助于您在让真正的用户进入之前进行测试并识别代码中的瓶颈.Locust完全基于事件,因此可以在一台计算机上支持数千个并发用户.与许多其他基于事件的应用程序相比,它不使用回调.相反,它通过协程(geven