基于excel的自動化框架
設定項目文件大致結構

-
atp/: 項目名 -
conf/:存放配置文件
-
data/:存放sql文件
-
lib/: 存放項目的所有源代碼。 -
logs/:存放日志文件
-
uploads/:存放下載的文件
-
start.py: 程序啟動腳本 -
readme.txt: 項目說明文件。 - case/:存放用例表
理清思路
基本思想與原則A:
數據很多,就放到一個列表或字典里;
用for語句,處理一條數據即可。
基本思想與原則B:
考慮是否傳參,如何傳參。
一般把要處理的對象作為參數傳入。
1.有多個用例表,取所有的表到一個大列表d_all_excel中。for循環,處理一個表abs_excel先。
d_all_excel = glob.glob(os.path.join(case_path,'*.xls'))
2..一個表中有多條用例,取表中的用例到一個大列表中all_cases中.
(表的讀寫)
# all_cases = [[url,method,data:dict,check],[url,method,data:dict,check],...] ;
book = xlrd.open_workbook(abs_excel)
sheet = book.sheet_by_index(0)
for case in range(1,nrows):all_cases.append(sheet.row_values(i)[4:8])
3.用例數據處理:for循環,處理一條用例case先。
case作為參數入參。case = [url,method,data:dict,check]
序列解包;
url需要拼接為完整的接口地址: url = urljoin(server_url,url)
難點:data不僅要參數化: for p,func in func_map.items(): if p in data: data.replace(p,func())
func_map = {
'<phone>': f.phone_number, #生成電話的
'<ssn>': f.ssn,
'<email>': f.email,
'<name>': f.name,
'<username>': f.user_name,
'<bank_no>': f.credit_card_number,
'<password>': f.password,
'<addr>': f.address
} #這兒的f是faker.Faker()
data還要取成字典:
4.訪問接口,拿到返回數據response和res_reason, satate('成功,失敗')。
分get和post,需要傳參url,data,header. 后倆個不是必傳參數,可以默認為None;
沒返回數據時,拿不到json, 處理下異常;
5.難點:校驗返回的數據和預期結果。 檢查點 如 erron = 2001
根據預測數據檢查點的key,來獲取實際返回數據的rea_value;
(jsonpath模糊匹配)
[key,seq,value]
code = '%s %s %s'%(self.convert_type(real_value),seq,self.convert_type(value)) #生成比較實際結果和語氣結果的代碼
status = eval(code) #用eval來執行生成代碼,獲取到執行的結果
將預測數據檢查點的value,用其運算符,與rea_value比較。所有檢查點都True即成功。
注意:nt和float不能比較。字符不加引號,就是變量,變量不能比較。try except
6.將校驗結果寫入表中。
列表數據寫入表格;
表格存放到data里,避免與case混一起。
7.將表通過郵件發送。
處理下異常,網不好等很容易失敗
8.串通好流程。
9.提高效率,單線程和多線程

浙公網安備 33010602011771號