案例故事: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
也可關注“武散人”微信訂閱號,隨時接受文章推送,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/95171.html
標籤:Python
上一篇:Python預測2020高考分數和錄取情況可能是這樣
下一篇:Mac部署spark2.4.4
