(1)我們測試的接口屬於哪一類?
通常都是B/S架構,由客戶端調用,或模擬客戶端調用服務器提供的請求接口,由服務器完成處理並返回一個應答的過程。
例如 webservice接口 http接口 jms接口 hessian接口
(2)HTTP接口傳遞數據最常用的方式?
get和post最常用。
get是從服務器上獲取數據 適用場景:在做搜索接口 商品信息接口
post是向服務器上傳送數據 適用場景:在做數據添加修改刪除時或圖片上傳等時能用到
(3)HTTP接口測試的類型?
① get請求無參數 ② get請求有參數 ③ post請求帶參數
(4)平常是怎么測接口的?
參數組合、接口安全(繞過前端驗證、繞過身份授權、參數是否加密、密碼安全規則)、異常驗證(必傳非必傳、參數類型、入參長度)
性能測試
用postman工具測,其次用jmeter測試
(5)webservice接口如何測試的?
用soapui工具測試
(6)接口測試的步驟?
大體流程是:① 閱讀API接口文檔 ② 編寫測試用例 ③ 根據測試用例進行API的手工測試(開發API工具、使用工具進行測試 )
(7)沒有文檔如何做接口測試?
與開發溝通,然后整理出接口文檔,也可以自己試着抓包看接口請求參數,然后不懂的跟開發溝通。
(8)下個接口請求參數依賴上個接口的返回數據?
不同的接口封裝成不同的函數或方法,需要的數據return出來,用一個中間變量a去接收。后面的接口傳a就可以了。
(9)在手工接口測試或者自動化接口測試過程中,上下游接口有數據依賴如何處理?
用一個全局變量來處理依賴的數據
(10)接口測試中依賴登錄狀態的下的接口如何測試?
本質是:在每次發送請求時需要帶上session或cookie才能發送成功,在構建post請求時添加必要的session或者cookie
(11)依賴於登錄的接口如何處理?
登錄接口依賴token的,可以先登錄后,token存到一個yaml或者json或者ini的配置文件里面
后面所有的請求去拿這個數據就可以全局使用了
如果是cookies的參數,可以用session自動關聯
(12)依賴第三方的接口如何處理?
這個需要自己去搭建一個mock服務、模擬接口返回數據
mock是一個開源的框架,在github上可以下載到。
mock可以用在單元測試過程中,還有一個用途,當前端開發在開發頁面的時候,需要服務端提供API接口,此時服務端還沒開發完成,或者說沒搭建測試環境,這時候前端開發會自己mock一個api服務端,自己給自己提供調用接口的返回數據。
(13)接口產生的垃圾數據如何清理?
造數據的數據清理,需用python連接數據庫,做增刪改查操作
測試用例前置,setUp做數據准備
后置操作,tearDown做數據清理
(14)測試的數據你放在哪兒?
測試的數據分很多種,千萬不能說寫在代碼里,因為數據是不能寫死在代碼里的。
測試數據放到.py文件的開頭,對於少量的,固定不變的數據是可以的。
測試數據存放總結:
① 對於一些一次性消耗的數據,比如注冊,每次注冊不一樣的數,可以用隨機函數生成
② 對於一個接口有多組測試的參數,可以參數化,數據放yaml,text,json,execl等都可以
③ 對於反復使用的數據,如訂單的各種狀態需要造數據的情況,可以放到數據庫,每次數據初始化,用完后再清理
④ 對於郵箱配置的一些參數,可以用ini配置文件
⑤ 對於全部是獨立的接口項目,可以用數據驅動方式,用execl/csv管理測試的接口數據
⑥ 對於賬號密碼,這種管全局的參數,可以用命令行參數,單獨抽出來,卸載i配置里(如ini)
⑦ 對於少量的靜態數據,比如一個接口的測試數據,也就2-3組,可以寫到python腳本的開頭,十年八年都不會變更的。
(15)json和字典的區別?
json是一種輕量級的數據交換格式。json本質上還是字符串,只是按key:value這種鍵值對的格式來的字符串。
如:a = {'a':1, 'b': 2} 這是字典
a = '{'a': 1, 'b': 2}' 這是json
(16)不可逆操作,如何處理,比如刪除一個訂單這種接口如何測試?
主要靠手工測試造數據,直接在數據庫改字段狀態。自動化也一樣,造數據可以用python連接數據庫,做增刪改查的操作
測試用例前置,setUp做數據准備
后置操作,tearDown做數據清理
(17)一個訂單的幾種狀態如何全部測到。如:未處理、處理中、處理失敗、處理成功?
也是一樣,造數據,通過python連接數據庫,修改數據的狀態
(18)python如何連接數據庫操作?
PyMYSQL是在python3.x版本中用於連接mysql服務器的一個庫
mysqldb是在python2中使用的
- 首先導入模塊(提前pip安裝) import pymysql 或者 import mysqldb
- 打開數據庫連接 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)做接口測試過程中發現過哪些bug?
比如:測試體現金額的提交,有一天數據庫里插入了一個提現金額為負數的,開發要你復現,你在頁面上怎樣測試都沒錯誤,那是前端做了限制。可以繞過前端,直接用接口工具去直接請求接口,或者用fiddler去抓包,抓到接口劶修改金額為負數。
(20)當一個接口出現異常,你是如何分析異常的?
用fiddler工具抓包或者瀏覽器上按F12調試。app上就用fiddler設置代理,去看請求報文和返回報文。
查看后端日志,xshell連上服務器,查看日志。
(21)如何模擬弱網設置?
fiddler和charles都可以模擬,平常說的模擬丟包,也就是模擬弱網測試。
通過charles設置延遲,進行模擬不同的網絡:配置好charles后,正常聯網,選擇throttle settings設置弱網環境
thtottle preset選擇弱網環境目標:2G或3G;也可以在Bandwidth中選擇上傳下載數值(kbps)
通過fiddler模擬弱網:打開fiddler ->rules ->customer rules ->會出現一個fiddler script編輯器窗口,
利用ctrl+F組合鍵調出搜索對話框,鍵入m_Simulate進行搜索,找到如下代碼框:
upload代表上傳速度,download代表下載速度。自定義修改之后,保存后退出。
繼續在fiddler界面上找到rules-> perfomance-> 點擊Simulate Modem Speeds,完成弱網模擬功能的打開。
(22)怎么分析bug是前端的還是后端的?
先抓包看請求報文,對着接口文檔,看請求報文有沒問題,有問題就是前端發的數據不對。
請求報文沒問題,那就看返回報文,返回的數據不對,那就是后端開發的問題。
(23)http接口和web service接口測試區別是什么?
傳統web service: 有一套完整的協議標准,其中有soap協議,用來進行消息的傳遞。
soap請求是HTTP POST的一個專用版本,遵循一種特殊的xml消息格式 Content-type設置為:text/xml任何數據都可以xml化。
web service的好處是:不用擔心大小寫問題
不用擔心中文urlencode問題
代碼中不用多次申明認證(賬號、密碼)參數
傳遞參數可以為數組、對象等
由於web service要進行xml解析,速度可能會有所降低。
現在HTTP完全可以替代web service。