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本質上還是字符串,只是按key:value這種鍵值對的格式來的字符串<br>而字典是{key:value}的一種數據類型
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請求方法,支持session,cookies,
ddt :數據驅動,ddt 類裝飾器,data 測試方法裝飾器 unpack解包可迭代的數據類型<br><br>普通用戶,數據庫,配置文件---(基礎數據)
openpyxl: 數據管理 excel管理 數據,使用openpyxl模塊來進行excel數據的讀和寫(excle,csv, json, yaml, txt都可以管理測試數據)
pymysql:數據庫交互,數據校驗<br><br> eval,json:數據格式的轉換 Eval將python支持的格式轉換成對應的格式
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?
