測試基礎/python自動化面試題


1.怎么分析bug是前端的還是后端的?

   先抓包看請求報文,對着接口文檔,看請求報文有沒問題,有問題就是前端發的數據不對。

  請求報文沒問題,那就看返回報文,返回的數據不對,那就是后端開發的問題。

2.get和post的區別?

1)傳送方式:get通過地址欄傳輸,post通過報文傳輸

2)傳送長度:get參數有長度限制(受限於url長度),而post無限制

3)get產生一個tcp數據包(對於get方式,瀏覽區會把header和data一並發送出去,服務器響應,返回數據)

  pos產生兩個tcp數據包(對於post,瀏覽器先發送header。服務器響應100 continue,瀏覽器再發送data,服務器響應返回數據)

4)get請求參數會被完整保留在瀏覽歷史記錄里,而post中的參數不會被保留

3.JSON的兩種結構
1) 對象:用大括號表示,對象由屬性組成,屬性由鍵值對組成,鍵和值對之間用冒號隔開,屬性之間用逗號隔開,另外鍵必須用雙引號。如:{"姓名":"Lara","年齡":18}

2) 數組:用中括號表示。如:["小雞","小鴨","小狗"]

4.常見的http狀態碼分別代表什么?
2XX--成功

3XX--重定向(客戶端瀏覽器必須采取更多操作來實現請求)

4XX--客戶端錯誤

5XX--服務器錯誤

具體:

  302:臨時重定向到某一個頁面,比如要登錄之后才能進入的頁面,他首先會臨時重定向到登錄界面

  401:用戶發出的請求有錯誤,服務器沒有進行新建或修改數據的操作【Unauthorized】

  403:表示用戶得到授權,但訪問被禁止【Forbidden】

  404:用戶發出的請求得到是不存在的記錄,服務器沒有進行操作【NOT FOUND】

  503:服務端目前無法使用,過載或者維護中

  500:服務端發生錯誤,用戶無法判斷發出的請求是否成功

5.post請求的四種參數形式是什么?
  application/x-www-form-urlencoded

  multipart/form-data

   application/json

   text/xml

6.cookie與session的區別
1)cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。

2)cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙考慮到安全應當使用session。

3)session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能考慮到減輕服務器性能方面,應當使用cookie。

4)單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie

5)可以將登陸信息等重要信息存放為session,其他信息如果需要保留,可以放在cookie

 

7.JSON的兩種結構
1) 對象:用大括號表示,對象由屬性組成,屬性由鍵值對組成,鍵和值對之間用冒號隔開,屬性之間用逗號隔開,另外鍵必須用雙引號。如:{"姓名":"Lara","年齡":18}

2) 數組:用中括號表示。如:["小雞","小鴨","小狗"]

8.requests 庫響應消息體四種格式
  r.text:文本響應內容

  r.content:字節響應內容

  r.json():Json解碼響應內容

  r.raw:原始響應內容

9.當一個接口出現異常,你是如何分析異常的?
  用fiddler工具抓包或者瀏覽器上按F12調試。

  app上就用fiddler設置代理,去看請求報文和返回報文。查看后端日志,xshell連上服務器,查看日志。

10.接口測試用例的編寫要點有哪些?
1)必填字段:請求參數必填項、可選項

2)合法性:輸入輸出合法、非法參數

3)邊界:請求參數邊界值等

4)容錯能力:大容量數據、頻繁請求、重復請求(如:訂單)、異常網絡等的處理

5)響應數據校驗:斷言、數據提取傳遞到下一級接口…

6)邏輯校驗:如兩個請求的接口有嚴格的先后順序,需要測試調轉順序的情況

7)性能:對接口模擬並發測試,逐步加壓,分析瓶頸點

8)安全性:構造惡意的字符請求,如:SQL注入、XSS、敏感信息、業務邏輯(如:跳過某些關鍵步驟;未經驗證操縱敏感數據)

 

11.說說接口測試的流程和接口自動化流程,介紹一下request有哪些內容?

