3、大型項目的接口自動化實踐記錄----開放API練習


開始做實際項目前,先拿個網上的簡單API練下手

一、API說明:

接口信息

接口名:京東獲取單個商品價格

地址:http://p.3.cn/prices/mgets

入參:skuids=J_商品ID&type=1

接口返回:[{"cbf":"","id":"","m":"","op":"","p":""}]

skuids說明:可通過具體頁面查看,如http://item.jd.com/954086.html,頁面中商品ID為954086

瀏覽器訪問接口

我們在瀏覽器訪問URL:http://p.3.cn/prices/mgets?skuIds=954086&type=1

可以看到,結果為[{"cbf":"0","id":"J_954086","m":"859.00","op":"459.00","p":"-1.00"}]


 

二、robotframework實現

首先先建一個測試用例:

右鍵suite,彈窗點擊New Test Case


 

輸入測試用例名,點擊OK:


 

按照上一篇提過的,要先跟服務器打個招呼

1、跟服務端打招呼:Create Session

如下就是跟http://p.3.cn打招呼,而headers可以理解為外表及打招呼的方式


 

2、打完招呼,服務器會給予回應,收到回應后,則開始請求對方做具體的事情:Get Request

如下就是跟對方說,我想看一下商品ID為J_95046的價格信息。


 

3、以上就完成了與服務器的交互,執行用例看一下結果

可以看到,返回的是<Response[200]>,好像不是我們預期的文本,那是因為它是一個對象


 

4、上一步獲取到的結果${resp}是個對象,而一般我們會想要接口返回的編碼、json串內容或文本,那要怎么解析它呢。


 

${resp.status_code}:返回的編碼

${resp.text}:返回的文本

To Json ${resp.content}:把內容轉為json串


 

結果如上圖,編碼、文本等都是resp的屬性,更多resp對象屬性說明見下圖:


 

5、獲取到了實際結果,作為測試用例,還少一個跟預期結果對比:

①簡單對比:返回的編碼為指定值,返回的文本包含指定key


 

如果不等會怎樣呢,我們把上面預期結果的狀態碼改成201,則會報如下錯


 

②對比返回的文本中指定key的具體值,如p的值


 

${result}是一個list

${result[0]}取到第一個值,即{"cbf":"0","id":"J_954086","m":"859.00","op":"459.00","p":"-1.00"}

${result[0]['p']}則取到的是p的值

③全文本對比,這種方式數據稍微有變化,就不可用


 

就如這個案例中,用上述的方式對比,結果會報錯


 

看上去兩個數據明明一樣,結果它卻報不等

獲取兩者長度對比,才發現,前者比后者多一個字段,發現是文本的最后多了個空格。

④返回的json與預期的json對比

通過To Json,把content轉為json格式,然后自己構造一個完全一樣格式的變量,然后對比


 

⑤全文本與數據庫查詢結果對比

        從數據庫中查詢出對應的值,然后類似④中構造出一個格式一樣的變量,然后對比

        ④、⑤中對比,都有個問題,如果兩者不相等,需要肉眼觀察不等的原因,如果兩個json串數據量很大,則比較難找到錯誤的原因

        兩者使用遞歸對比,實現難度會高點,好處是更准確、后續定位錯誤容易、維護工作量極低,具體后面再說。

 

上一篇  2、大型項目的接口自動化實踐記錄--接口測試簡介及RequestsLibrary關鍵字簡介

下一篇  4、大型項目的接口自動化實踐記錄----數據分離


免責聲明!

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



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