全套視頻便宜甩賣,web 接口 app自動化測試,python全棧自動化測試
目標
-
加深對自動化的理解
- 功能自動化:把現在手工做的東西,用代碼做出來
- 什么是自動化?建立在功能測試基礎上做的
- 什么時候做自動化?功能穩定時
- 自動化可以幫我們做哪些事情?回歸測試/比較穩定的功能/上線前快速檢查
- 最佳實現:在excel/數據庫準備好測試數據--用代碼讀取--直接進行測試--把結果存儲到excel/數據庫--并出具一份測試報告+jenkeins做一個集成平臺
-
項目需求分析
可行性分析:是否可做、是否穩定、優先級
項目背景:項目內容P2P背景
-
項目模塊:注冊、登錄、充值、提現、投資;業務邏輯:后臺添加數據 加標-審核-發標
-
接口文檔
- RESTful API返回結果說明:
{ "status":1,//接口執行狀態,1表示成功,0表示異常 "code":10001,//業務自定義狀態碼,無信息否為空字符串,status=1時,code為10001,表示成功,30204表示第3個模塊的第2個接口的第4個狀態碼,模塊:用戶1,標2,投資3,回款計劃4,流水記錄5 "data":{ //返回數據、對象、數組均可,為空統一設置為NULL,基于其他客戶端(如Java-Objective-C)對空值(null、nil、Null)的處理空值不便或容易產生異常,可根據具體業務和前后端約定空數組為[],空字典為{} "msg":"成功"http://該字段本次請求的業務、狀態描述信息,主要用于調試、測試等,status!=1時都應該有錯誤信息,無信息否為空字符串 } }
- 注冊接口
image- 登錄接口
image- 充值接口
image- 提現接口
image-
投資、競標接口
image
-
項目邏輯
-
實戰目標
注冊、登錄、充值、提現、投資
-
普及數據分離/代碼分離/文件分離的概念
- 數據分離
-
API_AUTO
項目名run.py
代碼執行入口-
common
公共類,大家都可使用(也可以叫tools
工具類)-
conf
放置配置文件xx.conf -
public
放置公共代碼
-
test_data
測試數據-
result
測試結果-
test_result
測試結果 -
test_report
測試報告 -
image
測試截圖 -
log
日志
-
-
- 數據分離
- 課堂作業
實戰遇到的問題
因為視頻的實戰項目是上課老師自己寫的,現在已經無法訪問,可以根據視頻的原理直接用自己公司的項目進行實戰。下面涉及代碼基本基于自己公司的代碼展示,適當打碼。同時,我們公司python使用2.7版本,后期語法上可能有少少差異。
大家也用自己公司的產品練手吧。
步驟:
- 引入requests模塊
- 發送get/post請求
- register、login、recharge接口,按單個用例請求,調通接口
- recharge接口需要cookies
注意點:
- headers、cookies是關鍵字,都要加s,不能隨便以此命名
- 獲取請求頭,res.request.headers
高級用法-會話
import requests
s=requests.session() #創建一個會話
logon_res=s.get(login_url,params=login_data) #login_data必須有個key,常用是params
recharge_res=s.post(recharge_url,recharge_data) #這里就不用傳cookies啦
print(recharge_res.json())
給類取別名
from API_AUTO.common.public.http_request import HttpRequest as ht
實例化遇到要寫類名HttpRequest
的地方,可以用ht
代替
說明
后面開始使用自己公司的代碼進行練手了,結合視頻的接口自動化測試的思想。隱藏一些公司的隱私信息
登錄接口:/login
body:{"user_phone": "1801923****", "device_model": "iphone7"}
user_phone 手機號
device_model 手機型號
寫run.py文件
from API_AUTO.common.public.http_request import HttpRequest #引入自己封裝的http請求
#登錄
payload = {"user_phone": "1801923****", "device_model": "iphone7"}
res=HttpRequest().http_request("/login","post",payload)
改造在run.py
文件中
-
通過列表
[]
管理測試數據為什么測試數據用列表嵌套字典的形式?列表嵌套其他的也可以,但是比如列表嵌套列表,那訪問時,就要通過索引值去訪問,但是列表嵌套字典,只需要通過他的key就可以去訪問
#run.py文件 #代碼執行的入口: from API_AUTO.common.public.http_request import HttpRequest import json def run(test_data): for item in test_data: #測試數據用一個list[]存儲,一個{}是一條用例 print ("正在測試的case是",item["title"]) res = HttpRequest().http_request(item["url"], item["method"],eval(item["payload"])) print res.json() #測試數據 test_data=[{"url":"/login","method":"post","payload": {"user_phone": "1801923****","device_model": "iphone7"},"title":"正確的登錄"}, {"url":"/login","method":"post","payload": {"user_phone": "1850171****", , "device_model": "iphone7"},"title":"黑名單登錄"}] #調用函數 run(test_data)
-
通過excel管理測試數據
為什么放在excel?數據更清晰,更方便管理

寫一個讀取excel的工具類,在學習excel操作時寫過,這次需要添加一個寫回數據的方法
```
from openpyxl import load_workbook
'''
操作excel
'''
class DoExcel:
def get_data(self,file_name,sheet_name):
wb=load_workbook(file_name)
sheet=wb[sheet_name]
test_data=[] #每條數據要存在列表里
for i in range(2, sheet.max_row+1):
sub_data={}
sub_data["case_id"] = sheet.cell(i, 1).value
sub_data["url"]=sheet.cell(i,2).value
sub_data["method"]=sheet.cell(i,3).value
sub_data["payload"]=sheet.cell(i,4).value
sub_data["title"]=sheet.cell(i,5).value
test_data.append(sub_data)
return test_data
def write_back_data(self,file_name,sheet_name,i,value):
wb=load_workbook(file_name)
sheet=wb[sheet_name]
sheet.cell(i,6).value=value
wb.save(file_name) #保存
```
改造`run.py`
```
from API_AUTO.common.public.http_request import HttpRequest
from API_AUTO.common.public.do_excel import DoExcel
def run(test_data):
for item in test_data:
print "正在測試的case是",item["title"]
res = HttpRequest("1.6.0", "android", "785c6fee0e4488ca412a5afc9a00e9d8").http_request(item["url"], item["method"],eval(item["payload"]))
print res.json() #python2.7的print不需要括號
DoExcel().write_back_data("test_data/test_data.xlsx","Sheet1",item["case_id"]+1,str(res.json()))
test_data=DoExcel().get_data("test_data/test_data.xlsx","Sheet1")
run(test_data)
```
難點解答
1)wb.save(file_name)
2)不同模塊不同的sheet比較好,寫在一個sheet里也可以通過添加module字段區分不同模塊
3)加一個登錄接口的請求、或者反射機制
4)弱一點比較好
5)write_back_data()
pandas處理excel
參考文檔:https://www.cnblogs.com/liulinghua90/p/9935642.html
安裝xlrd
安裝pandas
-
日常用法
import pandas df= pandas.read_excel("test_data.xlsx",sheet_name="Sheet1")#sheet_name不指定默認讀第一個sheet # df dataframe print df.values #所有數據,返回是嵌套列表 # 默認去掉字段名所在行,索引值從0開始 print df.ix[0].values #讀除去字段名的第1行,返回是一個列表 print df.ix[0,1] #讀除去字段名的第1行的第2列 print df.ix[:].values #也是讀取所有數據 print df.ix[:,["url"]].values #讀取指定列url #返回字典形式 print df.ix[0,["url","method","payload","title"]].to_dict() #第1行,指定列,以字典形式返回 print df.ix[0].to_dict() #第1行,不指定列,全部列輸出,以字典形式返回
-
讀取測試數據
import pandas df= pandas.read_excel("test_data.xlsx",sheet_name="Sheet1") test_data=[] for i in df.index.values: row_data=df.ix[1,["url","method","payload","title"]].to_dict() test_data.append(row_data) print (test_data)
注意:pandas需要關閉excel,否則會報錯找不到這個sheet_name