文件上传自动化测试方案(超详细)

一、概述

【测试地址】:https://pan.baidu.com

【测试工具】:selenium、requests

【脚本语言】:Python

【运行环境】:Windows

百度网盘作为文件存储及分享的平台,核心功能大部分是对文件的操作,如果要对它进行自动化测试,优先覆盖的就是上传、分享、复制功能

测试方案的大致结构如下:

图 1-1 系统流程图

二、上传测试用例

以文件上传功能为例,测试用例描述如下:

预置条件: 生成指定数量和大小的测试文件(txt、csv等)

操作步骤:1、用户登录

     2、遍历生成的文件所在的文件夹,得到所有的文件路径

     3、通过给FileUpload对象循环发送文件路径完成上传操作

预期结果:所有文件上传成功,查询文件信息显示正确

同时,在这我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看就行,希望对你有所帮助!【公众号:互联网杂货铺】免费领取软件测试资料!

软件测试工程师大忌!盲目自学软件测试真的会毁终生,能救一个是一个......

 

三、每个步骤的具体实现

1、生成指定数量和大小的测试文件:

以txt为例,其他文件(csv、word、pdf、jpg等)生成方式类似,可以网上找相关的方法和第三方库

 1 # -*- recoding:utf-8 -*-2 import os3 import time4 5 PATH = "D:/test_data/"6 7 8 def create_txt(path=PATH, file_num=1, file_size=8):9     """
