1.能夠大致講一下你們接口自動化框架是怎么搭建的嗎?
好的,我們采用unittest和ddt數(shù)據(jù)驅(qū)動思想搭建測試框架,(對數(shù)據(jù)excel讀取、yaml配置、Requests接口請求、Re參數(shù)化、Pymysql數(shù)據(jù)庫效驗、日志等模塊實現(xiàn)封裝),其中,用
1.Openpyxl來處理excel,存儲測試數(shù)據(jù)(用例數(shù)據(jù))
2.pyyaml來配置文件(configparse,pyyaml)
3. Pymysql來連接mysql數(shù)據(jù)庫,執(zhí)行sql數(shù)據(jù),進行數(shù)據(jù)效驗
4.Requests請求庫,來向接口發(fā)起請求
5.使用logging模塊來創(chuàng)建日志器,記錄項目中的日志信息
6.使用HttpTestRunner來生成HTML測試報告
7.使用re模塊來實現(xiàn)參數(shù)化(正則匹配)
8.使用動態(tài)創(chuàng)建屬性(類屬性)的機制來實現(xiàn)接口之間的依賴? (setattr getattr)
比如:我們項目中客服指派訂單的時候,需要上一個接口訂單ID,首先要對上一個接口發(fā)送請求,獲取訂單id,通過實例化對象,創(chuàng)建屬性名,獲取屬性值,從而實現(xiàn)指派訂單接口的成功請求。
分層設(shè)計
為了提升接口自動化測試框架的拓展性、穩(wěn)定性、完整性,進而提升測試效率,往往會將測試框架工程化,
整個流程會分為不同的層級,每個層級之間保持相對獨立
cases
? ? 測試執(zhí)行邏輯層,用于存放所有的測試用例類
configs
? ? 配置層,用于存放當前框架中的所有配置信息(使用不頻繁,修改不頻繁的數(shù)據(jù))
datas
? ? 測試數(shù)據(jù)層,用于存放所有的測試數(shù)據(jù),測試參數(shù)(可以使用excel,json,yaml,數(shù)據(jù)庫來存儲)
libs
? ? 自定義庫文件層,用于存放自定義或者二次開發(fā)的庫文件
logs
? ? 日志層,用于保存運行框架過程中產(chǎn)生的所有有效日志信息
reports
? ? 報告層,用于保存所有的測試報告文件(一般為html報告)
scripts
? ? 腳本封裝層,用于保存所有的操作封裝模塊(yaml,excel,log.mysql,requests,參數(shù)化等)
run.py
? ? 用例啟動文件,使用套件加載用例,批量執(zhí)行并生成報告
9.使用Jenkins來實現(xiàn)持續(xù)集成
a.Jenkins如何配置定時任務(wù)?
1.首先構(gòu)建觸發(fā)器
2.勾選Build peroidically
3.輸入框中配置觸發(fā)時間
00 12 ** 3? 每周三 12點
比如 我們周三中午的時候運行自動化腳本,發(fā)送測試報告
2.接口自動化的流程?
a.需求? ?--需求文檔、接口文檔
b.評審
c.用例
d.編寫自動化腳本
e.jenkins持續(xù)集成--定時執(zhí)行腳本,生成報告
f.報告
g.發(fā)送郵件
h.提bug
3.你的項目中接口用例有多少?每次大概執(zhí)行多長時間?
我們項目有65個接口;大概1200條用例,執(zhí)行時間大概半個小時
4.Get和post區(qū)別?
1. get是不安全的,因為在傳輸過程,數(shù)據(jù)被放在請求的URL中,
post的所有操作對用戶來說都是不可見的?? (安全性)
2.Get傳送的數(shù)據(jù)量較小,這主要是因為受URL長度限制
Post傳送的數(shù)據(jù)量較大,一般被默認認為不收限制?(傳輸量)
2. get執(zhí)行效率卻比post方法好,get是form提交默認方法 (效率性)
5.cookie與session的區(qū)別
1. cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上
2. cookie不是很安全,別人可以分析存放在本地的cookie并進行cookie欺騙考慮到安全應(yīng)當使用session
3. session會在一定時間內(nèi)保存在服務(wù)器上,當訪問增多,會比較占用你服務(wù)器的性能考慮到輕服務(wù)器性能方面,應(yīng)當使用cookie
4. 單個cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie
5. 所以個人建議:
將登陸信息等重要信息存放為session
其他信息如果需要保留,可以放在cookie中
6.Http和https區(qū)別?
https協(xié)議需要到CA申請證書,一般免費證書較少,因而需要一定費用。http是超文本傳輸協(xié)議,信息是明文傳輸,https則是具有安全性的ssl/tls加密傳輸協(xié)議。
7.在接口自動化中,如何讓token不失效?
1.調(diào)用登錄接口,拿到獲取的token
2.將拿到的token放在header中,調(diào)用確認登錄接口
3.確認登錄接口調(diào)用成功,接口返回信息正常
8.下個接口請求參數(shù)依賴上個接口的返回數(shù)據(jù)?
不同的接口封裝不同的函數(shù)或方法,需要的數(shù)據(jù)return出來,用一個中間變量a去接收,
后面的接口傳a就可以了
9.接口測試中依賴登錄狀態(tài)下的接口如何測試?
本質(zhì)是:在每次發(fā)送請求時需要帶上session或cookie才能發(fā)送成功,在構(gòu)建post
請求時添加必要的session或者cookie
10.依賴于登錄的接口如何處理?
登錄接口依賴token的,可以先登錄后,token存到一個yaml或者json或者ini的配置文件里面
后面所有的請求去拿這個數(shù)據(jù)就可以全局使用了
如果是cookies的參數(shù),可以用session自動關(guān)聯(lián)
11.依賴第三方的接口如何處理?
這個需要自己去搭建一個Mock服務(wù)、模擬接口返回數(shù)據(jù)
mock可以用在單元測試過程中,還有一個用途,當前端開發(fā)在開發(fā)頁面的時候,需要服務(wù)端提供API接口,此時服務(wù)端還沒開發(fā)完成,或者說沒搭建測試環(huán)境,這時候前端開發(fā)會自己mock一個api服務(wù)端,自己給自己提供調(diào)用接口的返回數(shù)據(jù)。
12.接口產(chǎn)生的垃圾數(shù)據(jù)如何清理?
造數(shù)據(jù)的數(shù)據(jù)清理,需要python連接數(shù)據(jù)庫,做增刪改查操作
測試用例前置,setUp做數(shù)據(jù)準備
后置操作,tearDown做數(shù)據(jù)清理
14.不可逆操作,如何處理,比如刪除一個訂單這種接口如何測試?
主要靠手工測試造數(shù)據(jù),直接在數(shù)據(jù)庫改字段狀態(tài)。自動化也一樣,造數(shù)據(jù)可以用python連接數(shù)據(jù)庫,做增刪改查的操作
? ? ?測試用例前置,setUp做數(shù)據(jù)準備
? ? ?后置操作,tearDown做數(shù)據(jù)清理
15.你的項目中接口用例有多少?每次大概執(zhí)行多長時間?
我們項目有65個接口,大概1200條用例,執(zhí)行時間大概半小時左右。
16.接口自動化的參數(shù)你是如何實現(xiàn)的?說說你的想法?
我會用python中Re模塊中的sub方法去替換
17.如何使你的接口自動化測試用例直接跳過前面幾條,直接執(zhí)行第 7 條?
可以在 Excel 創(chuàng)建一列,指定是否跳過,然后在用例時,過濾掉這些用例
使用條件判斷,通過 case_id==7 來決定是否執(zhí)行
18.如何使你的接口自動化腳本,對于同一個請求讓同一個用戶請求多次?
在 Excel 中設(shè)置相關(guān)執(zhí)行次數(shù)的字段,在 ddt 數(shù)據(jù)驅(qū)動時,使用代碼來控
制執(zhí)行次數(shù)。
params和data區(qū)別
由于get請求無請求體,post請求有請求體
使用params參數(shù)時,默認會把參數(shù)附加到url后面,所以發(fā)送get請求時應(yīng)使用params參數(shù)
使用data參數(shù)時,參數(shù)會存放到請求體中,所以發(fā)送post請求時不能使用params,應(yīng)使用data,除非接口及支持get又支持post,同樣get請求也不能使用data參數(shù)
為什么要對requests進行封裝?
1.通過封裝,我可以直接把所有的請求參數(shù)統(tǒng)一使用字典來傳遞
比如,我們接口需要的數(shù)據(jù)也就是測試數(shù)據(jù)往往會保存在excel表里面,那么我們?nèi)〉胶笫亲址愋停址愋褪菬o法作為請求參數(shù)傳遞的,所有我每次都要做數(shù)據(jù)轉(zhuǎn)換,再傳遞給接口,為了節(jié)省這個過程,我只需要把這個過程封裝到我的requests里即可,每次取數(shù)據(jù)后會自動給我處理
第二,當我想保持某個狀態(tài)時,不想每次都初始化一個session對象,那么我可以把它封裝到我的reuqests里面,以后直接調(diào)用即可
如何使用Seesion解決接口保持狀態(tài)?
初始化Session實例,通過這個實例調(diào)用request()方法發(fā)送請求
說說接口測試的流程,介紹一下request有哪些內(nèi)容?
1.流程:獲取接口文檔,依據(jù)文檔設(shè)計接口參數(shù),獲取響應(yīng),解析響應(yīng),校驗結(jié)果,判斷測試是否通過
2.request內(nèi)容:
封裝了各種請求類型,get,post等;
以關(guān)鍵字參數(shù)的方式,封裝了各種請求參數(shù),params,data,headers,token等
封裝了響應(yīng)內(nèi)容,status_code,json(),cookies,url
session會話對象,可以跨請求