開始做實際項目前,先拿個網上的簡單API練下手
一、API說明:
接口信息
接口名:京東獲取單個商品價格
入參: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串數據量很大,則比較難找到錯誤的原因
兩者使用遞歸對比,實現難度會高點,好處是更准確、后續定位錯誤容易、維護工作量極低,具體后面再說。