10     :param path: 测试文件的存放路径
11     :param file_num: 需要生成的数量
12     :param file_size: 每个文件的大小,以KB为单位
13     """
14     if not os.path.exists(path):
15         os.mkdir(path)
16     for i in range(file_num):
17         file_name = "test_txt_"+str(i)+".txt"
18         data = "test_t"+str(time.localtime())
19         with open(os.path.join(path, file_name), 'w') as f_obj:
20             for j in range(8*file_size):
21                 f_obj.write(data)
22         print "create file: test_txt_(0-%d).txt in path %s success, file size: %sKB" % (file_num, path, file_size)
23 
24 
25 if __name__ == "__main__":
26     # 生成包含不同文件大小的文件夹
27     for i in range(10):
28         path = "D:/test_data/" + str(i)
29         create_txt(path=path, file_num=i, file_size=5*1024*i)

2、使用selenium通过web页面上传到服务器

首先是登录脚本

 1 # -*- coding:utf-8 -*-2 from WebDriver.webdriver import Driver3 from selenium.webdriver.common.by import By4 5 6 class Login():7 8     def __init__(self, user_name="admin", pwd="admin@123"):9         self.page = Driver()
10         page = self.page
11         page.start()
12         self.account_login_btn = page.find_element(By.LINK_TEXT, u"帐号密码登录")
13         self.account_text = page.find_element(By.ID, "TANGRAM__PSP_4__userName")
14         self.pwd_text = page.find_element(By.ID, "TANGRAM__PSP_4__password")
15         self.login_btn = page.find_element(By.ID, "TANGRAM__PSP_4__submit")
16         self.login(user_name, pwd)
17 
18     def login(self, user_name, pwd):
19         self.account_login_btn.click()
20         self.account_text.clear()
21         self.account_text.send_keys(user_name)
22         self.pwd_text.clear()
23         self.pwd_text.send_keys(pwd)
24         self.login_btn.click()
25         print "login success"
26 
27 
28 if __name__ == "__main__":
29     # 将XXX换成自己注册的百度网盘账号
30     Login("XXX", "XXX")

上传文件脚本:

1 # -*- coding:utf-8 -*-2 from WebDriver.webdriver import Driver3 from selenium.webdriver.common.by import By4 from File.create import create_txt5 from webpage.LoginPage.login import Login6 import os7 8 OVER_TIME = 109 
10 
11 class Upload(object):
12 
13     def __init__(self, path):
14         self.page = Driver()
15         self.upload_file(path)
16 
17     def send_path(self, path):
18         for i in range(OVER_TIME):
19             try:
20                 self.page.find_element(By.NAME, "html5uploader").send_keys(path)
21                 return True
22             except Exception, e:
23                 print e
24 
25     def upload_file(self, path, file_num=3):
27         for root, dirs, files in os.walk(path):
28             for f_obj in files:
29                 self.send_path(os.path.join(path, f_obj))
30 
31 
32 if __name__ == "__main__":
33     Login("XXX", "XXX")
34     Upload("D:\\test_data")

大部分网站的上传控件使用的FileUpload对象,只要在页面找到上传控件的id或name等属性,通过给使用send_keys给控件发送文件在本地的路径,就能自动上传

百度的上传控件(这里使用的是name属性“html5uploader”):

3、上传结果检查,有两种检查方法:

1、检查上传时右下角的传输状态,通过上传成功标志的个数来判断是否上传完成及成功

2、在文件列表的中判断是否存在某个文件,代码实现如下:

 1 # -*- coding:utf-8 -*-2 from WebDriver.webdriver import Driver3 from webpage.LoginPage.login import Login4 from packages.selenium.webdriver.common.by import By5 6 7 class List(object):8 9     def __init__(self):
10         self.page = Driver()
11 
12     @property
13     def checkbox(self):
14         return self.page.find_elements(By.CLASS_NAME, "EOGexf")
15 
16     @property
17     def file_num(self):
18         return len(self.checkbox)
19 
20     @property
21     def file_name(self):
22         file_class = self.page.find_elements(By.CLASS_NAME, "nnmz6W8")
23         num = len(file_class)
24         name = []
25         for i in range(num):
26             file_name = file_class.__getitem__(i).get_attribute("title")
27             name.append(file_name)
28         return name
29 
30     def select(self, name="test_txt_1.txt"):
31         """
32         选中列表中的某个文件
33         :param name: 需要选中的文件名
34         """
35         for i in range(self.file_num):
36             check = self.checkbox.__getitem__(i)
37             file_name = self.file_name.__getitem__(i)
38             check.click()
39             if file_name == name:
40                 print file_name
41                 return True
42             else:
43                 check.click()
44         return False
45 
46 
47 if __name__ == "__main__":
48     Login("XXX", "XXX")
49     li = List()
50     li.select("test_file.txt")

 四、用例的管理

把main函数里面的操作步骤连起来就是测试用例了,当用例过多时,需要用框架来管理,目前比较流行的用例管理框架有RobotFramework、unittest,这里推荐unittest

 1 # -*- coding:utf-8 -*-2 from WebDriver.webdriver import Driver3 from webpage.LoginPage.login import Login4 from webpage.ListPage.list import List5 from File.create import create_txt6 from webpage.UploadFile.upload import Upload7 import unittest8 9 driver = Driver()
10 
11 
12 class TestCase(unittest.TestCase):
13 
14     @staticmethod
15     def setUpClass():
16         # 准备测试数据
17         create_txt(path="D:\\test_data2", file_num=10, file_size=50)
18 
19     def test_upload(self):
20         # 登录系统
21         Login("XXX", "XXX")
22         # 上传文件,upload方法后面少了一个wait_upload_finish()函数,可自行添加,如果想先看看效果,先time.sleep(20)
23         Upload("D:\\test_data2")
24         # 上传检查
25         li = List()
26         li.select("test_file.txt")
27 
28     def tearDown(self):
29         driver.quit()
30 
31     @staticmethod
32     def tearDownClass():
33         # 这个方法用来做一些清理工作,比如将已上传的文件删除
34         pass
35 
36     @staticmethod
37     def run_test():
38         suite = unittest.TestSuite()
39         # 此处只添加了一个用例,如果需要增加用例继续用addTest添加即可
40         suite.addTest(TestCase("test_upload"))
41         unittest.TextTestRunner().run(suite)
42 
43 if __name__ == "__main__":
44     TestCase.run_test()

五、使用requests完成接口自动化

做过UI自动化的同学一定会有这样的感受:

1、脚本运行慢,经常需要打开、关闭浏览器

2、经常出问题,维护需要消耗大量的精力,写了这么多用例没有发现几个BUG

所以现在大部分高自动化的童鞋都同意优先做接口的自动化测试,这里可以按照类似的思路实现接口自动化测试用例,还可以在UI自动化用例中引入接口脚本,

提升用例执行速度和减少维护工作,比如:需要测试分享功能,那可以通过调用接口来得到分享的URL,然后用selenium打开这个URL做接下来的测试

六、扩展及丰富系统

为了方便多人使用,可以用Django做一个测试平台出来,用来准备测试数据或管理测试用例,比如:

1、测试任务中需要20个文件的分享地址

2、需要测试某个操作的性能,需要50万个文件

这样可以在平台上生成即可,能在一定程度上提升测试效率,有兴趣的朋友自己实现或关注我,下期奉上!
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/224395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何一键打开系统属性,编辑环境变量

常规方法: ①右键此电脑→打开属性 ②在控制面版中→系统与安全→系统 对于以上方法,我的电脑都不行,右键属性没反应;点击系统也没反应,这时打开运行窗口(winR)→输入sysdm.cpl →就可以直接到…

Linux--Docker容器(最新)

这里写目录标题 安装Docker安装指令配置加速器 Docker简介名词解释作用run命令解读 操作常见命令命令的别名 数据卷简介数据卷命令使用 本地目录挂载问题发现问题解决二级目录二级目录 安装Docker 安装指令 如下文档 https://b11et3un53m.feishu.cn/wiki/Rfocw7ctXij2RBkShcu…

【教3妹学编程-算法题】反转二叉树的奇数层

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 3妹:“你不是真正的快乐, 你的…

开具实习证明:在线实习项目介绍

大数据在线实习项目,是在线上为学生提供实习经验的项目。我们希望能够帮助想要在毕业后从事数据科学类工作的学生更加顺利地适应从教室到职场的转换;也帮助那些在工作中需要处理数据、实现数据价值的其他职能的从业者高效快速地掌握每天都能用起来的数据…

SuperMap iClient3D for Cesium 实现鼠标移动选中模型并显示模型对应字段

SuperMap iClient3D for cesium 实现鼠标移动选中模型并显示模型对应字段 一、实现思路二、数据制作1. 计算出模型中心点并保存到属性表中2. 计算出模型顶部高程3. 模型数据切缓存4. 发布三维服务. 三、代码编写 作者:xkf 一、实现思路 将模型属性数据存储到前端&a…

深度学习环境配置

一、Anaconda安装 下载:从清华大学开源软件镜像下载 镜像网址 出现base即为安装成功: 检查显卡的驱动是否正确安装: (GPU可以显示出名称) GPU0是集显集成显卡是主板自带的显卡。 GPU1是独显即独立显卡&#xff0c…

[渗透测试学习] Codify - HackTheBox

首先nmap扫描端口 nmap -sV -sC -p- -v --min-rate 1000 10.10.11.239扫出来三个端口,22端口为ssh服务,80端口有http服务,3000端口为nodejs框架 尝试访问下80端口,发现页面重定向 将该域名添加到hosts里 sudo vim /etc/hosts 成…

el-table的复选框占满全格

el-table的复选框格子很小每次点击都点不到&#xff0c;又不想设置行点击&#xff0c;因为每次复制内容都会选中&#xff0c;实现效果是点击el-table的复选框单元格就可以选中 <template><div style"width: 60vw; margin: 10px;"><el-table :data&quo…

Java小案例-RocketMQ的11种消息类型,你知道几种?(延迟消息)

前言 上一节给大家讲了Rocket的顺序消息&#xff0c;这一节和大家聊一下延迟消息&#xff0c;关于顺序消息大家可以点下面这个链接直接看 RocketMQ的延迟消息 延迟消息 延迟消息就是指生产者发送消息之后&#xff0c;消息不会立马被消费&#xff0c;而是等待一定的时间之后…

十五 动手学深度学习v2计算机视觉 ——全连接神经网络FCN

文章目录 FCN FCN 全卷积网络先使用卷积神经网络抽取图像特征&#xff0c;然后通过卷积层将通道数变换为类别个数&#xff0c;最后通过转置卷积层将特征图的高和宽变换为输入图像的尺寸。 因此&#xff0c;模型输出与输入图像的高和宽相同&#xff0c;且最终输出通道包含了该空…

海思平台isp之ccm标定

文章目录 1、raw图采集2、ccm标定2.1、标定参数配置2.2、标定效果优化2.2.1、优化方式一2.2.2、优化方式二2.2.3、优化方式三1、raw图采集 raw图采集步骤及标准,请参考文章 《海思平台isp之ccm标定》。2、ccm标定 2.1、标定参数配置 (1)图像基本参数 (2)黑电平设置 (…

mac视频调色 DaVinci Resolve Studio 18 中文 for Mac

DaVinci Resolve Studio 18是一款功能强大、专业可靠的视频编辑软件&#xff0c;适用于各种规模的媒体项目制作。无论是独立制片人还是大型制片公司&#xff0c;都可以借助该软件进行高质量的视频创作和后期制作。 得编辑工作更加高效和灵活。 调色和色彩校正&#xff1a;软件…

国外博士论文下载网址

系列文章目录 前言 如果你想补充其他相关网址&#xff0c;请留言 一、pqdtcn 1.1 使用说明 浏览本数据库建议使用chrome浏览器&#xff01; ProQuest检索平台在今年暑假做了界面升级。为了使您能更快了解升级后的界面功能&#xff0c;ProQuest公司准备了中文版用户使用手册…

【CSS】前端点点点加载小点样式css动画过程实现

对话的 ... 加载动画&#xff0c;直接用 CSS 就可以实现&#xff0c;样式可以自己改&#xff0c;逻辑大差不差 <div class"loading-text"><span class"dot1"></span><span class"dot2"></span><span class&quo…

RabbitMQ入门案例

RabbitMQ 是目前比较主流的MQ消息队列中间件&#xff0c;下面简单总结RabbitMQ入门时所做的一些笔记 1.RabbitMQ 入门案例 需求&#xff1a;用 Java 编写两个程序。发送单个消息的生产者和接收消息并打印出来的消费者 1.1 添加依赖 <!--rabbitmq 依赖客户端--> <de…

C++中的reverse函数

1.实现反转数组。 //头文件 #include <algorithm> //使用方法 reverse(a, an);//n为数组中的元素个数 #include<cstdio> #include<iostream> #include<algorithm> using namespace std; int main() {int a[100];int n,k;cin >> n >> k; …

八大排序(插入排序 | 选择排序 | 冒泡排序)

在我们内存中我们一般会有一些没有顺序的数据&#xff0c;我们成为内排序&#xff0c;而今天分享八大排序的是时间复杂度为O&#xff08;N^2&#xff09;的插入排序&#xff0c;选择排序和教学意义比较强的冒泡排序。 插入排序 这是插入排序的动图&#xff0c;通过动图我们也…

Python3 中常见的数据类型

目录 数字(Number)总结 字符串(String)字符串运算符字符串格式化字符串的截取总结 List&#xff08;列表&#xff09;更新列表删除列表元素列表函数&方法总结 Tuple&#xff08;元组&#xff09;修改元组删除元组总结 Set&#xff08;集合&#xff09;Dictionary&#xff0…

3D点云广义零样本分类的递归循环对比生成网络笔记

1 Title Contrastive Generative Network with Recursive-Loop for 3D point cloud generalized zero-shot classification(Yun Hao, Yukun Su, Guosheng Lin, Hanjing Su, Qingyao Wu)【Pattern Recognition】 2 Conclusion This work aims to facilitate research on 3D poi…

【Spring Boot】内网穿透实现远程调用调试

文章目录 1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址 4.…