接口自動化測試用例詳解

🍅 點擊文末小卡片,免費獲取軟件測試全套資料,資料在手,漲薪更快

Post接口自動化測試用例

Post方式的接口是上傳接口,需要對接口頭部進行封裝,所以沒有辦法在瀏覽器下直接調用,但是可以用Curl命令的-d參數傳遞接口需要的參數。當然我們還以眾籌網的登錄接口為例,講解post方式接口的自動化測試用例。

(1)接口文檔

.登錄(POST)
URL:http://api.zhongchou.cn/user/login

參數:

  • identity,用戶名、用戶手機、用戶郵箱,三者之一
  • password,用戶密碼

返回:

  • errno,0:表示成功,非0:表示失敗
  • User基礎數據結構
  • token,成功會返回32位token字符串,失敗會返回空字符串

這個接口文檔很清楚,就是傳遞用戶名和密碼進行登錄,登錄后會返回user基本數據結構和Token。

(2)Curl命令執行

分析了接口文檔,我們需要在終端下執行接口,然后才能根據接口的返回值來編寫對應的接口測試用例。

在終端下執行命令:

[root@n028 api]# curl -d ‘identity=1838905&password=a**0’ http://api.zhongchou.cn/user/login?v=1

其中的identity為眾籌網的用戶名,password為密碼,V=1是因為這個接口是第一版本的。執行結果如圖所示:

(3)Curl返回值查看

由于post方式無法用瀏覽器直接調用,返回結果是編碼后的json字符串,不方便我們查看結果。所以我們要借助于chrome的插件。

打開chrome瀏覽器->右擊瀏覽器,選擇“審查元素”->在瀏覽器下部選擇“Console”選項卡。在打開的欄目下的“>”后輸入dir().然后將剛剛終端Curl返回的結果拷貝到這個函數中,回車即可解析結果。如圖所示:

(4)PHP調用Post方式接口

PHP調用Post接口和Get方式有所不同,一般用以下方式調用,而且是固定的:

