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": "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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM