為了減小維護成本:
1.UI自動化測試需要有較為穩定的環境
2.代碼設計合理,那么我們就需要面向對象的設計一個框架,將重復的代碼模塊化
一、首先總結一下 UI自動化大概要哪些模塊
1.config(配置文件):用來存放配置文件(YML,XML,HTML。。。)
2.data(數據文件):存放測試數據等
3.drivers(驅動):Chromedriver,IEdriver
4.log(日志文件):打印測試log
5.report(報告):生成HTML測試報告
6.test(測試用例):寫TestCase調用其他模塊中的方法
7.utils(公共方法):寫調用config、data、log、report等其他模塊的方法
8.后續可自己增加其他模塊,比如針對某類型元素的獲取,page中元素的定位等
二、結合起來運用
首先如果我們沒有框架的話, 寫一個testcase可以直接寫到一個class中,甚至不用class,甚至連def都可以不用就實現了一個case;
但是,萬一下次又用到了同樣的功能,需要寫同樣的內容怎么辦呢???甚至它和之前的case只有一點點不一樣的話呢???我們需要不斷的復制粘貼並且修改;
那么我們這里需要用到class來實現不同模塊之間的調用
1、我們需要在utils方法中寫入一些基本方法,實現對其他模塊的調用
1)、file_reader.py(讀取文件):我們上面描述的框架中包含了config中的YML文件(或者其他)、data中的Excel文件,
config---YML:
1 import os 2 3 class YamlReader(object): 4 def __init__(self,yaml): 5 #有yaml文件就返回文件,沒有就報異常 6 if os.path.exists(yaml): 7 self.yaml = yaml 8 else: 9 raise FileNotFoundError("yaml文件不存在!") 10 self._data = None 11 12 @property #這里需要了解yaml返回的內容格式等信息 13 def data(self): #調用yaml文件中的內容data 14 if not self._data: 15 with open(self.yaml,'rb') as f: 16 self._data = list(yaml.safe_load_all(f)) 17 return self._data
data--Excel:
1 import os 2 import xlrd 3 4 class ExcelReader(object): 5 #title_line =True 判斷是否有標題,為True時有標題 6 def __init__(self,excel,sheet=0,title_line=True): 7 if os.path.exists(excel): 8 self.excel = excel 9 else: 10 raise FileNotFoundError("Excel文件不存在!") 11 12 self.sheet = sheet 13 self.title_line = title_line 14 self._data = list() 15 16 @property 17 def data(self): 18 if not self.data: 19 workbook = open_workbook(self.excel) 20 #獲取sheet 21 if type(self.sheet) not in [int,str]: 22 raise SheetTypeError('Please pass in <type int> or <type str> not {}'.format(type(self.sheet))) 23 elif type(self.sheet)==int: 24 sheet = workbook.sheet_by_index(self.sheet) 25 elif type(self.sheet)==str: 26 sheet = workbook.sheet_by_name(self.sheet) 27 28 if self.title_line: #獲取data值,有title為dict,沒有title為list 29 title = sheet.row_value() #第一行定義為title 30 for col in range(1,sheet.nrows): 31 self._data.append(dict(zip(title,sheet.row_values(col)))) 32 else: 33 for col in range(0,sheet.nrows): 34 self._data.append(sheet.row_values(col)) 35 return self._data
未完待續。。。。。