

基于百度网盘的自动化测试方案设计 - hello-real
source link: http://www.cnblogs.com/fightever/p/7622408.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

文件上传自动化测试方案
一、概述
【测试地址】: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 os 3 import time 4 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页面上传到服务器
首先是登录脚本,对webdriver看不懂的同学先看我的另外一篇帖子:http://www.cnblogs.com/fightever/p/6867619.html
1 # -*- coding:utf-8 -*- 2 from WebDriver.webdriver import Driver 3 from selenium.webdriver.common.by import By 4 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 Driver 3 from selenium.webdriver.common.by import By 4 from File.create import create_txt 5 from webpage.LoginPage.login import Login 6 import os 7 8 OVER_TIME = 10 9 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 Driver 3 from webpage.LoginPage.login import Login 4 from packages.selenium.webdriver.common.by import By 5 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 Driver 3 from webpage.LoginPage.login import Login 4 from webpage.ListPage.list import List 5 from File.create import create_txt 6 from webpage.UploadFile.upload import Upload 7 import unittest 8 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做接下来的测试
百度网盘有提供第三方开发者平台:https://pan.baidu.com/platform/read;有兴趣的同学可以了解下
四、扩展及丰富系统
为了方便多人使用,可以用Django做一个测试平台出来,用来准备测试数据或管理测试用例,比如:
1、测试任务中需要20个文件的分享地址
2、需要测试某个操作的性能,需要50万个文件
这样可以在平台上生成即可,能在一定程度上提升测试效率,有兴趣的朋友自己实现或关注我,下期奉上!
Recommend
-
83
本文将以一款超简单的博客应用为例子,介绍如何使用 Htte 进行 API 接口的自动化测试
-
47
背景 为了充分利用云测试平台维护的设备,提升空闲设备使用率,开展自动化测试替代部分回归测试、重复性测试和多设备兼容测试,同时满足如下几种类型的自动化测试需求: 随机测试(monkey、随机操作指令):...
-
18
本文作者通过Knn算法进行了一次用户判断预测的流程,文章为作者根据自身经验所做出的总结,希望通过此文能够加深你对Knn算法的认识。
-
16
如今无论大公司还是小公司都越来越重视测试质量。并且前端领域越来越繁荣,前端工程也越来越复杂,纯靠人力手工测试已经显得有些力不从心并且更容易出错。因此在项目中引入 BDD 理念进行自动化 UI 测试,让项目质量可以通过自动化工具来保...
-
15
知乎移动端云测试平台实践(三)—— 自动化测试方案设计和实现陈康康CV工程师背景
-
7
[本文结构] 这篇里面主要介绍一下使用Instrumentation框架来进行自动化测试时的测试工程的结构和组成,以及运行自动化测试时的执行原理。 在之前的文章中提到过,基于In...
-
3
在上一篇《APP...
-
11
市面上常见的有,2pc/3pc、tcc、saga等常见的分布式事务解决方案,但是实际实施起来框架比较重,设计开发比较繁琐,不易于快速开发上手。本文提供一种基于柔性事务设计的简单易上手的分布式事务设计方案,用于解决常见的分布式事务常见场景。
-
8
2023-05-23 09:04 百度网盘企业版将基于文心大模型升级三大应用 据 36 氪报道,百度智能云网盘产品部总经理吴天昊在文心大模型技术交流会上表示,百度网盘企业版将基于文心大模型升级三大企业应用,包括智能文件管理、智能知...
-
6
百度网盘推出基于文心大模型的智能助理“云一朵” ...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK