接口测试——并行上传文件
任务目标:用requests构造一个上传文件的接口测试,文件从一个文件夹里面取,可以并发上传多个文件
一、分解任务:
①使用requests构造一个上传文件的接口测试。
②实现遍历上传测试文件,作为并发上传的效率对比。
③实现多线程上传测试文件。
④从文件夹获取该文件夹中全部文件的文件名,并以列表的方式存储。
⑤对大数量的文件,实现指定线程数量的多线程上传。
⑥生成测试报告。
二、使用requests构造一个上传文件的接口测试。
①在cmd中输入pip install requests,安装测试所需的依赖
②调用requests中post方法,获取接口返回数据。
三、实现遍历上传测试文件,作为并发上传的效率对比。
创建testList,对testList中元素进行遍历。
url = 'http://xxx'
params = {'fileName':'fileName','fileExt':'fileExt'}
testList1=['fileName1','fileName2','fileName3','fileName4','fileName5']
#遍历上传:
print(ctime())
for i in range(len(testList1)):
files = {'file':open(testList1[i],'rb')}
r = requests.post(url,params,files=files)
print(i+1)
print("")
print(r.text)
print(ctime())
四、实现多线程上传测试文件。
①注意开头要声明 # -*- coding: UTF-8 -*- ,否则可能出现乱码
②创建线程容器
③遍历上传上传任务到线程容器
④启动进程
#封装send方法
def send(file):
files = {'file':open(file,'rb')}
r = requests.post(url,params,files=files)
print(r.text)
#多线程:
print(ctime())
threads = []
for file in testList2:
print(file+':')
t = threading.Thread(send(file))
threads.append(t)
if __name__ == '__main__':
#启动进程
for i in range(len(testList)):
threads[i].start()
for i in range(len(testList)):
threads[i].join()
print(ctime())
此时,已经能够对遍历和多线程方式的效率进行对比了。但由于数量太少,对比结果并不明显,从我的结果来看,大致速度提升了2S。 我们需要大量的测试文件来对比。
五、从文件夹获取该文件夹中全部文件的文件名,并以列表的方式存储
①获取文件名,以列表存储
#获取文件名
def file_name(path,testList):
for root, dirs, files in os.walk(path):
for file in files:
if os.path.splitext(file)[1] == '.xlsx':
testList.append(os.path.join(root, file))
②将大列表拆分成小列表
thread_num = [i for i in range(len(testList2))]
n = 5 #定义小列表长度
list_temp = [testList2[i:i+n] for i in range(0,len(testList2),n)]
六、对大数量的文件,实现指定线程数量的多线程上传
上面定义了小列表长度为5。这里使用了两个for循环,内层将小列表中的5个元素分配任务并装入线程容器,外层则对小列表进行遍历。(这里一定要注意启动进程后,一定要创建新的线程容器,否则会报错:RuntimeError: threads can only be started once)
threads = []
for temp in list_temp:
#填充线程容器
for file in temp:
print(file+':')
t = threading.Thread(target = send ,args = (file,))
threads.append(t)if __name__ == '__main__':
#启动进程
for i in range(len(temp)):
threads[i].start()
for i in range(len(temp)):
threads[i].join()
print('-------------------')
print(ctime())#新线程容器
threads = []
print(ctime())
通过对500个测试文档的转换效率的测试,得出多线程的速度大致是单线程的n(n为线程数)倍 ,理论测试数据量越大,越接近n值。n值的最优取值取决于计算机CPU单核的性能。
但针对于计算密集的CPU运算,则不适合采用多线程。假设单线程需要120S完成密集的运算工作,则多线程可能需要130S才能完成,原因是因为CPU的线程机制,具体什么机制百度有很详细的解释。而需要等待网络响应的操作则特别适合多线程,因为计算机的响应速度,导致单线程会浪费很多的CPU资源,这时候使用多线程则能非常合理的利用到浪费的CPU资源,从而极大的提升运行效率。
七、整合。
# -*- coding: UTF-8 -*-
import requestsfrom time import ctime,sleep
import threading
import osurl = 'http://xxx'
params = {'fileName':'xxx','fileExt':'xxx'}#文件路径
fileHomes1 = r"E:\\test\\excel1"
fileHomes2 = r"E:\\test\\excel2"#获取文件名
def file_name(path,testList):
for root, dirs, files in os.walk(path):
for file in files:
if os.path.splitext(file)[1] == '.xlsx':
testList.append(os.path.join(root, file))#上传:
def send(file):
print("")
files = {'file':open(file,'rb')}
r = requests.post(url,params,files=files)
print(r.text)#定义testList
testList1=[]
testList2=[]
#赋值
file_name(fileHomes1,testList1)
file_name(fileHomes2,testList2)
#拆分列表
thread_num = [i for i in range(len(testList2))]
n = 5 #定义小列表长度
list_temp = [testList2[i:i+n] for i in range(0,len(testList2),n)]print("遍历上传:")
print("----------------------------")
print(ctime())
print("----------------------------")
for i in range(len(testList1)):
print(i+1)
print("")
send(testList1[i])
print("")
print("----------------------------")
print(ctime())
print("----------------------------")print('\n\n\n')
#多线程上传
print("----------------------------")
print("多线程上传:")
print("----------------------------")
print(ctime())
print("----------------------------")
#线程容器
threads = []
for temp in list_temp:
#填充线程容器
for file in temp:
print(file+':')
t = threading.Thread(target = send ,args = (file,))
threads.append(t)if __name__ == '__main__':
#启动进程
for i in range(len(temp)):
threads[i].start()
for i in range(len(temp)):
threads[i].join()
print('-------------------')
print(ctime())
#新容器
threads = []
print('-------------------')
print(ctime())
print("----------------------------")
八、测试报告的生成
接口测试——并行上传文件相关推荐
- python 抓包 上传 文件_Python接口测试文件上传实例解析
接口测试中,上传文件的测试场景非常常见.例如:上传头像(图片).上传文件.上传视频等.下面以一个上传图片的例子为大家讲解如何通过 python 测试上传文件接口. 首先通过抓包分析上传文件接口的请求参 ...
- 像postman上传文件_90%的测试工程师是这样使用Postman做接口测试的……
postman介绍&测试准备 postman介绍:postman是一个开源的接口测试工具,无论是做单个接口的测试还是整套测试脚本的拨测都非常方便. 前期准备:测试前,需要安装好postman, ...
- python接口测试上传文件_python https 接口测试 上传文件
1.上传文件接口如何测试 参考: https://blog.csdn.net/qq_37049050/article/details/75286197 参考2:https://www.jianshu. ...
- JMeter接口测试示例(六)——上传文件
上传文件 功能描述 上传文件:向服务器(211.149.218)指定目录传送文件 请求地址 http://api.nnzhp.cn/uploadfile 请求方式 Post 入参 参数 数据类型(长度 ...
- 第10步 (1)logback.xml日志配置(2) ftp(上传文件)服务器配置(3) idea注入和自动编译配置(4)项目提交gitee(5)fe助手和restlet client
**************************************************************************************************** ...
- 上传文件显示进度条_文件上传带进度条进阶-断点续传
说明 1. 把文件按大小1M分割成N份 2. 每次上传时,告诉后台大文件的md5.当前第几份(从0开始).总共几份 3. 并行上传,前端同时开启5个请求进行传输增加速度 4. 上传失败或出错后,继续上 ...
- Spring boot上传文件(图片)到阿里云OSS(直接上传到应用服务器)
Spring boot上传文件(图片)到阿里云OSS(直接上传到应用服务器) 主要思路 上传图片的思路有两种: 第一种是上传到应用服务器,再由应用服务器上传到OSS.这种适合上传的文件较小,较为简单, ...
- 【Spring Boot】关于上传文件例子的剖析
目录 Spring Boot 上传文件 功能实现 增加ControllerFileUploadController 增加ServiceStorageService 增加一个Thymeleaf页面 修改 ...
- OkGo上传文件、图片的用法
在Android开发过程中,肯定会遇到与后端进行交互的地方.手机端与后端进行交互,难免会使用到OkGo.在最近的一个项目中,明明是按照官方教程写的代码,但是始终会报一个异常. 报错信息: networ ...
- ubuntu服务器ftp无法上传文件,ubuntu服务器上传文件ftp
ubuntu服务器上传文件ftp 内容精选 换一换 通过Web浏览器登录主机,提供协同分享.文件传输.文件管理和预置命令等功能.用户在主机上执行的所有操作,被云堡垒机记录并生成审计数据.协同分享指会话 ...
最新文章
- Oracle10g 回收站及彻底删除table : drop table xx purge
- KNN识别手写数字MNIST
- python 数据去重_python 对数据常用的几种去重方式
- php获取数据库不同,php – 从master数据库获取数据库凭据,然后连接到不同的数据库...
- Poj1218_THE DRUNK JAILER(水题)
- 编程语言对比 基本数据类型
- 网站日志分析工具:WebLog Expert Lite
- slitax 制定iso
- 分段Hermite插值推导
- 利用js+html做一个简单的体脂率计算
- chm文件打开中文乱码
- 明星IP资本局:风华秋实、巨星传奇再闯IPO
- [work] 如果看了此文你还不懂傅里叶变换,那就过来掐死我吧【完整版】
- 滑膜控制和粒子群优化算法
- 如何对市场进行深入了解,了解当前市场上的热销产品、消费者需求以及行业发展趋势?在哪里寻找专业报告、行业数据、市场分析文章等?
- HttpURLConnection源码分析
- a-H3X R4900 G2服务器安装redhat6.8
- JavaScript中this工作原理
- Word2010目录问题
- 快播画上句号,王欣转身区块链和AI,能否实现王者归来?