因爲接口只是單純的數據交互,無界面,與傳統的UI測試相比,更接近底層一些,更容易發現底層的問題,且難度相對UI測試要低不少,因此接口測試號稱測試界的「短平快」,更加符合如今敏捷開發,快速迭代的開發模式。
其中測試人員一直貫穿到整個生命週期,具體是這樣的:
測試人員都是全能的,職責幾乎貫穿了整個接口生命週期。那到底從哪裏開始測試呢?可能100我的有100個本身的理解。
天然是越早開始越好,如今測試人員的價值早不是之前找多少個BUG。在「專一、極致、口碑、快」的今天,能幫開發越快迭代的測試才越值錢。
當接口定義完之後,就進入了開發設計階段,這時候,後臺接口開發人員須要設計數據庫表等方面的工做,提供出這個接口最快得兩三天左右,但終端可能馬上就須要這個接口的數據從而進行下面的功能的開發,前端開發人員不可能等着。OK,機會來了,測試人員就能夠介入了,說的沒錯,就是測試人員提供mock,使接口可以正確的返回,從而使前端開發可以接着往下進行。
測試界的軍規,缺陷發現越晚,代價就越高。
咱們先分析一下接口請求的過程:
接口開發語言不少,好比php/python/java,甭管 PHP是否是世界上最好的語言,它們的接口請求的過程都是如上圖所示,因此,既然咱們要mock,只能是在」執行方法/函數並將數據返回終端」這一環節來操做了,咱們能夠提供一個方法,將終端所須要的數據寫死在方法體中,並返回給終端,這樣,終端就可以拿到的數據並進行下面的開發。
好比這樣一個接口定義:
路徑:/api/v1/getUserInfo
請求方式:GET
請求參數:userid=1
返回正確值:
{ "redCode": 200,
"redMsg": "success",
"data": {
"id": 1,
"name": "zhangsan",
"age": 18}}
返回異常值:
{
"redCode": 201,
"redMsg": "data null",
"data": {}
}
能夠設計兩組請求參數userid=1和userid=2提供給終端,在mock的方法體中這樣寫:
當接口開發完畢後,撤下咱們的MOCK類,依據MOCK類,完善自動化測試腳本,並對已開發完的接口進行自動化測試。
最重要的一點:更接近底層,利於咱們更好的去了解接口
在寫接口測試腳本時,對於接口返回值的斷言,有的同窗偏向於鏈接數據庫,取值並將數據進行加工後與接口返回值進行比較,以達到運態指望值的目的,我的認爲這是一種不正確的方式,理由以下:
數據加工的過程,就是接口業務邏輯實現的過程,就算測試經過了,你也沒法保證你的代碼沒有BUG。若是提早寫好指望,能夠最大限度的避免這個問題。
一個穩定的接口,其輸入與輸出都是穩定的,根本不須要所謂的動態指望值,咱們只須要給出參數,將返回值咱們事先設定好的寫死的數據進行斷言便可。
若是你真想把控開發業務邏輯的過程,到不如去作白盒測試與單元測試,這樣的收益更大。
接口測試在每一個人眼中的不一樣
百曉生的接口測試系列也到了尾聲了,陸續收到一些反饋,你們都認爲接口測試是一種相對比較簡單且回報率要相對高些的一種測試手段,特別是在互聯網+的浪潮之下。你們蜂擁而至後,發現接口測試其實並不簡單,也會有心力憔悴的感受,彷佛又回到了UI自動化的怪圈。針對這種狀況,百曉生也是急你們之所急,跟不少測試界大牛交流了這些問題,通過整理,但願能對你們有些幫助。
Q:你所理解的接口測試?
A:接口測試自己不難,難的是監控。
Q:監控是指監控哪方面?
A:主要2個方面,性能和功能。性能主要是看接口的響應時間,指定告警閥值,告警策略。例如,10分鐘內,平均響應時間超過某個值。這裏的性能是劈開併發。功能主要看接口在灌入正確參數,異常參數的一些返回值,也就是業務邏輯的檢查。
Q:那這個監控是指接口測試腳本的執行了?
A:是的,接口測試腳本調試完成後,就能夠丟到執行中心去執行了,也就是監控。
Q:驗證是如何作的?也就是指望值是如何產生的?
A:你測試一個接口,連指望值都不知道,怎麼測?因此,指望值你是知道的。
Q:指望值,有的人是從數據庫取值,而後與返回值進行比對,有的是直接寫死,而後與返回值比對,大家採用的是哪一種方式?
A:咱們不是寫死的,測試接口的數據大多數是動態生成,也就是說經過調用其餘接口來準備你待測接口的數據, 在接口自動化的過程當中,不操做數據庫。
Q:經過調用其餘接口來準備你待測接口的數據,舉個例子說明一下?
A:有些場景,譬如接口B依賴接口A的返回,你在測試接口B的時候,就應該先調用接口A,拿到返回做爲接口B的測試輸入, 而不是直接從數據庫拿一個A數據,或者寫死一個數據。
Q:若是這個接口不依賴任何,其指望值是否是寫死就好一些?
A:有些返回裏面永恆不變的,寫死沒問題,有些東西要變的,寫死就不行了,變的狀況通常使用通配來檢查。也就是說,返回值裏,可能分兩部分:變化的,與不變的。那咱們也能夠分兩部分來檢查,變化的,通配檢查,不變的,能夠寫死的進行檢查。
Q:執行中心統必定時多長時間運行一次?
A:這個看你的用例規模,執行引擎的數量,若是你的資源不夠,非要1分鐘執行一次,那確定跪。
Q:接口平臺會起到什麼做用?
A:平臺只是提供一些用例編寫,維護的便利,執行策略等常規配置,至於沒有平臺,你照樣能夠完成這些事情。
Q:大家如何作的接口測試?
A:很簡單,用EXCEL來維護用例與數據,寫個執行引摯就能夠了。
Q:驗證時,有去查數據庫嗎?
A:分狀況而言,通常不去驗證數據庫。
Q:腳本寫完後,如何實施?好比是丟在線上進行不間斷的跑?
A:構建的時候觸發,構建完成->觸發任務->經過。天天也會有BVT測試。
。。。。。。
交流至此,不知道對你們有沒有啓發,也但願你們從迷惑中走出來,真正讓自動化給咱們帶來生產上的效益,而不是成爲咱們去面試 談薪水時的噱頭而已。