多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

基于百度网盘的自动化测试方案设计

更新时间:2022-04-07 09:30:08 作者:多测师 浏览:287

  一、概述

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

  【测试工具】selenium、requests

  【脚本语言】Python

  【运行环境】Windows

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

基于百度网盘的自动化测试方案设计

  二、上传测试用例

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

  预置条件: 生成指定数量和大小的测试文件(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万个文件

  这样可以在平台上生成即可,能在一定程度上提升测试效率。

  以上内容为大家介绍了基于百度网盘的自动化测试方案设计,本文由多测师亲自撰写,希望对大家有所帮助。了解更多自动化测试相关知识:https://www.aichudan.com/xwzx/

联系电话

17727591462

返回顶部