python压测接口_python的一个接口压测脚本

1 importrequests2 import queue #Queue模块中提供了同步的、线程安全的队列类,包括

3 #FIFO(先入先出)队列Queue,LIFO(后入先出)队列

4 #LifoQueue,和优先级队列PriorityQueue。这些队列都

5 #实现了锁原语,可在多线程通信中直接使用。

6 importthreading7 importtime8

9 status_code_list =[]10 exec_time =011 classMyThreadPool:12 def __init__(self, maxsize): #定义队列时有一个默认的参数

13 #maxsize, 如果不指定队列的长度,即manxsize=0,那么队列的长

14 #度为无限长,如果定义了大于0的值,那么队列的长度就是maxsize。

15 self.maxsize =maxsize16 self._pool =queue.Queue(maxsize)17 #maxsize设置队列的大小为pool的大小

18 for _ in range(maxsize): #为什么用一个下划线,因为实际上这

19 #里没用到这个变量,所以用一个符号就可以了。

20 self._pool.put(threading.Thread) #往pool里放线程数

21

22 defget_thread(self):23 returnself._pool.get()24

25 defadd_thread(self):26 self._pool.put(threading.Thread)27

28 defrequest_time(func):29 def inner(*args, **kwargs):30 globalexec_time31 start_time =time.time()32 func(*args, **kwargs)33 end_time =time.time()34 exec_time = end_time-start_time35

36 returninner37

38

39 defget_url(url):40 globalx,status_code_list41 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36',42 }43 response = requests.get(url,headers=headers)44 code =response.status_code45 status_code_list.append(code)46 print(code)47 returncode48

49

50 def get_count(_url='http://news.baidu.com/sports',_count=100): #:param count: 每个线程请求的数量

51 globalstatus_code_list,url,count52 for i inrange(count):53 get_url(url)54

55 defrequest_status():56 count_num =len(status_code_list)57 set_code_list =set(status_code_list)58 status_dict ={}59 for i inset_code_list:60 status_dict[i] =str(status_code_list).count(str(i))61 echo_str(count_num, set_code_list, status_dict)62

63 defecho_str(count_num,set_code_list,status_dict):64 print('=======================================')65 print('请求总次数:%s'%count_num)66 print('请求时长:%s秒'%int(exec_time))67 second_request = count_num/int(exec_time)68 print('每秒请求约:%s次'%int(second_request))69 print('状态码 | 次数')70

71 for k,v instatus_dict.items():72 print(str(k)+'|'+str(v))73 print('=======================================')74

75

76 @request_time77 def run(url,thread_num=10,thread_pool=10):78 '''

79 :param thread_num: 总共执行的线程数(总的请求数=总共执行的线程数*每个线程循环请求的数量)80 :param thread_pool: 线程池数量81 :param url: 请求的域名地址82 '''

83 globalx,status_code_list84 pool =MyThreadPool(thread_pool)85 for i inrange(thread_num):86 t =pool.get_thread()87 obj = t(target=get_count)88 obj.start()89 obj.join()90

91

92 if __name__ == '__main__':93 count = 10 #单个线程的请求数

94 url = 'http://baidu.com'

95 run(url,100,100)96 request_status()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值