python学习笔记(threading性能压力测试)

又是新的一周

延续上周的进度 关于多进程的学习

今天实践下

初步设计的接口性能压力测试代码如下:

  1 #!/usr/bin/env python
  2 # -*- coding: utf_8 -*-
  3
  4 import threading
  5 import requests
  6 import time
  7 import re
  8 from time import sleep
  9
 10 # -------接口性能测试配置-------
 11 method = "post"
 12 # 接口类型
 13 url = "http://localhost:8081/swcw/back/sysLogin.action"
 14 # 接口地址
 15 data = {"username": "admin", "password": "123456"}
 16 # 接口参数
 17 thread_num = 20
 18 # 线程数
 19 one_work_num = 2
 20 # 每个线程循环次数
 21 loop_sleep = 1
 22 # 每次请求时间间隔
 23 response_time = []
 24 # 平均响应时间列表
 25 error = []
 26 # 错误信息列表
 27
 28
 29 class CreateThread:
 30     def __init__(self):
 31         pass
 32
 33     @classmethod
 34     def thread_api(cls):
 35         global results
 36         try:
 37             if method == "post":
 38                 results = requests.post(url, data)
 39             if method == "get":
 40                 results = requests.get(url, data)
 41             return results
 42         except requests.ConnectionError:
 43             return results
 44     # 接口函数
 45
 46     @classmethod
 47     def thread_response(cls):
 48         responsetime = float(CreateThread.thread_api().elapsed.microseconds) / 1000
 49         return responsetime
 50     # 获取响应时间 单位ms
 51
 52     @classmethod
 53     def thread_response_avg(cls):
 54         avg = 0.000
 55         l = len(response_time)
 56         for num in response_time:
 57             avg += 1.000 * num / l
 58         return avg
 59     # 获取平均相应时间 单位ms
 60
 61     @classmethod
 62     def thread_time(cls):
 63         return time.asctime(time.localtime(time.time()))
 64     # 获取当前时间格式
 65
 66     @classmethod
 67     def thread_error(cls):
 68         try:
 69             pa = u"个人信息"
 70             pattern = re.compile(pa)
 71             match = pattern.search(CreateThread.thread_api().text)
 72             if CreateThread.thread_api().status_code == 200:
 73                 pass
 74                 if match.group() == pa:
 75                     pass
 76             else:
 77                 error.append(CreateThread.thread_api().status_code)
 78         except AttributeError:
 79             error.append("登录失败")
 80     # 获取错误的返回状态码
 81
 82     @classmethod
 83     def thread_work(cls):
 84         threadname = threading.currentThread().getName()
 85         print "[", threadname, "] Sub Thread Begin"
 86         for i in range(one_work_num):
 87             CreateThread.thread_api()
 88             print "接口请求时间: ", CreateThread.thread_time()
 89             response_time.append(CreateThread.thread_response())
 90             CreateThread.thread_error()
 91             sleep(loop_sleep)
 92         print "[", threadname, "] Sub Thread End"
 93     # 工作线程循环
 94
 95     @classmethod
 96     def thread_main(cls):
 97         start = time.time()
 98         threads = []
 99         for i in range(thread_num):
100             t = threading.Thread(target=CreateThread.thread_work())
101             t.setDaemon(True)
102             threads.append(t)
103         for t in threads:
104             t.start()
105         # 启动所有线程
106         for t in threads:
107             t.join()
108         # 主线程中等待所有子线程退出
109         end = time.time()
110
111         print "========================================================================"
112         print "接口性能测试开始时间:", time.asctime(time.localtime(start))
113         print "接口性能测试结束时间:", time.asctime(time.localtime(end))
114         print "接口地址:", url
115         print "接口类型:", method
116         print "线程数:", thread_num
117         print "每个线程循环次数:", one_work_num
118         print "每次请求时间间隔:", loop_sleep
119         print "总请求数:", thread_num * one_work_num
120         print "错误请求数:", len(error)
121         print "总耗时(秒):", end - start
122         print "每次请求耗时(秒):", (end - start) / (thread_num * one_work_num)
123         print "每秒承载请求数(TPS):", (thread_num * one_work_num) / (end - start)
124         print "平均响应时间(毫秒):", CreateThread.thread_response_avg()
125
126
127 if __name__ == ‘__main__‘:
128     CreateThread.thread_main()
时间: 2024-10-05 06:42:43

