1. 程式人生 > 其它 >python自動化測試常見面試題

python自動化測試常見面試題

一、json和字典dict的區別

首先python裡面的基礎資料型別有:int、str、 float、list、bool、tuple、dict、set這幾種型別,裡面沒json這種資料型別。

JSON( 是一種輕量級的資料交換格式。它基於 ECMAScript (歐洲計算機協會制定的js規範)的一個子集,採用完全獨立於程式語言的文字格式來儲存和表示資料。簡潔和清晰的層次結構使得 JSON 成為理想的資料交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提升網路傳輸效率。

由於你的程式碼是python寫的(也有可能是php,java,c,ruby等語言),但是後端介面是java寫的(也有可能是其它語言),不同的語言資料型別是不一樣的(就好比中國的語言和美國的語言資料型別也不一樣,中國的一般說一隻羊,一頭牛,美國都是 a /an這種單位),所以就導致你提交的資料,別的開發語言無法識別,這就需要規範傳輸的資料(傳輸的資料都是一個字串),大家都遵循一個規範,按一個標準的格式去傳輸,於是就有就json這種國際化規範的資料型別。

json本質上還是字串,只是按key:value這種鍵值對的格式來的字串b = '{"a": 1, "b": 2, "c": true}'

二、測試的資料放在哪?
1.對於賬號密碼,這種管全域性的引數,可以用命令列引數,單獨抽出來,寫的配置檔案裡(如ini)
2.對於一些一次性消耗的資料,比如註冊,每次註冊不一樣的數,可以用隨機函式生成
3.對於一個介面有多組測試的引數,可以引數化,資料放yaml,text,json,excel都可以
4.對於可以反覆使用的資料,比如訂單的各種狀態需要造資料的情況,可以放到資料庫,每次資料初始化,用完後再清理
5.對於郵箱配置的一些引數,可以用ini配置檔案
6.對於全部是獨立的介面專案,可以用資料驅動方式,用excel/csv管理測試的介面資料
7.對於少量的靜態資料,比如一個介面的測試資料,也就2-3組,可以寫到py指令碼的開頭,十年八年都不會變更的
三、什麼是資料驅動,如何引數化?
四、下個介面請求引數依賴上個介面的返回資料
這個很容易,不同的介面封裝成不同的函式或方法,需要的資料return出來,用一箇中間變數a去接受,後面的介面傳a就可以了
可以參考登入的cookie或token
五、依賴於登入的介面如何處理
參考requests的方法
六、依賴第三方的介面如何處理
這個需要自己去搭建一個mock服務,模擬介面返回資料
mock服務搭建需要自己能夠熟練掌握,面試會問你具體如何搭建 ,如何模擬返回的資料,是用的什麼格式,如何請求的
七、不可逆的操作,如何處理,比如刪除一個訂單這種介面如何測試
此題考的是造資料的能力,介面的請求資料,很多都是需要依賴前面一個狀態的
比如工作流這種,流向不同的人狀態不一樣,操作許可權不一樣,測試的時候,每種狀態都要測到,就需要自己會造資料了。
平常手工測試造資料,直接在資料庫改欄位狀態。那麼自動化也是一樣,造資料可以用python連資料庫了,做增刪改查的操作
測試用例前置操作,setUp做資料準備
後置操作,tearDown做資料清理

八.介面產生的垃圾資料如何清理
跟上面一樣,造資料和資料清理,需用python連資料庫了,做增刪改查的操作
測試用例前置操作,setUp做資料準備
後置操作,tearDown做資料清理

九.一個訂單的幾種狀態如何全部測到,如:未處理,處理中,處理失敗,處理成功
跟上面一樣,也是考察造資料,修改資料的狀態

十、get和post的區別
十一、post請求的四種引數形式是什麼
application/x-www-form-urlencoded
multipart/form-data
application/json
text/xml
十一、公司有用到第三方服務,出了問題,打電話給第三方,第三方不承認,這時候日誌又顯示不到錯誤,應該怎麼處理
1、單獨呼叫第三方服務,檢視返回結果;
2、引入mock機制,假如正常返回的情況下,測試我們的系統是否存在問題;
3、建議開發增加日誌,詳細記錄呼叫第三方介面的過程,記錄呼叫前介面入參,返參等資訊;
十二、介面自動化中的關聯怎麼處理?

將請求返回的結果反射到類屬性中,使用setattr()函式,下個請求呼叫這個類

十三、自動化測試怎麼校驗結果?

使用斷言,預期結果值和實際結果值進行對比;
十四、自動化使用的測試框架是什麼?簡述自動化框架的設計、維護

1、自動化使用的測試框架:
語言:python
測試框架:unittest(assertEqual,assertTure,assertFalse)
介面呼叫:requests(API非常簡潔)
資料驅動:ddt(裝飾器:ddt類,unpack測試方法裝飾器解包時候,data測試方法裝飾器,可迭代的資料型別)
注:普通使用者,管理使用者,資料庫,配置檔案---基礎資料
資料管理:openpyxl(excel,CSV,json,yaml,txt)
資料庫互動:pymysql ---根據資料庫選擇相應的第三方模組來完成
資料格式的轉換:eval,json
日誌處理:logging ---清晰的執行過程,快速定位問題
持續整合:Jenkins(通過外掛HTML Publisher/git/Email Extension)進行自動構建,生成HTML,傳送郵件
2、自動化框架的設計、維護:
1、資料與程式碼分離,(資料驅動)==資料驅動框架==
例如:引數不一樣,響應不一樣
2、結構分層(資料層,用例層,邏輯性)
邏輯層:公用的方法,封裝起來,避免用例層的程式碼冗餘
資料層:例如,設計Excel,excel讀取,引數化替換等
用例層:存放測試用例
十五、在介面自動化測試中都用到了哪些包:
pymysql:連線資料庫
ddt:
requests:
urllib:
xlrd:
xlwt:
xlutils:
十六、根據什麼來做斷言?
1、協議狀態碼: 200,404,503 2、業務狀態碼:status:0 3、業務資料
十七、具體的在這個專案中自動化怎麼應用到實際的,您對自動化結果的分析

完成所有的自動化測試框架的設計和實現後,進行介面測試,然後整合到jenkins,配置定時執行,生成html報表,檢視測試通過率,檢視介面的功能

每次發版時,進行迴歸測試,新功能開發未提測前

十八、做好測試計劃的關鍵是什麼?

明確測試目的,增強測試計劃的實用性,保證測試用例的實用性和覆蓋率,完全需求文件和規格指標書等,嚴格界定測試周期,測試輪次,測試覆蓋模組等

十九、super 是幹嘛用的?在 Python2 和 Python3 使用,有什麼區別?為什麼要使用 super?請舉例說明。
super 用於繼承父類的方法、屬性。super 是新式類中才有的,所以 Python2 中使用時,要在類名的引數中寫 Object。Python3 預設是新式類,不用寫,直接可用。使用 super 可以提高程式碼的複用性、可維護性。修改程式碼時,只需修改一處。

父類:
class Car():
def __init__(self,make,model,year):
self.make=make
self.model=model
self.year=year
def .....
class ElectricCar(Car):
def __init__(self,make,model,year): --------初始化父類的屬性
super().__init__(make,model,year):
def ....
子類就可以使用父類的屬性