热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python进行接口压力测试(1秒1000个请求)

需求需要对接口进行压力测试,测试其最大并发是多少python代码importjsonimportrequestsimporttimeimportconcu

需求


  1. 需要对接口进行压力测试,测试其最大并发是多少

python代码

import json
import requests
import time
import concurrent.futures
import threadingSUCCESS = 0
FAIL = 0;def Api(name,pwd):registerUrl = 'http://localhost:8001/api/UserInfo/Login'data = {'name':name,'password':pwd}paramData = json.dumps(data)headers = {'Content-Type':'application/json;charset=utf-8'}try:response = requests.post(registerUrl,data=paramData,headers=headers,timeout=3)resObj = json.loads(response.text)except Exception as ex:global FAILFAIL += 1print('失败次数={}'.format(FAIL))print(str(ex))finally:global SUCCESSSUCCESS += 1# resObj = json.loads(response.text)# print((resObj['data']['identifier'])) class MyThread(threading.Thread):'''线程类'''def __init__(self,name,pwd):threading.Thread.__init__(self)self.name = nameself.pwd = pwddef run(self):'''线程创建后会直接运行run函数'''Api(self.name,self.pwd)class PressuerTest:def simple(self,num):'''单线程,不做任何处理'''for i in range(num):name = "gagag" + str(i)pwd = 'passwrodtest'Api(name,pwd)def _BatchRegister(self,num):name = "gagag" + str(num)pwd = 'passwrodtest'Api(name,pwd)def _BatchRegisterAll(self,numList):'''并发这里创建一个线程池,总共有5个线程可以分配使用executor.map()与map()函数类似,表示对sites中的每一个元素,并发地调用函数'''with concurrent.futures.ThreadPoolExecutor(max_workers=80) as executor:executor.map(self._BatchRegister, numList)def mult(self,num):'''线程池'''numList = []for i in range(num):numList.append(i)self._BatchRegisterAll(numList)def newMultThread(self,num):'''新建多个线程'''threadArr = []for i in range(num):name = "newMultThread_" + str(i)pwd = 'pwd'thread = MyThread(name,pwd)thread.start()threadArr.append(thread)if __name__ == '__main__':startTime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))pre = PressuerTest()# pre.simple(100);# pre.mult(100);pre.newMultThread(2000)endTime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))print('开始时间:{}'.format(startTime)) print('结束时间:{}'.format(endTime))

总结


代码中一共使用了3种方式取执行压力测试,


  1. 单线程明显的会慢很多
  2. 多线程的采用线程池的话也达不到1秒1000个请求,会在一个线程执行完才会走到下一个线程
  3. 每个请求一个线程可以达到效果,线程会很快启动完,可以达到1秒1000个的高并发量(也可以更高)

额外因素


  1. 客户端的设置的超时时间会对并发数量有影响。
  2. 服务器的MinRequestBodyDataRate也会有影响(针对.netCore)

推荐阅读
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • python限制递归次数(python最大公约数递归)
    本文目录一览:1、python为什么要进行递归限制 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文介绍了使用Python编写购物程序的实现步骤和代码示例。程序启动后,用户需要输入工资,并打印商品列表。用户可以根据商品编号选择购买商品,程序会检测余额是否充足,如果充足则直接扣款,否则提醒用户。用户可以随时退出程序,在退出时打印已购买商品的数量和余额。附带了完整的代码示例。 ... [详细]
author-avatar
脸皮乃身外之物
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有