python学习笔记(threading性能压力测试)的相关文章

python学习笔记(threading多线程)

博主昨天优化了接口框架想着再添加些功能 想到对接口的性能压力测试 在工作过程中之前都是使用的工具 如:loadrunner.jmeter 想着这次准备用python实现对接口的性能压力测试 首先要实现这个功能就要运用到python的threading模块 下面是自己学习摸索出来的代码: 1 #!/usr/bin/env python 2 # -*- coding: utf_8 -*- 3 4 import threading 5 import requests 6 from time impor

python   学习笔记 (核心)

python    学习笔记 (核心) Python解释器从头到尾一行接一行执行脚本 # -*- coding: UTF-8 -*-    //字符编码 不区分单引号和双引号,x='hello',x[0],x[-1]指最后一个字符,x[2:4]取子串, '''hello''' #hello三引号会保留文本输入时的换行符制表符等不需要转义,用于多行原样输入保存 'hello'+'world' #字符串拼接,'hello'*2 #字符串重复 help(fun) #帮助,help(module.met

OpenCV之Python学习笔记

OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书<OpenCV Computer Vision with Python>,于是就看一遍,顺便把自己掌握的东西整合一下,写成学习笔记了.更需要的朋友参考. 阅读须知: 本文不是纯粹的译文,只是比较贴近原文的笔记:         请设法购买到出版社出版的书,支持正版. 从书名就能看出来本书是介绍在Pytho

python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典

python学习笔记2--python文件类型.变量.数值.字符串.元组.列表.字典 一.Python文件类型 1.源代码 python源代码文件以.py为扩展名,由pyton程序解释,不需要编译 [[email protected] day01]# vim 1.py #!/usr/bin/python        print 'hello world!' [[email protected] day01]# python 1.py hello world! 2.字节代码 Python源码文件

Python学习笔记--未经排版

Python 学习笔记 Python中如何做到Print() 不换行 答:Print("输出内容",end='不换行的分隔内容'),其中end=后面为2个单引号 注:在Python 2.x中,Print "输出内容", 即在输出内容后加一逗号 Python中 is 和 == 的区别 答:Python中的对象包含三要素:id.type.value 其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值 is判断的是a对象是否就是b对象,是通过id来

python 学习笔记 6 -- 异常处理

当你的程序中出现某些 异常的 状况的时候,异常就发生了.例如,当你想要读某个文件的时候,而那个文件不存在.或者在程序运行的时候,你不小心把它删除了. 那么如果你是在IDE中运行,一个错误发生,异常会被打引出来,这便是未处理异常:当异常发生时,如果没有代码去关注和处理它,这些异常会传给置在Python中的缺省处理,他会输出一些调试信息并且终止运行.如果是在IDE中,这不是什么大事,但是如果是Python程序运行中的异常,它会导致整个程序终止,对于这些情况可以使用异常来处理. 1.try..exce

python 学习笔记 3 -- 数据结构篇下

5.引用 当你创建一个对象并给它赋一个变量的时候,这个变量仅仅 引用 那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存.这被称作名称到对象的绑定.eg. [python] view plaincopy # -*- coding: utf-8 -*- shoplist = ['apple', 'mango', 'carrot', 'banana'] print "we copy the shoplist to mylist directly \"with

python学习笔记十——异常处理

1.try: command except 错误类型,记录错误信息变量: command finally: command try...finally的用处是无论是否发生异常都要确保资源释放代码的执行.一般来说,如果没有发生错误,执行过try语句块之后执行finally语句块,完成整个流程.如果try语句块发生了异常,抛出了这个异常,此时就马上进入finally语句块进行资源释放处理.如下从几个细节讨论finally的特性. 1).try中的return: 当在try语句块中含有return语句

python学习笔记之函数总结--高阶函数以及装饰器

python学习笔记之函数总结--高阶函数以及装饰器 Python特点: 1.不是纯函数式编程(允许变量存在): 2.支持高阶函数(可以传入函数作为变量): 3.支持闭包(可以返回函数): 4.有限度的支持匿名函数: 高阶函数: 1.变量可以指向函数: 2.函数的参数可以接收变量: 3.一个函数可以接收另一个函数作为参数: 下面我将示例一些函数的写法以及使用,并说明python中函数的特性: 1.基本的高阶函数示例: #!/usr/bin/env python def func():