接口測試
1. 接口的分類:webService和http api接口
1) webService接口:是按照soap協議通過http傳輸,請求報文和返回報文都是xml格式,一般要借助工具來測試接口;
2) http api接口:是按照http協議傳輸的,請求報文是key-value格式,返回報文json串,一般常用的請求方式是get和post請求。
2. 接口測試其實就是功能測試,也是測試業務邏輯,只不過沒有頁面可以點;接口測試就是按照接口規范文檔提供的調用地址、請求參數、拼接報文,發送請求檢查返回結果。
3. 接口測試的必要性:
1) 能夠發現很多頁面點擊發現不了的bug;
2) 提高系統的異常處理能力;
3) 前端隨便變,接口測好了,后端不用變。
4. 接口文檔至少得包括:
1) 接口的說明;
2) 調用地址的URL;
3) 請求參數,參數的類型,請求參數的說明;
4) 請求方式;
5) 返回值的說明。
5. get和post請求:
1) get請求能直接在瀏覽器中發送請求;
2) post請求需要借助工具來發送。
3) 兩者的區別:
i get請求使用URL或cookie傳參,host請求使用請求體body傳參;
ii get請求的URL在長度上有限制;post請求沒有;
III post請求比get請求安全,因為get請求數據放在URL中;
IV get請求一般用來請求數據,post請求一般用來發送數據;get請求數據發在請求頭中,post請求數據放在請求body中。
6. http狀態碼:http有1個狀態碼,來標識每次請求是否成功,常見狀態碼有如下幾種。
1) 200:2開頭的都表示這個請求發送成功。
2) 300:3開頭的表示重定向;常見的是302,把請求重定向到別的URL了。
3) 400:4開頭的表示客戶端發送的請求有語法錯誤;
I 常見的401表示訪問的頁面需身份驗證;
II 403表示服務端拒絕訪問請求;
III 404表示沒有這個頁面。
4) 500:5開頭的表示服務器有異常:
I 500代表服務器內部有異常,無法完成請求;
II 503表示服務暫時不可用;
III 504代表服務器端超時,無返回結果。
7. 如何測webService接口
前提要知道測試的URL或wsdl文件,直接在soapui中導入即可,導入后能看到所有接口,填寫參數調用接口, 查看返回結果即可。
8. 通用的接口用例設計
1) 通過性驗證:保證這個接口功能是好使的,也就是正常的通過性測試,按照接口文檔上的參數,正常傳入發送請求,看是否可以返回正確的結果。
2) 參數組合:有一個操作商品的接口,有個字段type,傳1的時候代表修改商品,商品id、商品名稱、價格有一個是必傳的,type傳2的時候是刪除商品,商品id是必傳的,這樣的,就要測參數組合了,type傳1的時候,只傳商品名稱能不能修改成功,id、名稱、價格都傳的時候能不能修改成功;id傳2時,傳入商品id是否刪除成功。
3) 接口安全:
1、繞過驗證,比如說購買了一個商品,它的價格是300元,那我在提交訂單時候,我把這個商品的價格改成3元,后端有沒有做驗證,更狠點,我把錢改成-3,是不是我的余額還要增加?
2、繞過身份授權,比如說修改商品信息接口,那必須得是賣家才能修改,那我傳一個普通用戶,能不能修改成功,我傳一個其他的賣家能不能修改成功。
?3、參數是否加密,比如說我登陸的接口,用戶名和密碼是不是加密,如果不加密的話,別人攔截到你的請求,就能獲取到你的信息了,加密規則是否容易破解。
?4、密碼安全規則,密碼的復雜程度校驗。
4) 異常驗證:異常的,也就是我不按照你接口文檔上的要求輸入參數,來驗證接口對異常情況的校驗。比如說必填的參數不填,輸入整數類型的,傳入字符串類型,長度是10的,傳11,總之就是你說怎么來,我就不怎么來,其實也就這三種,必傳非必傳、參數類型、入參長度。
5) 根據業務邏輯設計用例:把業務的測試點列出來,然后造數據驗證這些測試點。
9.?練習發送【獲取所有學生信息】的請求,發現察看結果樹-》響應數據中中文處顯示的都是亂碼。
解決方法:在jmeter安裝目錄/bin/jmeter.properties文件中找sampleresult.default.encoding=xx, 后面xx改成utf-8,然后取消注釋
10. 練習發送【添加學生信息】接口請求時,在http請求的 Body Data 中寫的中文,為什么都是亂碼(方框中間有個問號)
解決方法:在jmeter安裝目錄/bin/jmeter.properties文件找到 JSyntaxTextArea,把注釋取消就行了。
11. 練習發送【添加學生信息】接口請求時,傳參中有中文,請求成功后,再從【查看所有學生信息】接口看到,中文參數顯示的亂碼。
解決方法:在content-encoding中寫上utf-8,將中文以utf-8格式編碼,然后發送請求

jmeter
1. jmeter:跨平臺的,windows mac Linux下都可以用,使用前必須裝jdk。
2.?jmeter參數化:
1) 用戶定義的變量;
2) 函數生成器:
3) 從文件中讀取
3. 1)?jmeter關聯:獲取返回的值保存起來,給其它請求用,或做其它一些處理。關聯是通過jmeter的正則表達式提取器實現的。
例子:有一個購買商品的接口,必須要先登錄才能夠購買商品, 那么你調用接口的時候怎么知道是否已經登錄了,一般這樣的都會在調用的時候傳一個token的參數,服務端判斷token是否過期或者token是否正確,如果正確的話,那就是登錄成功了就可以買東西了。token是從哪來的呢,肯定是從登錄接口返回的,因為要先登錄,那這樣就得先調用登錄接口, 獲取到token,然后把獲取到的token傳給購買商品的這個接口。
?2) 實際練習時候出現1個問題:正則表達式自己手動輸入時,運行察看結果樹一直提示“未登錄”,
?
?而從登錄返回的數據中復制json串,修改為"sign":"(.*)",后,運行提示操作成功的
?

?
解決方法:后來把兩次操作的表達式復制到sublime Text中,就能很明顯的看出原因了,提示未登錄的那個表達式:后少一個空格,但在jmeter中很難看出來,加上空格即可。
4. ?jmeter操作mysql
1) 導入jar包:直接在測試計劃中導入外部jar包(mysql-connector-java-5.1.7-bin.jar),或者將jar包放在jmeter安裝目錄的lib包中,重啟jmeter即可。
2) 配置數據庫連接:mysql的URL、端口號,用戶名,密碼
3) 寫sql 執行sql,查看結果。
4) jdbc request從數據庫查出來的結果中文顯示???
解決方法:jdbc連接配置的Database URL中加上characterEncoding=UTF-8
5) query type為Callable Statement:執行多條sql語句
5. ?jmeter path extractor下載地址:https://jmeter-plugins.org/wiki/JSONPathExtractor/
?