任务目标:用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 requests

from time import ctime,sleep
import threading
import os

url = '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("----------------------------")

八、测试报告的生成

接口测试——并行上传文件相关推荐

  1. python 抓包 上传 文件_Python接口测试文件上传实例解析

    接口测试中,上传文件的测试场景非常常见.例如:上传头像(图片).上传文件.上传视频等.下面以一个上传图片的例子为大家讲解如何通过 python 测试上传文件接口. 首先通过抓包分析上传文件接口的请求参 ...

  2. 像postman上传文件_90%的测试工程师是这样使用Postman做接口测试的……

    postman介绍&测试准备 postman介绍:postman是一个开源的接口测试工具,无论是做单个接口的测试还是整套测试脚本的拨测都非常方便. 前期准备:测试前,需要安装好postman, ...

  3. python接口测试上传文件_python https 接口测试 上传文件

    1.上传文件接口如何测试 参考: https://blog.csdn.net/qq_37049050/article/details/75286197 参考2:https://www.jianshu. ...

  4. JMeter接口测试示例(六)——上传文件

    上传文件 功能描述 上传文件:向服务器(211.149.218)指定目录传送文件 请求地址 http://api.nnzhp.cn/uploadfile 请求方式 Post 入参 参数 数据类型(长度 ...

  5. 第10步 (1)logback.xml日志配置(2) ftp(上传文件)服务器配置(3) idea注入和自动编译配置(4)项目提交gitee(5)fe助手和restlet client

    **************************************************************************************************** ...

  6. 上传文件显示进度条_文件上传带进度条进阶-断点续传

    说明 1. 把文件按大小1M分割成N份 2. 每次上传时,告诉后台大文件的md5.当前第几份(从0开始).总共几份 3. 并行上传,前端同时开启5个请求进行传输增加速度 4. 上传失败或出错后,继续上 ...

  7. Spring boot上传文件(图片)到阿里云OSS(直接上传到应用服务器)

    Spring boot上传文件(图片)到阿里云OSS(直接上传到应用服务器) 主要思路 上传图片的思路有两种: 第一种是上传到应用服务器,再由应用服务器上传到OSS.这种适合上传的文件较小,较为简单, ...

  8. 【Spring Boot】关于上传文件例子的剖析

    目录 Spring Boot 上传文件 功能实现 增加ControllerFileUploadController 增加ServiceStorageService 增加一个Thymeleaf页面 修改 ...

  9. OkGo上传文件、图片的用法

    在Android开发过程中,肯定会遇到与后端进行交互的地方.手机端与后端进行交互,难免会使用到OkGo.在最近的一个项目中,明明是按照官方教程写的代码,但是始终会报一个异常. 报错信息: networ ...

  10. ubuntu服务器ftp无法上传文件,ubuntu服务器上传文件ftp

    ubuntu服务器上传文件ftp 内容精选 换一换 通过Web浏览器登录主机,提供协同分享.文件传输.文件管理和预置命令等功能.用户在主机上执行的所有操作,被云堡垒机记录并生成审计数据.协同分享指会话 ...

最新文章

  1. Oracle10g 回收站及彻底删除table : drop table xx purge
  2. KNN识别手写数字MNIST
  3. python 数据去重_python 对数据常用的几种去重方式
  4. php获取数据库不同,php – 从master数据库获取数据库凭据,然后连接到不同的数据库...
  5. Poj1218_THE DRUNK JAILER(水题)
  6. 编程语言对比 基本数据类型
  7. 网站日志分析工具:WebLog Expert Lite
  8. slitax 制定iso
  9. 分段Hermite插值推导
  10. 利用js+html做一个简单的体脂率计算
  11. chm文件打开中文乱码
  12. 明星IP资本局:风华秋实、巨星传奇再闯IPO
  13. [work] 如果看了此文你还不懂傅里叶变换,那就过来掐死我吧【完整版】
  14. 滑膜控制和粒子群优化算法
  15. 如何对市场进行深入了解,了解当前市场上的热销产品、消费者需求以及行业发展趋势?在哪里寻找专业报告、行业数据、市场分析文章等?
  16. HttpURLConnection源码分析
  17. a-H3X R4900 G2服务器安装redhat6.8
  18. JavaScript中this工作原理
  19. Word2010目录问题
  20. 快播画上句号,王欣转身区块链和AI,能否实现王者归来?

热门文章

  1. 技术管理者需要认识管理活动的高杠杆率
  2. 强制推广鸿蒙系统,鸿蒙系统凭实力占市场,无需通过禁止安卓系统来推广
  3. 现在win7系统还能升级win10系统吗?win10系统怎么重装?
  4. w10桌面不显示计算机了,win10系统电脑开机后不显示桌面的详细方案
  5. “鹏城”伴你鹏程:下届全国人工智能大赛再会!
  6. 电话机上面的接头RJ11
  7. 移动数字化平台原来可以这样帮企业打造协同生态链
  8. GeckoView:Mozilla面向移动浏览器打造的渲染引擎
  9. 关于Win10资源管理器总是崩溃的问题解决方案
  10. 【C++】atomic简介