1.能夠大致講一下你們接口自動化框架是怎么搭建的嗎?
好的,我們采用unittest和ddt數據驅動思想搭建測試框架,(對數據excel讀取、yaml配置、Requests接口請求、Re參數化、Pymysql數據庫效驗、日志等模塊實現封裝),其中,用
1.Openpyxl來處理excel,存儲測試數據(用例數據)
2.pyyaml來配置文件(configparse,pyyaml)
- Pymysql來連接mysql數據庫,執行sql數據,進行數據效驗
4.Requests請求庫,來向接口發起請求
5.使用logging模塊來創建日志器,記錄項目中的日志信息
6.使用HttpTestRunner來生成HTML測試報告
7.使用re模塊來實現參數化(正則匹配)
8.使用動態創建屬性(類屬性)的機制來實現接口之間的依賴 (setattr getattr)
比如:我們項目中客服指派訂單的時候,需要上一個接口訂單ID,首先要對上一個接口發送請求,獲取訂單id,通過實例化對象,創建屬性名,獲取屬性值,從而實現指派訂單接口的成功請求。
分層設計
為了提升接口自動化測試框架的拓展性、穩定性、完整性,進而提升測試效率,往往會將測試框架工程化,
整個流程會分為不同的層級,每個層級之間保持相對獨立
cases
測試執行邏輯層,用於存放所有的測試用例類
configs
配置層,用於存放當前框架中的所有配置信息(使用不頻繁,修改不頻繁的數據)
datas
測試數據層,用於存放所有的測試數據,測試參數(可以使用excel,json,yaml,數據庫來存儲)
libs
自定義庫文件層,用於存放自定義或者二次開發的庫文件
logs
日志層,用於保存運行框架過程中產生的所有有效日志信息
reports
報告層,用於保存所有的測試報告文件(一般為html報告)
scripts
腳本封裝層,用於保存所有的操作封裝模塊(yaml,excel,log.mysql,requests,參數化等)
run.py
用例啟動文件,使用套件加載用例,批量執行並生成報告
9.使用Jenkins來實現持續集成
a.Jenkins如何配置定時任務?
1.首先構建觸發器
2.勾選Build peroidically
3.輸入框中配置觸發時間
00 12 ** 3 每周三 12點
比如 我們周三中午的時候運行自動化腳本,發送測試報告
2.接口自動化的流程?
a.需求 --需求文檔、接口文檔
b.評審
c.用例
d.編寫自動化腳本
e.jenkins持續集成--定時執行腳本,生成報告
f.報告
g.發送郵件
h.提bug
3.你的項目中接口用例有多少?每次大概執行多長時間?
我們項目有65個接口;大概1200條用例,執行時間大概半個小時
4.Get和post區別?
- get是不安全的,因為在傳輸過程,數據被放在請求的URL中,
post的所有操作對用戶來說都是不可見的 (安全性)
2.Get傳送的數據量較小,這主要是因為受URL長度限制
Post傳送的數據量較大,一般被默認認為不收限制 (傳輸量)
- get執行效率卻比post方法好,get是form提交默認方法 (效率性)
5.cookie與session的區別
-
cookie數據存放在客戶的瀏覽器上,session數據放在服務器上
-
cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙考慮到安全應當使用session
-
session會在一定時間內保存在服務器上,當訪問增多,會比較占用你服務器的性能考慮到輕服務器性能方面,應當使用cookie
-
單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie
-
所以個人建議:
將登陸信息等重要信息存放為session
其他信息如果需要保留,可以放在cookie中
6.Http和https區別?
https協議需要到CA申請證書,一般免費證書較少,因而需要一定費用。http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl/tls加密傳輸協議。


7.在接口自動化中,如何讓token不失效?
1.調用登錄接口,拿到獲取的token
2.將拿到的token放在header中,調用確認登錄接口
3.確認登錄接口調用成功,接口返回信息正常
8.下個接口請求參數依賴上個接口的返回數據?
不同的接口封裝不同的函數或方法,需要的數據return出來,用一個中間變量a去接收,
后面的接口傳a就可以了
9.接口測試中依賴登錄狀態下的接口如何測試?
本質是:在每次發送請求時需要帶上session或cookie才能發送成功,在構建post
請求時添加必要的session或者cookie
10.依賴於登錄的接口如何處理?
登錄接口依賴token的,可以先登錄后,token存到一個yaml或者json或者ini的配置文件里面
后面所有的請求去拿這個數據就可以全局使用了
如果是cookies的參數,可以用session自動關聯
11.依賴第三方的接口如何處理?
這個需要自己去搭建一個Mock服務、模擬接口返回數據
mock可以用在單元測試過程中,還有一個用途,當前端開發在開發頁面的時候,需要服務端提供API接口,此時服務端還沒開發完成,或者說沒搭建測試環境,這時候前端開發會自己mock一個api服務端,自己給自己提供調用接口的返回數據。
12.接口產生的垃圾數據如何清理?
造數據的數據清理,需要python連接數據庫,做增刪改查操作
測試用例前置,setUp做數據准備
后置操作,tearDown做數據清理
14.不可逆操作,如何處理,比如刪除一個訂單這種接口如何測試?
主要靠手工測試造數據,直接在數據庫改字段狀態。自動化也一樣,造數據可以用python連接數據庫,做增刪改查的操作
測試用例前置,setUp做數據准備
后置操作,tearDown做數據清理
15.你的項目中接口用例有多少?每次大概執行多長時間?
我們項目有65個接口,大概1200條用例,執行時間大概半小時左右。
16.接口自動化的參數你是如何實現的?說說你的想法?
我會用python中Re模塊中的sub方法去替換
17.如何使你的接口自動化測試用例直接跳過前面幾條,直接執行第 7 條?
可以在 Excel 創建一列,指定是否跳過,然后在用例時,過濾掉這些用例
使用條件判斷,通過 case_id==7 來決定是否執行
18.如何使你的接口自動化腳本,對於同一個請求讓同一個用戶請求多次?
在 Excel 中設置相關執行次數的字段,在 ddt 數據驅動時,使用代碼來控
制執行次數。
params和data區別
由於get請求無請求體,post請求有請求體
使用params參數時,默認會把參數附加到url后面,所以發送get請求時應使用params參數
使用data參數時,參數會存放到請求體中,所以發送post請求時不能使用params,應使用data,除非接口及支持get又支持post,同樣get請求也不能使用data參數
為什么要對requests進行封裝?
1.通過封裝,我可以直接把所有的請求參數統一使用字典來傳遞
比如,我們接口需要的數據也就是測試數據往往會保存在excel表里面,那么我們取到后是字符串類型,字符串類型是無法作為請求參數傳遞的,所有我每次都要做數據轉換,再傳遞給接口,為了節省這個過程,我只需要把這個過程封裝到我的requests里即可,每次取數據后會自動給我處理
第二,當我想保持某個狀態時,不想每次都初始化一個session對象,那么我可以把它封裝到我的reuqests里面,以后直接調用即可
如何使用Seesion解決接口保持狀態?
初始化Session實例,通過這個實例調用request()方法發送請求
說說接口測試的流程,介紹一下request有哪些內容?
1.流程:獲取接口文檔,依據文檔設計接口參數,獲取響應,解析響應,校驗結果,判斷測試是否通過
2.request內容:
封裝了各種請求類型,get,post等;
以關鍵字參數的方式,封裝了各種請求參數,params,data,headers,token等
封裝了響應內容,status_code,json(),cookies,url
session會話對象,可以跨請求
作者:arvin_one
鏈接:https://www.jianshu.com/p/190d510d8c36
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
