IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 如何利用Python对服务器的接口进行压力测试 -> 正文阅读

[开发测试]如何利用Python对服务器的接口进行压力测试

如何利用Python对服务器的接口进行压力测试

我们都知道在服务器提供服务的过程中,不免因为流量的增加导致服务器的提供服务性能下降,因此需要对服务器进行升级,通过有针对性的测试,对延迟非常严重的接口进行升级,比如增加缓存、增大线程池或者重写服务。

在升级的过程中怎样验证服务器的升级效果呢?

这篇文章会利用locust这个包对服务器的接口进行压力测试,你可以学到:

  • 如何利用Python进行压力测试
  • 如何对不同的接口分配流量权重
  • 如何自动生成测试代码

Locust压测框架

在这里插入图片描述

总之locust是非常好用、简单的测试工具。

如何使用

导入包

from locust import HttpUser, task
import os

新建类-PressureStart

class PressureStart(HttpUser):
    min_wait = 100  # 最小等待时间(ms),模拟用户在执行每个任务之间等待的最小时间
    max_wait = 500  # 最大等待时长(ms),模拟用户在执行每个任务之间等待的最大时长
    
    host = "http://localhost:18813" # 访问的域名和端口
    
    def on_start(self):
        # 开始任务
        print("start working")

新建任务@Task

    @task(1)
    def acCheck_acCheckDetails(self): 
        header = {"Content-Type": "application/json"}
        data = '{"applianceId": 17592196255061}'
        self.client.post('/acCheck/acCheckDetails', data=data, headers=header)

注:@Task是任务注解,其中1表示这个接口的访问流量的权重,header是数据格式,data是数据,/acCheck/acCheckDetails是接口。

在服务器中项目会提供很多的接口,因此会有多个task:

	@task(23)
    def deviceinfo_deleteHeadImg(self):
        header = {"Content-Type": "application/json"}
        data = '{"userId":123,"appId":123123, "deviceId":"111"}'
        self.client.post('/deviceinfo/deleteHeadImg', data=data, headers=header)

    @task(5)
    def deviceinfo_get(self):
        header = {"Content-Type": "application/json"}
        data = '{"userId":123,"appId":123123}'
        self.client.post('/deviceinfo/get', data=data, headers=header)

    @task(1)
    def region_get(self):
        header = {"Content-Type": "application/json"}
        data = '{"appId":"123","userEmail":"123456", "regionCode":"84001002"}'
        self.client.post('/deviceinfo/oversea/app/region/get', data=data, headers=header)

如何运行

if __name__ == '__main__':
    os.system(
        "locust -f pressure_start.py --no-web -c 20 -r 20 -t 100s --csv=example --loglevel=INFO --logfile=test.log --host=http://localhost:18813")

本地可以采用web的方式,可在网页端输入总的并发数量和每秒递增的线程数量,在服务器上运行采用no-web的方式,no-web需要跟随crt等参数。

注:

参数含义
-c总的并发数量
-r指定并发加压速率(每秒多少个用户)
-t测试时间,30s1m1h
--csv:保存运行结果
--loglevel:日志等级
--logfile:日志文件
--host:域名

运行方式:

python ***.py

运行结果

如何自动化生产task代码

一个项目不免有好几十个接口,怎样自动生产测试task呢?

import pandas as pd


def get_uri_data():
    uri_data_values = pd.read_excel('./pressure_uri.xlsx', usecols=[0, 1], names=None, sheet_name='Sheet1')

    uri_data_list = uri_data_values.values.tolist()

    result = []

    uri_len = len(uri_data_list)

    for i in range(uri_len):
        result.append("@task(1)\n")
        str1 = str(uri_data_list[i][0])
        chs = str1.split('/')
        title = chs[len(chs) - 2] + "_" + chs[len(chs) - 1]
        result.append("def " + title + "(self):\n\t")
        result.append("header={\"Content-Type\": \"application/json\"}\n\t")
        data = "\'" + uri_data_list[i][1].replace(u'\xa0', '') + "\'"
        result.append("data=" + data + "\n\t")
        result.append('self.client.post(' + '\'' + str1 + '\'' + ', data=data, headers=header)')
        result.append("\n\n")
        print(result)
        # result.clear()
    with open('./result_code_create.txt', 'w', encoding='utf-8') as f:
        f.writelines(result)

注:在pressure_uril.xlsx中填写接口名和数据即可。
在这里插入图片描述

结果可保存到result_code_create.txt文件中。
在这里插入图片描述

欢迎指教

在这里插入图片描述

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-02-24 15:36:05  更:2022-02-24 15:38:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 3:00:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码