案例故事:Android手機音視頻圖片解碼播放測試,有將近上千條用例, 包含了不同的音視頻圖片文件,每條用例都至少對應了一個測試資源文件。 整個測試資源倉庫,將近100G,一些視頻比如High Profile 5.2規格的,一個就500M, 如果每次測試都需要adb push導入這麼多測試資源文件到 ...
案例故事:Android手機音視頻圖片解碼播放測試,有將近上千條用例,
包含了不同的音視頻圖片文件,每條用例都至少對應了一個測試資源文件。
整個測試資源倉庫,將近100G,一些視頻比如High Profile 5.2規格的,一個就500M,
如果每次測試都需要adb push導入這麼多測試資源文件到系統,很費時間,
且系統載入這麼多媒體文件,經常出現卡死,反應不過來的情況。
其實每一輪的測試重點及對應的測試用例是不同的,
如果只挑選出當前待測試用例的測試資源文件,則可以減少adb push導入的時間,
也可以減少系統因載入過測試資源媒體文件而出現的卡死反應慢等問題,
所以我們要根據測試用例,選擇性的導入測試資源到Android系統!
準備階段
- 所有的媒體文件應該存放在一個總的“倉庫”下,比如All_Resources文件夾下。
- 測試用例的Excel表格裡,至少是需要有一列用於標記每個用例對應“測試資源”
- 只要解析測試用例Excel表格裡的標記的“媒體測試文件夾”,然後去All_Resources文件夾里對應匹配,匹配成功的,複製到一個Target_Resources文件夾下。
Python批處理腳本形式
記住批處理腳本的精髓:批量順序執行語句,
以下腳本,All_Resource文件夾必須和Python腳本在同一個路徑下。
# coding=utf-8
import os
import shutil
import openpyxl
# 定義常量
TESTCASE_EXCEL = "TestCase.xlsx" # 測試用例文件
CASE_RESOURCE_COL = 7
curdir = os.getcwd()
# 測試資源總倉庫文件夾
all_resource_folder = os.path.join(curdir, "All_Resources")
# 目標資源文件夾, 即輸出文件夾
target_resource_folder = os.path.join(curdir, "Target_Resources")
# 如果沒有Target_Resources這個文件夾,則創建這個文件夾
if not os.path.exists(target_resource_folder):
os.mkdir(target_resource_folder)
# 先刪除Target_Resource這個文件夾下的所有文件,確保每次這個文件夾每次都是根據最新的用例生成的。
shutil.rmtree(target_resource_folder)
wb = openpyxl.load_workbook(TESTCASE_EXCEL)
ws = wb.active
rows = ws.max_row
for i in range(2, rows + 1):
case_folder = ws.cell(row=i, column=CASE_RESOURCE_COL).value # 遍歷第7列
resource_folder_path = os.path.join(all_resource_folder, case_folder)
target_folder_path = os.path.join(target_resource_folder, case_folder)
if os.path.exists(resource_folder_path):
# 複製文件夾
shutil.copytree(resource_folder_path, target_folder_path)
print("測試資源已經複製到%s文件夾下了" % target_resource_folder)
os.system("pause")
Python面向過程函數形式
以下腳本,可自定義修改用例Excel文件,且可自定義All_Resources文件夾的路徑,
沒說一定要本Python腳本在同一個路徑下,其代碼可重塑性,比批處理腳本形式更強。
# coding=utf-8
import os
import shutil
import openpyxl
# 定義常量
CASE_RESOURCE_COL = 7
def select_resource_by_case(case_excel, resource_path):
'''根據測試用例挑選測試資源'''
# 定義用於存放模板資源文件的文件夾'''
target_resource_folder = os.path.join(curdir, "Target_Resources")
# 如果沒有Target_Resources這個文件夾,則創建這個文件夾
if not os.path.exists(target_resource_folder):
os.mkdir(target_resource_folder)
# 先刪除Target_Resource這個文件夾下的所有文件,確保每次這個文件夾每次都是根據最新的用例生成的。
shutil.rmtree(target_resource_folder)
wb = openpyxl.load_workbook(case_excel)
ws = wb.active
rows = ws.max_row
for i in range(2, rows + 1):
case_folder = ws.cell(row=i, column=CASE_RESOURCE_COL).value # 遍歷第7列
resource_folder_path = os.path.join(resource_path, case_folder)
target_folder_path = os.path.join(target_resource_folder, case_folder)
if os.path.exists(resource_folder_path):
# 複製文件夾
shutil.copytree(resource_folder_path, target_folder_path)
print("測試資源已經複製到%s文件夾下了" % target_resource_folder)
# 其實測試資源總倉庫文件夾的Path是可以自定義的
curdir = os.getcwd()
# 測試資源總倉庫文件夾
all_resource_folder = os.path.join(curdir, "All_Resources")
select_resource_by_case("TestCase.xlsx", all_resource_folder)
os.system("pause")
Python面向對象類形式
以下腳本,可自定義修改用例Excel文件,且可自定義All_Resources文件夾的路徑,
沒說一定要本Python腳本在同一個路徑下,且相對與面向過程函數形式,
其還可以單獨再拎出一個函數來:self.create_target_folder()函數,
但是面向過程函數形式,是無法拎出這麼一個函數來的,因為target_resource_folder變數無法作用於2個不同函數。
而面向對象類形式,self.target_resource_folder可作用於類內的各個函數。
# coding=utf-8
import os
import shutil
import openpyxl
# 定義常量
CASE_RESOURCE_COL = 7
class ResourceSelecter(object):
def __init__(self, resource_path):
self.resource_path = resource_path
self.target_resource_folder = None
self.create_target_folder()
def create_target_folder(self):
'''創建用於存放模板資源文件的文件夾'''
self.target_resource_folder = os.path.join(os.getcwd(), "Target_Resources")
# 如果沒有Target_Resources這個文件夾,則創建這個文件夾
if not os.path.exists(self.target_resource_folder):
os.mkdir(self.target_resource_folder)
# 先刪除Target_Resource這個文件夾下的所有文件,確保每次這個文件夾每次都是根據最新的用例生成的。
shutil.rmtree(self.target_resource_folder)
def select_resource_by_case(self, case_excel):
'''根據測試用例挑選測試資源'''
wb = openpyxl.load_workbook(case_excel)
ws = wb.active
rows = ws.max_row
for i in range(2, rows + 1):
case_folder = ws.cell(row=i, column=CASE_RESOURCE_COL).value # 遍歷第7列
resource_folder_path = os.path.join(self.resource_path, case_folder)
target_folder_path = os.path.join(self.target_resource_folder, case_folder)
if os.path.exists(resource_folder_path):
# 複製文件夾
shutil.copytree(resource_folder_path, target_folder_path)
print("測試資源已經複製到%s文件夾下了" % self.target_resource_folder)
if __name__ == '__main__':
# 測試資源總倉庫文件夾
all_resource_folder = os.path.join(os.getcwd(), "All_Resources")
r_obj = ResourceSelecter(all_resource_folder)
r_obj.select_resource_by_case("TestCase.xlsx")
os.system("pause")
練手素材下載
包括:
- 一個All_Resources測試資源文件夾
- 兩份測試用例,不同的用例,可以生成不同的測試資源在Target_Resources文件夾內
- 一個select_resource.py腳本
跳轉到自拍教程官網下載
武散人出品, 請放心下載並使用。
運行方式
- 從伺服器里導出測試用例文件,或者本來的測試用例Excel文件
- 確保導出來的測試用例有一列“測試資源”,並對每個用例做了測試資源文件夾的標記
- 必要的話修改“測試資源”列號,修改測試用例Excel文件名,修改All_Resources資源文件夾路徑
- 保存為select_resource.py, 雙擊運行或者python select_resource.py運行
- 則最終你會在當前路徑下看到一個Target_Resources文件夾生成,內含當前這份測試用例需要用到測試資源。
小提示:其實All_Resources文件夾,可以是本地的,也可以是區域網網路的共用文件夾,
之前我們項目將全部的測試資源,都放到了//sharefolder/All_Resources路徑下,
經過測試,可以從以上網路共用文件夾里成功取出資源文件來。
更多更好的原創文章,請訪問官方網站:www.zipython.com
自拍教程(自動化測試Python教程,武散人編著)
原文鏈接:https://www.zipython.com/#/detail?id=e19b40b9835c4cdb94d453dae834cb71
也可關註“武散人”微信訂閱號,隨時接受文章推送。