首页 > 其他分享 >并发测试代码学习

并发测试代码学习

时间:2022-09-01 19:57:48浏览次数:48  
标签:url self print 学习 并发 NUM time 测试代码 response

#!/usr/bin/python3  
# -*- coding: utf-8 -*-

import base64
import os
import urllib
import numpy as np
import requests, time, json, threading, random


class Presstest(object):
"""
并发压力测试
"""

def __init__(self, press_url):
self.press_url = press_url

def test_interface(self):
'''压测接口'''
global INDEX
INDEX += 1

global ERROR_NUM
global TIME_LENS
try:
start = time.time()
self.do_request(self.press_url)
end = time.time()
TIME_LENS.append(end - start)
print('end')
except Exception as e:
ERROR_NUM += 1
print(e)

def test_onework(self):
'''一次并发处理单个任务'''
i = 0
while i < ONE_WORKER_NUM:
i += 1
self.test_interface()
time.sleep(LOOP_SLEEP)

def do_request(self, url):
'''通用http获取webapi请求结果方法'''
# headers = {
# 'Content-Type': 'application/json; charset=UTF-8',
# }
# request = urllib.request.Request(url, headers=headers)
retry_num = 0
while retry_num < 3:
response = urllib.request.urlopen(url, timeout=300)
if not response or response.status == 421:
time.sleep(1)
retry_num = retry_num + 1
continue
else:
break
response_content = response.read()
if hasattr(response_content, 'decode'):
response_content = response_content.decode('utf-8')
return response_content

def run(self):
'''使用多线程进程并发测试'''
t1 = time.time()
Threads = []

for i in range(THREAD_NUM):
t = threading.Thread(target=self.test_onework, name="T" + str(i))
t.setDaemon(True)
Threads.append(t)

for t in Threads:
t.start()
for t in Threads:
t.join()
t2 = time.time()

print("===============压测结果===================")
print("URL:", self.press_url)
print("任务数量:", THREAD_NUM, "*", ONE_WORKER_NUM, "=", THREAD_NUM * ONE_WORKER_NUM)
print("总耗时(秒):", t2 - t1)
print("每次请求耗时(秒):", (t2 - t1) / (THREAD_NUM * ONE_WORKER_NUM))
print("每秒承载请求数:", 1 / ((t2 - t1) / (THREAD_NUM * ONE_WORKER_NUM)))
print("错误数量:", ERROR_NUM)
print(INDEX)


if __name__ == '__main__':
press_url = 'https://blog.csdn.net/m0_37886429/article/details/89020455'
TIME_LENS = []
INDEX = 0
THREAD_NUM = 1 # 并发线程总数
ONE_WORKER_NUM = 5 # 每个线程的循环次数
LOOP_SLEEP = 0 # 每次请求时间间隔(秒)
ERROR_NUM = 0 # 出错数

obj = Presstest(press_url)
obj.run()

标签:url,self,print,学习,并发,NUM,time,测试代码,response
From: https://www.cnblogs.com/tuzichun/p/16647644.html

相关文章

  • 【学习底层原理系列】Java底层-synchronized锁-3轻量级锁篇
     一.上一篇回顾1.偏向锁中的批量撤销和批量重偏向2.偏向锁发生了竞争,锁就要升级二.轻量级锁拆解1.加锁流程构建LockRecord,将LockRecord的obj指向当前锁对象,然后将无......
  • 2022-9-1 第一组 (≥▽≤) 学习笔记
    目录1.AjaxJS原生的AjaxGET请求POST请求JQuery的Ajax发送GET请求发送POST请求完整写法Vue的Ajax(aixos)GET请求POST请求注意点:1.Ajax异步刷新(局部刷新),前端技术——可以给......
  • 2022-09-01 第四组 王佳齐 学习笔记
    ajax概念ajax:异步刷新,前端技术,给后台发请求异步:整个页面不会全部刷新只有某个局部在刷新。四种发请求的方式:1.form表单2.a标签3.地址栏4.location.href.window.ope......
  • 学习日记 Day4. Nginx
    title:Day4Nginxdate:2022-08-2922:20:35tags:NginxNginxNginx一个高性能的HTTP和反向代理的web服务器,同时也提供IMAP/POP3/SMTP服务。作用即:反向代理、负载......
  • 学习日记Day4. Java 4
    Java个人总结4对象三大特性封装、继承、多态面向对象.以类的方式组织代码,以对象的组织(封装)数据对象内存分析多态存在条件有继承关系子类重写父类方法父类引......
  • 低代码平台amis学习 四:一个表单添加多个按钮,不同按钮触发不同请求
    通过上一节的学习,了解到如何在amis表单中发送网络请求,本文继续处理一种场景:一个表单中有多个按钮,点击不同按钮时,可以触发不同的网络请求回想一下,在之前的表单配置中,发送......
  • 学习日记 Day3. Java 3
    title:Day3Java3date:2022-08-2922:20:14tags:JavaJava个人总结3位运算符位运算效率极高。A=00111100B=00001101---------------------------A&B......
  • UE4 C++学习 浅析UProperty属性说明符
    本文就UProperty是什么?以及UProperty怎么用?做一个简单的总结。什么是UPROPERTY?首先看下官方的解释:  感觉还是比较模糊没看懂有什么用,我们接着往下看 要知道UPR......
  • [ROS学习] 12.参数的使用与编程方法
    笔记参考:【ROS学习笔记】12.参数的使用与编程方法内容参考:基于B站ROS公开课:【古月居】古月·ROS入门21讲更多详情:http://wiki.ros.org/Parameter%20Server本节说明至......
  • 学习:python进阶 匿名函数,内置函数filter
               enumerate内置函数 ......