1)流程:獲取接口文檔,依據文檔設計接口參數,獲取響應,解析響應,校驗結果,判斷測試是否通過。 

2)request 內容:1,封裝了get、post等;

        2、以關鍵字參數的方式,封裝了各類請求參數,params、data、headers、token、cookie等;

3)封裝了響應內容,status_code、json()、cookies、url等

12.json和字典dict的區別

答:  json本質上還是字符串,只是按keyvalue這種鍵值對的格式來的字符串<br>而字典是{keyvalue}的一種數據類型

13.測試的數據你放在哪?

  1.對於賬號密碼,這種管全局的參數,可以用命令行參數,單獨抽出來,寫的配置文件里(如ini

  2.   對於一些一次性消耗的數據,比如注冊,每次注冊不一樣的數,可以用隨機函數生成

  3.對於一個接口有多組測試的參數,可以參數化,數據放yaml,text,json,excel都可以

  4.對於可以反復使用的數據,比如訂單的各種狀態需要造數據的情況,可以放到數據庫,每次數據初始化,用完后再清理

  5.對於郵箱配置的一些參數,可以用ini配置文件

  6.對於全部是獨立的接口項目,可以用數據驅動方式,用excel/csv管理測試的接口數據

  7.對於少量的靜態數據,比如一個接口的測試數據,也就2-3組,可以寫到py腳本的開頭

 

14.在手工接口測試或者自動化接口測試過程中,上下游接口有數據依賴如何處理?

用一個全局變量來處理依賴的數據

15.自動化使用的測試框架是什么?

測試框架:python+unittest+requests+ddt+openpyxl+pymysql+logging

測試框架:python:入門簡單,語法簡潔

  unittest :定義一個測試用例類,具體的方法來維護測試用例的生命周期,測試場景行為,測試用例  前置場景,行為,期望結果,實際結果,斷言方法,Setup teardown方法

  requests:接口調用 ,支持http請求的庫,API 簡潔,提供不同的http請求方法,支持sessioncookies

  ddt :數據驅動,ddt 類裝飾器,data 測試方法裝飾器  unpack解包可迭代的數據類型<br><br>普通用戶,數據庫,配置文件---(基礎數據)

  openpyxl  數據管理 excel管理 數據,使用openpyxl模塊來進行excel數據的讀和寫(exclecsv,  json,  yaml,  txt都可以管理測試數據)

  pymysql:數據庫交互,數據校驗<br><br> evaljson:數據格式的轉換   Evalpython支持的格式轉換成對應的格式

   logging:日志處理, 統一日志輸出格式,渠道,級別,執行結果的記錄,便於定位問題

   jenkins:持續集成

16.依賴於登錄的接口如何處理?

   登錄接口依賴token的,可以先登錄后,token存到一個yaml或者json或者ini的配置文件里面,后面所有的請求去拿這個數據就可以全局使用了

  如果是cookies的參數,可以用session自動關聯

17.接口產生的垃圾數據如何清理?

  造數據的數據清理,需用python連接數據庫,做增刪改查操作

  測試用例前置,setUp做數據准備后置操作,tearDown做數據清理

 

17-2不可逆的操作,如何處理,比如刪除一個訂單這種接口如何測試 

 

 

18.python如何連接數據庫操作?

  首先導入模塊(提前pip安裝)  import pymysql     

  打開數據庫連接   db = pymysql.connect("localhost", "username", "psw", "db_name")

  創建一個游標對象  cursor = db.cursor()

  sql查詢語句   sql = "select * from emp"

  執行sql語句  cursor.execute(sql)

  獲取所有記錄列表   cursor.fetchall()  

  然后for循環遍歷  

  關閉數據庫連接  db.close()

19.對pytest的理解程度?使用規范?參數化方法?說說常用裝飾器?

   pytest是一個非常成熟的全功能的的Python測試框架,主要特點有以下幾點:

  1,簡單靈活,容易上手,文檔豐富;

  2,支持參數化,可以細粒度地控制要測試的測試用例;

     3,能夠支持簡單的單元測試和復雜的功能測試,還可以用來做selenium/ appnium等自動化測試,接口自動化測試(pytest +請求);

  4,pytest具有很多第三方插件,並且可以自定義擴展,比較好用的如pytest - selenium(集成selenium),

     pytest-HTML(完美的HTML測試報告生成),pytest-rerunfailures(失敗情況下重復執行),pytest -xdist(多CPU分發)等;

   5,測試用例的跳躍和xfail處理;使用規范:測試文件名必須以“test_”開頭.測試類以Test開頭,並且不能帶有 init 方法

       測試方法必須以“test_”開頭

       除了有setup/teardown,還能更自由的定義fixture裝載測試用例

       參數化方法:

      pytest支持在多個完整測試參數化方法:

      pytest.fixture(): 在fixture級別的function處參數化

      @pytest.mark.parametrize:允許在function或class級別的參數化,為特定的測試函數或類提供了多個argument/fixture設置。

        pytest_generate_tests:可以實現自己的自定義動態參數化方案或擴展。

 

20.自動化測試報告生成方式?如果是allure詳述?

  @allure.severity(“critical”) # 優先級,包含blocker, critical, normal, minor, trivial 幾個不同的等級

  @allure.feature(“測試模塊_demo1”) # 功能塊,feature功能分塊時比story大,即同時存在feature和story時,feature為父節點

  @allure.story(“測試模塊_demo2”) # 功能塊,具有相同feature或story的用例將規整到相同模塊下,執行時可用於篩選

  @allure.issue(“BUG號:123”) # 問題表識,關聯標識已有的問題,可為一個url鏈接地址

  @allure.testcase(“用例名:測試字符串相等”) # 用例標識,關聯標識用例,可為一個url鏈接地址

21.舉例說明pytest.mark標記的使用?

  1,無條件跳過測試pytest.mark.skip

  2,有條件跳過測試pytest.mark.skipif

  3,標記測試功能按預期失敗pytest.mark.xfail

  4,將測試功能標記為使用給定的夾具名稱pytest.mark.usefixtures

  5,向特定測試項添加警告過濾器,以便更好地控制應在測試,類甚至模塊級別捕獲哪些警告@pytest.mark.filterwarnings

  6,自定義標記:標記指定標簽

 22.為什么要做接口測試? 

 

 

  • 比如這個輸入框,平常拿到這個 web 頁面,會對輸入框做用例設計:
     輸入一個負數(如:-100),點提交
     輸入金額為 0(如:0),點提交
     輸入金額為 0-100 的數(如:20),點提交
     輸入金額為 100(如:100),點提交
     輸入金額大於 100(如:108),點提交
     輸入 1 位小數(如:10.1),點提交
     輸入 2 位小數(如:10.12),點提交
     輸入 3 位小數(如:10.123),點提交
    按照這個等價類,邊界值用例測完,頁面上不能輸入負數和大於 3 位數小數點,
    然后就可以上線了。
    然而。。。突然有一天數據庫里面插入了一個提現金額為負數(-100),於是整
    個部門炸鍋了,首先找到測試(背鍋)去復現問題,測試在頁面上反復輸入負數,
    無法提交,認為沒問題啊!
    首先前端開發對輸入框是做了限制的,前端的 web 開發肯定沒問題,這個鍋前端
    開發 MM 不背。那么如果別人用戶不通過你的 web 頁面,直接發請求提交了呢?
    納尼!!!不通過頁面也能提交。。。這就是我們接下來要提到的接口測試了。

優勢所在:

  1.可以發現很多在頁面上操作發現不了的bug
  2.檢查系統的異常處理能力
  3.檢查系統的安全性、穩定性
  4.前端隨便變,接口測好了,后端不用變
  5.可以測試並發情況,一個賬號,同時(大於2個請求)對最后一個商品下單,或不同賬號,對最后一個商品下單
  6.可以修改請求參數,突破前端頁面輸入限制(如金額)

 23.什么是 DNS? 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM