首页 > 其他分享 >pytest做压力测试

pytest做压力测试

时间:2024-02-19 10:46:05浏览次数:25  
标签:num print 2f pytest threads 测试 time 压力 requests

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
#
# 压力测试案例
#
"""
import threading
import time

import psutil
import pytest
import requests


# 定义测试用例
@pytest.mark.performance
def test_performance():
    # 设置测试参数
    url = 'http://www.tdouya.biz/'
    num_threads = 20
    num_requests = 200
    timeout = 5

    # 初始化测试结果
    response_times = []
    errors = 0
    successes = 0

    # 定义测试函数
    def test_func():
        nonlocal errors, successes
        for _ in range(num_requests):
            try:
                start_time = time.time()
                requests.get(url, timeout=timeout)
                end_time = time.time()
                response_time = end_time - start_time
                response_times.append(response_time)
                successes += 1
            except requests.exceptions.RequestException:
                errors += 1

                # 创建测试线程

    threads = []
    for _ in range(num_threads):
        t = threading.Thread(target=test_func)
        threads.append(t)

        # 启动测试线程
    for t in threads:
        t.start()

        # 等待测试线程结束
    for t in threads:
        t.join()

        # 计算测试结果
    total_requests = num_threads * num_requests
    throughput = successes / (sum(response_times) or 1)
    concurrency = num_threads
    error_rate = errors / (total_requests or 1)
    cpu_usage = psutil.cpu_percent()
    memory_usage = psutil.virtual_memory().percent

    # 输出测试结果
    print(f'总请求数:{total_requests}')
    print(f'总时间:{sum(response_times):.2f}s')
    print(f'吞吐量:{throughput:.2f} requests/s')
    print(f'并发数:{concurrency}')
    print(f'错误率:{error_rate:.2%}')
    print(f'CPU利用率:{cpu_usage:.2f}%')
    print(f'内存利用率:{memory_usage:.2f}%')

    # 将测试结果写入文件
    with open('performance_test_result.txt', 'w',encoding='utf-8') as f:
        f.write(f'总请求数:{total_requests}\n')
        f.write(f'总时间:{sum(response_times):.2f}s\n')
        f.write(f'吞吐量:{throughput:.2f} requests/s\n')
        f.write(f'并发数:{concurrency}\n')
        f.write(f'错误率:{error_rate:.2%}\n')
        f.write(f'CPU利用率:{cpu_usage:.2f}%\n')
        f.write(f'内存利用率:{memory_usage:.2f}%\n')

输出结果大概为

总请求数:4000
总时间:475.93s
吞吐量:8.40 requests/s
并发数:20
错误率:0.00%
CPU利用率:4.40%
内存利用率:70.30%

标签:num,print,2f,pytest,threads,测试,time,压力,requests
From: https://www.cnblogs.com/qcy-blog/p/18020579

相关文章

  • RunnerGo:UI自动化测试神器!
    UI自动化测试已经成为现代软件开发过程中不可或缺的一部分。它能够提供诸多优势,包括提高测试效率、减少人力成本、提升软件质量等。同时,可视化工具为UI自动化测试带来了更多便利和灵活性。RunnerGo近期上线脚本录制器,根据你的测试操作直接生成UI自动化测试脚本,下面是使用方法Step......
  • 怎么做接口自动化测试
    在分层测试的“金字塔”模型中,接口测试属于第二层服务集成测试范畴。相比UI层(主要是WEB或APP)自动化测试而言,接口自动化测试收益更大,且容易实现,维护成本低,有着更高的投入产出比,是每个公司开展自动化测试的首选。 为了让大家更好地了解接口自动化测试本篇文章以下列三个方面介绍......
  • 常用的MODBUS协议测试工具推荐
    介绍一些常用的MODBUS测试工具。1、ModscanModscan是一款免费的MODBUS测试工具,支持ModbusRTU和TCP和ASCII协议。它可以进行单点和多点的读写操作,并且可以生成MODBUS协议相关的报告。还支持模拟器模式,使用户可以通过虚拟设备对ModBus进行测试。2、CASModbusS......
  • 性能测试的主要术语
    软件性能的几个主要术语1、响应时间:对请求作出响应所需要的时间网络传输时间:N1+N2+N3+N4应用服务器处理时间:A1+A3数据库服务器处理时间:A2响应时间=N1+N2+N3+N4+A1+A3+A22、并发用户数的计算公式系统用户数:系统额定的用户数量,如一个OA系统,可能使用该系统的用户总数是5000个,......
  • 性能测试:实际性能测试场景
        ......
  • PaddleNLP命名实体识别环境搭建&推理测试
    引子最近手上接了一个活儿,基于文本语料的实体抽取任务,调研了一圈发现目前开源轮子做的比较好的也就是PaddleNLP(大模型那种巨废资源,且幻觉严重的,不予考虑)。OK,那就让我们开始吧。一、命名实体识别概念命名实体识别(NamedEntitiesRecognition,NER)是自然语言处理的一个基础任务。其......
  • 【测试运维】性能测试经验文档总结第3篇:VuGen详解(已分享,附代码)
    本系列文章md笔记(已分享)主要讨论性能测试相关知识。入门阶段:认识性能测试分类-(负载测试、压力测试、并发测试、稳定性测试),常用性能测试指标-(吞吐量、并发数、响应时间、点击数...),性能测试工具选择。性能脚本:1.LoadRunner介绍,2.脚本录制、运行、参数化,3.关联、检查点、事务......
  • 【测试运维】性能测试经验文档总结第3篇:VuGen详解(已分享,附代码)
    本系列文章md笔记(已分享)主要讨论性能测试相关知识。入门阶段:认识性能测试分类-(负载测试、压力测试、并发测试、稳定性测试),常用性能测试指标-(吞吐量、并发数、响应时间、点击数...),性能测试工具选择。性能脚本:1.LoadRunner介绍,2.脚本录制、运行、参数化,3.关联、检查点、事务......
  • 2024初三年后集训模拟测试1
    前言总分\(310\)\(T1~100\)\(T2~100\)\(T3~50\)题解方法属实巧妙,考场上想到了枚举平均值和前缀和,但没想到满足\(sum_{l-1}=sum_r\)(见下面题解)。\(T4~60\)离谱题:存在多组可能的解,输出满足条件的一组解即可。评测方式:文本比较。没有\(special~judge\)......
  • 2024初三集训模拟测试1
    2024初三集训模拟测试1\(T1\)edit\(100pts\)字符串模拟即可。貌似不能写成while(cin>s),因为每两个单词中可能不只有一个空格。点击查看代码strings;intmain(){ freopen("edit.in","r",stdin); freopen("edit.out","w",stdout); getline(cin,s); cou......