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# 上海悠悠,QQ交流群:750815713接口返回:{ "code": 0, "msg": "success!", "datas": [{ "age": 20, "create_time": "2019-09-15", "id": 1, "mail": "283340479@qq.com", "name": "yoyo", "sex": "M" }, { "age": 21, "create_time": "2019-09-16", "id": 2, "mail": "123445@qq.com", "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, 283340479@qq.com]

使用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

2019第一期《python测试开发》课程,10月13号开学!

本期上课时间:10月13号-12月8号,每周六、周日晚上20:30-22:30

(0)

相关推荐

  • [638]python os.popen() 方法

    概述 os.popen() 方法用于从一个命令打开一个管道. 在Unix,Windows中有效 语法 popen()方法语法格式如下: os.popen(command[, mode[, bufsiz ...

  • httprunner 3.x学习16 - 断言使用正则匹配(assert_regex_match)

    前言 httprunner 3.x可以支持正则匹配断言,使用assert_regex_match方法 assert_regex_match assert_regex_match 源码如下 def as ...

  • httprunner 2.x学习16 - 调用HttpRunner类执行用例

    前言 httprunner 2.x版本底层用的是 unittest 框架运行的用例,执行用例的时候除了可以在命令行输入hrun运行用例,也可以调用HttpRunner类执行用例. 环境版本:httpr ...

  • 周易学习16个掌诀图 (超全,值得收藏)!

    说起"掐指一算",大家会很自然地联想起那些江湖术士.算命先生.那些人总是以"察天地之理.通鬼神之志"自诩,每次占卜时,做一大堆的神秘仪式,然后掐指一算,便开始对 ...

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

    前言 提到性能测试,大部分小伙伴想到的就是LR和jmeter这种工具,小编一直不太喜欢写这种工具类的东西,我的原则是能用代码解决的问题,尽量不去用工具. python里面也有一个性能测试框架Locus ...

  • Locust性能测试2-先登录场景案例

    前言 有很多网站不登录的话,是无法访问到里面的页面的,这就需要先登录了 实现场景:先登录(只登录一次),然后访问页面->我的地盘页->产品页->项目页 官方案例 下面是一个简单的lo ...

  • Locust性能测试3-no-web模式和csv报告保存

    前言 前面是在web页面操作,需要手动的点start启动,结束的时候也需要手工去点stop,没法自定义运行时间,这就不太方便. locust提供了命令行运行的方法,不启动web页面也能运行,这就是no ...

  • locust性能测试4-参数关联

    前言 前面[Locust性能测试2-先登录场景案例]讲了登录的案例,这种是直接传账号和密码就能登录了,有些登录的网站会复杂一点, 需要先从页面上动态获取参数,作为登录接口的请求参数,如[学信网:htt ...

  • Locust性能测试5-参数化之批量注册

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

  • httprunner学习1-环境与登录接口案例

    前言 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试. 使用环境: python 3.6 httprunner 1 ...