大家好,又見面了,我是你們的朋友全棧君.
json和pythondifference in dictionary?
Json是輕量級的數據交互格式,以key-value的鍵值對形式來保存數據,結構清晰,可以說是目前互聯網項目開發中最常用的一種數據交互格式.
字典,同樣是以key-value的鍵值對來保存數據,是python中的一種數據類型.
你做接口自動化測試時,測試數據放哪裡?
1) For some basic configuration such as database configuration can be placedproperties文件(yaml文件)
2) 接口測試需要用到的數據可以放數據庫表,也可以放到excel中.
什麼是數據驅動?
數據驅動就是通過excel,或者xml,數據庫等數據結構來維護測試數據,通過相應的技術去處理,拿到測試數據用於測試,從而實現測試數據與代碼的解耦,數據驅動測試的本質是高級的參數化
excel中如何設計你的用例?
1) All interface information is maintained in a form
2) Use case data about the interface is maintained in a form
3) The interface is passed as a list of parameters,通過構造jsonThe format string can solve the problem of passing multiple parameters,同時提升了用例的可維護性
excel中的數據怎麼拿出來?
通過第三方庫openpyxl來完成,項目只需要引入openpyxl庫,通過它提供的api即可完成對於excel的操作,甚至於我們自己也可以做一些二次封裝,使得操作更方便.一行數據就是一個用例.
如果有些接口做了鑒權(需要鑒定權限),怎麼實現這些接口的自動化測試?
首先需要明確接口是通過什麼機制來實現的鑒權
1) 如果是通過會話id(JSESSIONID)來實現鑒權的,那麼先調用完登錄接口–》拿到它返回的這個數據–》存儲起來–》後面再調用其他接口的時候直接帶上這個數據過去就可以了.
2) 如果是通過token來實現鑒權的,那麼同樣只需要在調用完登錄接口–》拿到它返回的這個數據–》存儲起來,後面操作同上.
先回答上面的一個基本實現步驟,然後再補充以下一些實現細節:
a. 怎麼取到這個JSESSIONID或者token
這個信息怎麼取首先得明白它是怎麼返回來的,可能為以下兩種方式:
1) 登錄接口的響應頭
2) 登錄接口的響應報文
需要找開發確認,不同方式不同取法.
b. 怎麼存儲這個JSESSIONID或者token
1) 文件中(excel、properties文件都可以)
2) 數據庫
3) 代碼裡面自己定義的公共靜態變量,作為一個共享的數據
c. 請求其他需要鑒權的接口時,怎麼帶過去這個數據
先找開發人員確認,再調用需要鑒權的這些接口怎麼攜帶這個鑒權的信息(票).一般不外乎這麼幾種:
1) 拼接在url上傳過去用於服務器驗證
2) 設置到請求體中
3) 通過請求頭帶過去
弄明白怎麼傳過去以後,就設法從保存了這個鑒權信息的地方取出來–》傳過去
什麼是會話?
所謂會話就是session,而session是一種服務器的緩存技術,由服務器端創建,用戶登錄了系統,一般就會把登錄用戶的信息保存到這個session對象中,然後把此會話對應的id(JSESSIONID)返回,因此大部分系統都會用到session機制來實現鑒權.Session保存數據方式也是以key-value的形式.
什麼是token?
所謂token其實就是服務器端返回的一個字符串(有點類似於:xys73494954sdhcdr83435這麼一串),這個數據是基於什麼算法生成的需要找開發確認,一般這個數據是唯一的,服務器每次返回的token都會不一樣.Token之所以可以用來做鑒權,原理如下:用戶a調用了登錄接口–》登錄了系統b–》服務器端生成了一個唯一的token信息(假設為c),然後會拿用戶的編號id(假設為d)做了一個映射:c-d,然後將這樣的映射關系存到數據庫或redis等緩存中,然後再返回這個token給客戶端–》客戶端再調用其他需要鑒權的接口時,只需要將緩存起來的這個token帶過去驗證–》服務器根據此token檢查是否有登錄用戶信息來判斷此請求是否是一個已登錄授權的用戶.(這裡客戶端怎麼取到這個token,怎麼存,再次請求時怎麼帶過去,上面接口鑒權部分已解釋).
某個接口請求,參數依賴上個接口的返回數據,怎麼處理(接口關聯)?
場景:b接口在調用的時候參數依賴於a接口的返回數據.
處理方案:
a接口調用完–》從響應中取出b依賴的這個參數–》保存起來–》b調用的時候,取出這個信息–》當做參數傳過去即可.
保存方案:
參考問題5中的數據保存方式
接口調用依賴第三方的接口b,而b接口還未提供給你,如何處理?
通過mock框架搭建自己的mock系統/平台(其實就是自己開發接口),模擬這個第三方接口mock一個出來即可,這樣就解決了這個依賴.
接口測試的垃圾數據如何清理?
可以自己准備單獨的環境(獨立的數據庫),In this way, the data generated by the interface call can be executed after the entire suite is executedsql腳本來完成數據刪除
How to do data validation when doing interface automation?
數據驗證主要包括兩個方面:
1) 接口響應報文的驗證
利用jsonpath取出響應數據(大多數情況是json)中的關鍵字段的值,通過Assert斷言這些關鍵字段的值是否符合預期.預期值和jsonpath取值表達式可以配置在excel中.
2) 數據庫表數據的驗證
做表數據驗證要先明白兩點:
a. 表數據驗證首先得明白這個接口的基本業務,會影響到哪些表,哪些字段的數據,然後才能准備查詢sql去有針對性的查數據.
b. 並不是所有用例的執行都會操作數據庫,影響到表數據,因此只有影響到了表數據的用例,才准備查詢腳本.
具體做法:
Excel用例准備aa,bb,cc三列,aa傳腳本,bb,cc兩列分別用來回寫用例執行前的sql查詢結果和用例執行後的sql查詢結果,兩個數據對比即可知道數據變化是否滿足預期.
如何提升測試套件的執行效率?
1.減少excel讀寫,減少不必要的io操作
2.excel數據讀取測試數據,全部存儲到靜態變量中).
3.excel數據回寫,盡量通過批量方式去寫.
你用過單元測試框架嗎,是什麼框架,有哪些常用操作?
用過,unittest 或者 pytest,這些測試框架都支持我們去定義測試套件,達到管理我們測試用例代碼的作用,同時這些測試框架提供的一些豐富注解不僅能很方便的控制測試用例的執行順序來控制整個測試流程,還能為各種測試場景的實現提供支撐.
常用操作:
seutp,teardown,適合單個測試用例的初始化、環境清理.
seutpClass,teardownClass:適合測試類的全局初始化、環境清理.
assertXXXX: 各種斷言方式
testLoader的discover: 用來發現測試用例
testSuite的addTests: 用來裝載測試用例
@ddt 數據驅動
htmlTestRunner:用來生成html測試報告
說說你對接口的理解?
接口是服務,是功能點實現,是數據傳遞的通道,也是服務器端的一個實現了某種協議(比如http協議..)和映射機制(當訪問一個url時就會通過服務器端的映射處理機制解析後,落到對應的處理函數)的函數,接口參數就是函數的參數,接口的響應數據就是函數的返回值
請簡單說一說get、post這兩種請求方法的區別?
Get:
a. 一般對於從服務器取數據的請求可以設置為get方式
b. Get方式在傳遞參數的時候,一般都會把參數直接拼接在url上(例如:http://xxx?id=1&type=2)
c. Get請求方法可以傳遞的參數數據量是有限的(因為一般參數是拼接在url上,而浏覽器對於url的長度是有限制的)
d. Get請求因為是直接將數據拼接在url上,所以安全性不如post強(相對),但是get的執行效率要快於post
Post:
a. 一般往服務器提交數據的請求會設置為post方式
b. Post方式傳遞參數一般都會把參數放在請求體,而不會拼接在url
c. Post請求方法可以提交的數據量不受限制
d. Post請求傳參相對於get要安全(相對不是絕對),但是post的執行效率不如get.
在浏覽器中輸入URL,回車之後發生了什麼?
1.解析地址
2. 浏覽器查詢,是否存在浏覽器緩存中,如果沒有
3.Tcp連接,想服務器發送請求
4.服務器返回接口,並且在浏覽器中添加緩存
5.前端渲染頁面
======================================
(1)URL 解析
(2)DNS 查詢
(3)TCP 連接
(4)處理請求
(5)接受響應
(6)渲染頁面
發布者:全棧程序員棧長,轉載請注明出處:https://javaforall.cn/127989.html原文鏈接:https://javaforall.cn