public function testlogin(){$url='http://api.zhongchou.cn/user/login?v=1';$post_params=array('identity'=>'183****8905','password'=>'a0****0');$ch = curl_init();//初始化curlcurl_setopt($ch, CURLOPT_URL,$url);//抓取指定網頁curl_setopt($ch, CURLOPT_HEADER, 0);//設置headercurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求結果為字符串且輸出到屏幕上curl_setopt($ch, CURLOPT_POST, 1);//post提交方式curl_setopt($ch, CURLOPT_POSTFIELDS,$post_params);$data = curl_exec($ch);//運行curlcurl_close($ch);echo  $data;}

然后執行代碼,就可以看到如圖所示的輸出結果:

如到Get方式,這個輸出結果同樣是經過編碼后的json字符串,我們也需要對其進行json_decode()解碼一下,然后再輸出結果。所以增加以下兩行代碼:

此時的輸出結果圖所示,簡單清晰了許多。

(5)PHP編寫Post接口自動化測試用例

現在PHP能調用post方式的接口了,可是沒有添加自動判斷執行結果的腳本,不算是一個真正的測試用例。接下來我們添加上對返回值的assert語句,使之成為一個完整的自動化測試用例。

完整的測試用例如下:

public function testlogin(){$url='http://api.zhongchou.cn/user/login?v=1';$post_params=array('identity'=>'183****8905','password'=>'a0******0');$ch = curl_init();//初始化curlcurl_setopt($ch, CURLOPT_URL,$url);//抓取指定網頁curl_setopt($ch, CURLOPT_HEADER, 0);//設置headercurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求結果為字符串且輸出到屏幕上curl_setopt($ch, CURLOPT_POST, 1);//post提交方式curl_setopt($ch, CURLOPT_POSTFIELDS,$post_params);$res = curl_exec($ch);//運行curlcurl_close($ch);$data=json_decode($res,true);//print_r($data);if(is_null($data)==false){if($data['errno']=='0'){$this->assertEquals('0',$data['errno']);//判斷errno是否為0,此步為拋出執行通過$index =strpos($data['data']['name'],'8905');$this->assertnotEquals(-1,$index);//判斷結果是否包含關鍵字print('接口/user/login:登錄接口------------------OK'."\n");}else{$this->assertEquals('0',$data['errno']);//拋出執行失敗print("接口/user/login:登錄接口---------------Failure!"."\n".$res."\n");}}}

Assert判斷語句和get相似,先判斷返回errno,然后判斷返回的name是不是我們剛剛登錄的賬號。當然如果返回值不是我們預期的,也要使測試用例執行失敗。執行結果如圖所示,同樣如果要看接口返回值 ,注銷掉//print_r($data);

測試用例的覆蓋

上面我們講述了get和post兩種方式的接口自動化測試用例的編寫,通過運行我們發現還是挺簡單的嘛。不過上面兩種測試用例只是接口的一個正常的測試用例,而對于一個接口的測試用例覆蓋是非常多的。下面我們就常用的接口測試用例覆蓋方法列舉一下:

(1)必需參數覆蓋。對于接口的參數,接口文檔一般都會說明哪些兒是必需的,哪兒是非必需的。對于必需的參數,一定要測試傳參數和不傳參數接口是否報錯?

(2)必需的參數各種情況覆蓋。傳非法的字符,特殊的字符,空值,超過邊界的參數是否報錯?錯誤信息是否正確?

(3)非必需參數覆蓋。一般接口對于非必需參數都不會做非正常性傳值的判斷,所以要測試合法的參數值 ,接口返回的內容是否正確。如果有接口文檔說明對非必需參數做了非正常的驗證的話,也要對其進行驗證。

(4)參數的組合覆蓋。有些兒參數需要相互配合著才起作用,如“offset”和“count”組合起來進行翻頁,這個時候要組合起來進行測試。

(5)業務邏輯相關的覆蓋。有些兒接口與業務邏輯關聯密切,單獨從接口角度測試,可能會遺漏掉一些兒因業務邏輯而產生的bug。所以如果和業務邏輯相關,也要考慮到業務邏輯相關的測試用例。

其實接口的測試用例差不多也就這些兒情況,也許有特殊的接口,到時候和產品,開發人員做好溝通,盡量先從接口層面保證質量。這樣再從測試接口的應用層的時候,就可以少很多工作量,只注重樣式和各個接口調用的配合就可以了。

本章小結

本章講述了常用的Get和Post方式Curl命令調用,瀏覽器調用和查看接口返回值的方法,以及對應的接口自動化用例的編寫方法。最后還介紹了接口測試用例的覆蓋方法,通過本章的學習我們可以參照接口文檔,寫出這個接口的所有自動化測試用例。下章節我們將講述對測試架構的規劃及測試用例的組織。

最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:

這些資料,對于做【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!凡事要趁早,特別是技術行業,一定要提升技術功底。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917785.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917785.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917785.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaEE初階第十四期:解鎖多線程,從 “單車道” 到 “高速公路” 的編程升級(十二)

專欄:JavaEE初階起飛計劃 個人主頁:手握風云 目錄 一、JUC的常見類 1.1. Callable接口 1.2. ReentrantLock? 1.3. 信號量Semaphore 1.4. CountDownLatch 二、線程安全的集合類 2.1. 多線程環境使用 ArrayList? 2.2. 多線程環境使用哈希表 一、…

什么是RabbitMQ?

什么是RabbitMQ? 一、什么是RabbitMQ? 二、Rabbitmq 的使用場景? 三、RabbitMQ基本概念 四、RabbitMQ的工作模式 1. **簡單隊列模式(Simple Queue)** 2. **工作隊列模式(Work Queue)** 3. **發布/訂閱模式(Publish/Subscribe)** 4. **路由模式(Routing)** 5. **主題…

DVWA靶場第一關--Brute force 新手入門必看!!!

文中涉及講解burp爆破模塊介紹可能不太準確,請大佬批評指正就dvwa靶場而言,兩個常見漏洞讓我有了新的認知第一個接觸的漏洞為弱口令漏洞,常見情況下,人們口中的弱口令可能為“姓名縮寫”“123456”“生日簡寫等”接觸了dvwa&#…

完美解決Docker pull時報錯:https://registry-1.docker.io/v2/

1、錯誤描述rootubuntu-database:/opt/dify/docker# docker compose up -d [] Running 9/9? api Error context canceled …

用 Python 批量處理 Excel:從重復值清洗到數據可視化

引言日常工作中,經常需要處理多份 Excel 表格:比如合并銷售數據、清洗重復的用戶信息,最后生成可視化圖表。手動操作不僅效率低,還容易出錯。這篇文章分享一套 Python 自動化流程,用pandas和matplotlib搞定從數據清洗到…

4.5 點云表達方式——圖

(一)定義與原理 圖4-5-1 點云圖結構

wordpress菜單調用的幾種常見形式

在WordPress主題開發里,“菜單”在前端頁面中常見的調用/輸出形式可以歸納為5種,按出現頻率從高到低列給你,并給出最簡代碼片段,方便直接復制粘貼。 標準菜單位置調用(99%場景) 后臺“外觀→菜單”里把菜單A指派到菜單位置prima…

linux中pthread_t 的值與top -Hp中線程id值的區別

linux中pthread_t 值與top -Hp中線程id值的區別 #include <stdio.h> #include <pthread.h> #include <thread>void thread_func() {printf("child thread id0x%x\n",pthread_self());while(1){ printf("hello world\n");} }int ma…

Idea集成Jenkins Control插件,在IDEA中觸發Jenkins中項目的構建

IDEA可以下一個這個插件 Jenkins Control&#xff0c;直接在idea中觸發測試環境項目的部署測試環境API-TOKEN&#xff1a;XXXXXXXXXXXXXXXX&#xff08;在jenkins的首頁 - 系統管理 - 管理用戶中獲取&#xff09;配置號后&#xff0c;測試連接&#xff0c;需要是成功的狀態&…

【ARM】CMSIS6 介紹

1、 簡介CMSIS是通用微控制器軟件接口標準(Common Microcontroller Software Interface Standard ) 的簡寫。CMSIS 包括API、軟件組件、工具及工作流程&#xff0c;主要用于簡化軟件重用、縮短開發人員學習曲線&#xff0c;加快項目構建和調試&#xff0c;從而使產品更快上市。…

【含文檔+PPT+源碼】基于SSM的旅游與自然保護平臺開發與實現

項目介紹 本課程演示的是一款&#xff1f;&#xff1f;&#xff0c;主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習者。 包含&#xff1a;項目源碼、項目文檔、數據庫腳本、軟件工具等所有資料 帶你從零開始部署運行本套系統 該項目附帶的源碼資料…

QT6 源,十章繪圖(2)畫刷 QBrush:刷子只涉及填充顏色,線型,填充圖片,以及變換矩陣這幾個屬性,附源代碼帶注釋。

&#xff08;1&#xff09;本類的繼承關系如下 &#xff1a;&#xff08;2&#xff09;本類是支持流運算的 &#xff1a;&#xff08;3&#xff09;本類的構造函數與運算符 operator 函數 &#xff1a;關于本類的構造函數&#xff0c;進行以下測試 &#xff1a;只修改畫刷的構…

安科瑞智慧能源管理系統在啤酒廠5MW分布式光伏防逆流控制實踐

項目信息 光伏裝機1MW&#xff0c;3個并網點&#xff0c;低壓接 入配電系統。 要求自發自用、余電不上網。解決方案 通過防逆流保護裝置&#xff0c;做到剛性控制&#xff0c; 實現并網柜快速切斷&#xff1b;通過防逆流管理系統&#xff0c;做到柔性調節&#xff0c; 實現光伏…

VUE-第二季-02

3.Vue組件化 3.1 什么是組件 (1) 傳統方式開發的應用 一個網頁通常包括三部分&#xff1a;結構&#xff08;HTML&#xff09;、樣式&#xff08;CSS&#xff09;、交互&#xff08;JavaScript&#xff09; 傳統應用存在的問題&#xff1a; ① 關系縱橫交織&#xff0c;復雜…

【OpenGL】LearnOpenGL學習筆記02 - 繪制三角形、矩形

上接: https://blog.csdn.net/weixin_44506615/article/details/149861824 完整代碼&#xff1a;https://gitee.com/Duo1J/learn-open-gl 一、渲染管線 在開始之前&#xff0c;我們先簡單了解一下圖形渲染管線 在渲染3D物體時&#xff0c;我們常用到的一種幾何結構為網格模型…

Mysql的事務是什么?

簡單來說&#xff0c;MySQL 實現事務的核心就像是給你的數據庫操作加了一套“保險和存檔”機制。它確保了你的操作要么全部成功&#xff0c;要么全部失敗&#xff0c;并且在面對多人同時操作、系統突然崩潰等情況時&#xff0c;數據依然可靠、準確。 為什么需要事務呢&#xff…

測試開發:Python+Django實現接口測試工具

【測試開發天花板】DjangoVuePyTest打造企業級自動化平臺&#xff5c;能寫進簡歷的硬核項目最近被幾個公司實習生整自閉了&#xff0c;沒有基礎&#xff0c;想學自動化又不知道怎么去學&#xff0c;沒有方向沒有頭緒&#xff0c;說白了其實就是學習過程中沒有成就感&#xff0c…

TFS-2022《A Novel Data-Driven Approach to Autonomous Fuzzy Clustering》

核心思想 這篇論文的核心思想是提出一種全新的、數據驅動的自主模糊聚類&#xff08;Autonomous Fuzzy Clustering, AFC&#xff09;算法。其核心創新在于&#xff0c;它巧妙地結合了模糊聚類的靈活性和基于中位數&#xff08;medoids&#xff09;聚類的可解釋性&#xff0c;并…

ELK是什么

ELK 是一個廣受歡迎的開源技術棧&#xff0c;用于實時采集、處理、存儲、搜索、分析和可視化海量的日志數據&#xff08;log&#xff09;和機器生成的數據&#xff08;machine data&#xff09;&#xff0c;尤其是在 IT 系統監控、應用故障排查、安全分析和業務智能等領域應用廣…

[硬件電路-123]:模擬電路 - 信號處理電路 - 常見的高速運放芯片、典型電路、電路實施注意事項

一、高速運放常見芯片型號及特性高速運放&#xff08;高速運算放大器&#xff09;通常指帶寬&#xff08;GBW&#xff09;超過10MHz、壓擺率&#xff08;SR&#xff09;高于10V/μs的器件&#xff0c;適用于視頻處理、通信系統、高速數據采集等場景。以下是典型芯片及其特性&am…