python+requests 接口自動化測試實戰

首先介紹一下python的requests模塊:

requests的使用介紹:requests快速入門

Python結合requests庫實現接口自動化測試

環境說明:

1.WIN 7, 64位
2.Python3.4.3 (pip-8.1.2)
3.Requests —>pip install requests
4.Unittest —>unittest 框架是python自帶的單元測試框架,python2.1及其以后的版本已將unittest作為一個標準塊放入python開發包中,所以unittest不用單獨安裝。
5.測試報告利用HTMLTestRunner生成。

測試思路:

1、先把每個http接口一個一個寫腳本測試。(提交的json串直接放在data字典中,這里沒有用到excel等寫測試用例,測試用例直接用腳本實現。)
2、寫完所有接口的測試腳本后,由于一個接口有好幾個測試用例,所有要把同一個接口的py腳本封裝成方法,每一個接口封裝成一個接口類。
3、用testsuite直接調用這些接口類,構造測試集;或利用unittest自動識別測試用例,TestLoader類中提供的discover()方法。
(命名規則:接口名稱要以test_XXX開頭)
就好把所有的接口測試用例連起來構建自動化測試了。
4、最后利用HTMLTestRunner生成測試報告。

PUT:上傳指定的URL,一般是修改,可以理解為數據庫中的update。

DELETE:刪除指定資源。

在接口測試中,一般來說,post創建數據,get獲取創建成功后的所有數據和指定的數據,put可以對創建成功后的數據 進行修改,delete是指定的資源。

目錄結構:

單個接口測試例子:

post(修改)

import requestsimport jsondef get_token():url1 = "https://**********/Token/get"content = {'appId':'***','appSecret':'******'}web = requests.get(url=url1,params=content)print(web.url)print(web.text)ty = web.texta = json.loads(ty)b = a.get('Data')apptoken = b.get('Token')return apptokenif __name__ == '__main__':get_token()復制代碼

get(查詢)

import requestsimport jsondef test_qualification_add():url = "http://xxx.xxx.xxx/audit/api/xxx/get" #測試的接口urlheaders = {"Content-Type":"application/json"}data = { #接口傳送的參數"token": "abcdefg","id": 1,"param": {"QuId":1}}r = requests.post(url = url,json = data,headers = headers) #發送請求#return r.jsonprint (r.text) #獲取響應報文print (r.status_code)if __name__=="__main__":test_qualification_add()復制代碼

其中requests.post和requests.request兩種寫法,都可以實現請求。

在進行接口測試的過程中對傳入的參數進行邊界值測試、錯誤推導測試、等價類測試等測試方法進行測試。那么一個接口就要設很多測試用例。

【點擊打開下方小卡片無償領取200G軟件測試全套資料】【軟件測試全套資料】包括:(軟件測試理論教程、App測試教程、接口測試教程、Linux教程、MySQL教程、Python編程基礎教程、APP自動化教程、項目實戰、Web自動化教程、接口自動化教程、測試框架技術教程、持續集成教程、自動化測試開發教程、測試用例、性能測試教程、安全測試教程、高頻面試題、簡歷模板合集)

?編輯【網盤資源】200G功能測試+自動化教程, 簡歷模版,高頻面試真題【無償分享】10 贊同 · 10 評論文章

下面是封裝為接口類的例子:

(一個接口地址一個類,每一個方法是一條測試用例)
(setUp()、tearDown()方法會分別作用于每個測試用例的開始和結束,如果每個類中的setUp()、tearDown(),所做的事情一樣,那么可以封裝一個自己的測試類,如代碼:)\

import requestsimport jsonimport unittestclass MyTest(unittest.TestCase): #封裝測試環境的初始化和還原的類def setUp(self): #放對數據可操作的代碼,如對mysql、momgodb的初始化等,這里不對數據庫進行操作!print("start test")passdef tearDown(self): #與setUp()相對print("end test")passclass test_xxx_get(MyTest): #把這個接口封裝一個類,下面的方法是具體的測試用例'''接口名稱:獲取資質''' #這個描述接口名稱def test_xxx_get(self):'''測試用例1:哈哈''' #這個描述接口用例名稱self.url = "http://xxx.xxx.xxx/audit/api/xxx/get" #請求urlself.headers = {"Content-Type":"application/json"}self.data = { #請求參數"token": "abcdefg","id": 1,"param": {"QuId": 14}} #self.用在方法屬性中,表示是該方法的屬性,不會影響其他方法的屬性。r = requests.post(url = self.url,json = self.data,headers = self.headers)#return r.json()print (self.r.text)print (self.r.status_code)self.assertIn("true",self.r.text) #斷言判斷接口返回是否符合要求,可以寫多個斷言!if __name__=="__main__":unittest.main()復制代碼

 unittest提供了全局的main()方法,使用它可以方便的將一個單元測試木塊變成可以直接運行的測試腳本;
main()方法使用TestLoader類來搜索所有包含在該木塊中以“test”命名開頭的測試方法,并自動執行它;\

執行方法的默認順序是:根據ASCII碼的順序加載測試用例,數字與字母的順序為:0-9,A-Z,a-z。所以以A開頭的測試用例方法會優先執行,以a開頭會后執行。
所以每一個接口類、測試用例要以test*命名,如下圖:
(測試用例放在同一個文件夾:)
\

runtest.py寫法:

import unittestimport jsonimport requestsfrom HTMLTestRunner import HTMLTestRunnerimport time#加載測試文件 (有幾多個接口就加載幾多個,一個一個加進來)import test_creative_addimport test_creative_getimport test_qualification_addimport test_qualification_getimport test_qualification_reflesh#構造測試集suite = unittest.TestSuite() #實例化#TestSuite類的addTest()方法把不同測試類中的測試方法組裝到測試套件中。#增加測試用例==》接口文件名.接口類(方法也就是這個接口的其他用例),要把每一個測試用例都增加進來!!!suite.addTest(test_creative_add.test_creative_add("test_creative_add")) #增加創意suite.addTest(test_creative_get.test_creative_get("test_creative_get")) #獲取創意suite.addTest(test_qualification_add.test_qualification_add("test_qualification_add"))#增加資質suite.addTest(test_qualification_get.test_qualification_get("test_qualification_get"))#獲取資質suite.addTest(test_qualification_reflesh.test_qualification_reflesh("test_qualification_reflesh"))#更新資質if __name__=="__main__":testunit = unittest.TestSuite()testunit.addTest(suite)#按照一定的格式獲取當前的時間now = time.strftime("%Y-%m-%d %H_%M_%S")#定義報告存放路徑filename = './' + now + 'test_result.html'fp = open(filename,"wb")#定義測試報告runner = HTMLTestRunner(stream = fp,title = "xxx接口測試報告",description = "測試用例執行情況:")#運行測試runner.run(testunit)fp.close() #關閉文件對象把數據寫進磁盤復制代碼

如果有幾百條測試用例,在runtest腳本中一個個增加測試用例,那么就很麻煩啦,其實用discover()一步就搞掂了。
discover函數介紹:
discover(start_dir,pattern=’test*.py’,top_level_dir=None)

找到指定目錄下所有測試模塊,并可遞歸查到子目錄下的測試木塊,只有匹配到的文件名才會被加載。如果啟動的不是頂層目錄,那么頂層目錄必然單獨指定。
start_dir:要測試的木塊名或測試用例的目錄。
pattent=‘test?.py’:表示用例文件名的匹配原則。此處匹配文件名一test開頭的所有.py類型文件,?表示任意多個字符。
top_level_dir=None :測試木塊的頂層目錄,如果沒有頂層目錄,默認為None。
這里測試用例都放在同一個目錄,都以test*.py的形式!!(如上圖)\

runtest2.py寫法:

import unittestimport jsonimport requestsfrom HTMLTestRunner import HTMLTestRunnerimport time#定義測試用例的目錄為當前目錄test_dir = './'discover = unittest.defaultTestLoader.discover(test_dir,pattern = 'test*.py')if __name__=="__main__":#按照一定的格式獲取當前的時間now = time.strftime("%Y-%m-%d %H-%M-%S")#定義報告存放路徑filename = './' + now + 'test_result.html'fp = open(filename,"wb")#定義測試報告runner = HTMLTestRunner(stream = fp,title = "xxx接口測試報告",description = "測試用例執行情況:")#運行測試runner.run(discover)fp.close() #關閉報告文件復制代碼

整合自動化測試發送測試報告:

runtest_mail.py

import unittestimport requestsfrom HTMLTestRunner import HTMLTestRunnerimport timeimport osimport smtplibfrom email.mime.text import MIMETextfrom email.header import Header#======定義發送郵件========def send_mail(file_new):f = open(file_new,'rb')mail_body = f.read()f.close()msg = MIMEText(mail_body,'html','utf-8')msg['Subject'] = Header('xxx接口自動化測試報告','utf-8')smtp = smtplib.SMTP()smtp.connect('smtp.sina.com')smtp.login('xxx@sina.com','xxx336..')smtp.sendmail('xxx@sina.com','10xxx6@qq.com',msg.as_string())smtp.quit()print('郵件已發出!注意查收。')#======查找測試目錄,找到最新生成的測試報告======def new_report(test_report):lists = os.listdir(test_report)lists.sort(key=lambda fn:os.path.getmtime(test_report + '\' + fn))file_new = os.path.join(test_report,lists[-1])print(file_new)return file_newif __name__ == "__main__":test_dir = "D:\dsp_testpro\test_case"test_report = "D:\dsp_testpro\test_report"discover = unittest.defaultTestLoader.discover(test_dir,pattern = 'test*.py')#按照一定的格式獲取當前的時間now = time.strftime("%Y-%m-%d_%H-%M-%S-")#定義報告存放路徑filename = test_report + "\" + now + 'result.html'fp = open(filename,'wb')#定義測試報告runner = HTMLTestRunner(stream = fp,title = "xxx接口測試報告",description = "測試用例執行情況:")#運行測試runner.run(discover)fp.close() #關閉報告文件new_report = new_report(test_report)send_mail(new_report)復制代碼

綿薄之力

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


軟件測試面試資料

被百萬人刷爆的軟件測試題庫!!!誰用誰知道!!!卷起來!

?

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

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

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

相關文章

NAT 實驗

NAT 實驗 一.實驗拓撲圖實驗目的 1.按照圖示配置 IP 地址 2.私網 A 通過 R1 接入到互聯網,私網 B 通過 R3 接入到互聯網 3.私網 A 內部存在 Vlan10 和 Vlan20,通過 R1 上單臂路由訪問外部網絡 4.私網 A 通過 NAPT 使 Vlan10 和 Vlan20 都能夠使用 R1 的公…

buuctf——web刷題第三頁

第三頁 目錄 [FBCTF2019]RCEService [0CTF 2016]piapiapia [Zer0pts2020]Can you guess it? [WUSTCTF2020]顏值成績查詢 [SUCTF 2019]Pythonginx [MRCTF2020]套娃 [CSCCTF 2019 Qual]FlaskLight [watevrCTF-2019]Cookie Store [WUSTCTF2020]CV Maker [紅明谷CTF 202…

前后端分離項目中的接口設計與調用流程——以高仙機器人集成為例

一、背景介紹在前后端分離項目開發中,前端頁面需要頻繁調用后端接口獲取數據。在高仙機器人對接項目中,我們采用了若依(RuoYi)框架,前端通過統一的 API 封裝與后端進行數據交互,而后端再對接高仙官方的 OPE…

【第五節】部署http接口到ubuntu server上的docker內

描述清楚需求,讓deepseek幫我們寫一個demo,文件結構如下 FLASK_API_001 ├── app.py └── Dockerfile └── requirements.txtapp.pyfrom flask import Flask, jsonify, requestapp Flask(__name__)# 根路由 app.route(/) def home():return "…

在 IntelliJ IDEA 中添加框架支持的解決方案(沒有出現Add Framework Support)

在 IntelliJ IDEA 中添加框架支持的解決方案 問題背景 版本變化:在 IntelliJ IDEA 2023.2 及更高版本中,項目右鍵菜單中的 “Add Framework Support” 選項已被移除。 常見需求:為 Java 項目添加框架支持(如 Maven、Spring 等&am…

北京-4年功能測試2年空窗-報培訓班學測開-第五十天

咦,昨天路上寫一半就到家了,后來想早點睡就忘了還要發了,現在趕緊補上昨天是最后一節課(我們將一整天的課稱為一節),這就結課了昨天講了簡歷編寫,面試要準備的內容,還有redis和docker也沒有什么…

華為鴻蒙HarmonyOpenEye項目:開眼App的鴻蒙實現之旅

華為鴻蒙HarmonyOpenEye項目:開眼App的鴻蒙實現之旅 引言 在當今移動應用開發的浪潮中,鴻蒙系統憑借其獨特的分布式能力和高效的開發框架,吸引了眾多開發者的目光。今天要給大家介紹的是一個基于華為鴻蒙系統開發的開眼App項目——HarmonyO…

代碼隨想錄day36dp4

文章目錄1049.最后一塊石頭的重量II494.目標和474.一和零1049.最后一塊石頭的重量II 題目鏈接 文章講解 class Solution { public:int lastStoneWeightII(vector<int>& stones) {// 1. 確定 DP 數組及下標的含義&#xff1a;// dp[i][j] 表示考慮前 i 塊石頭&#…

Python 爬蟲實戰指南:按關鍵字搜索商品

在電商領域&#xff0c;按關鍵字搜索商品并獲取其詳情信息是一項常見的需求。無論是進行市場調研、競品分析還是用戶體驗優化&#xff0c;能夠快速準確地獲取商品信息都至關重要。1688 作為國內領先的 B2B 電商平臺&#xff0c;提供了豐富的商品資源。本文將詳細介紹如何使用 P…

【源力覺醒 創作者計劃】百度AI的開放新篇章:文心4.5本地化部署指南與未來生態戰略展望

百度AI的開放新篇章&#xff1a;文心4.5本地化部署指南與未來生態戰略展望 一起來玩轉文心大模型吧&#x1f449;文心大模型免費下載地址&#xff1a;https://ai.gitcode.com/theme/1939325484087291906 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30…

測試工作中的質量門禁管理

一、前言 測試階段的質量門禁設計要考慮幾個維度,首先是研發流程的階段劃分,每個階段都要有明確的準入準出標準;其次要考慮不同測試類型的特點,比如功能測試和性能測試的驗收標準肯定不同;最后還要平衡質量要求和項目進度。 在單元測試階段,可以設置通過率和覆蓋率的閾值…

線上分享:解碼eVTOL安全基因,構建安全飛行生態

隨著城市空中交通&#xff08;UAM&#xff09;快速發展&#xff0c;電動垂直起降飛行器&#xff08;eVTOL&#xff09;面臨嚴格的安全與可靠性要求&#xff0c;需滿足全球適航標準及全生命周期分析。安全與可靠的飛行系統成為行業關注的焦點。在此背景下&#xff0c;本期線上分…

C回調函數基礎用法

&#x1f4cc; 定義&#xff1a;回調函數是通過函數指針傳遞給另一個函數的函數&#xff0c;這個被傳進去的函數將在某個時刻被“回調”調用。換句話說&#xff1a;你定義一個函數 A把函數 A 的地址&#xff08;即函數指針&#xff09;作為參數傳給函數 B函數 B 在合適的時機調…

手撕設計模式之消息推送系統——橋接模式

手撕設計模式之消息推送系統——橋接模式 1.業務需求 ? 大家好&#xff0c;我是菠菜啊&#xff0c;好久不見&#xff0c;今天給大家帶來的是——橋接模式。老規矩&#xff0c;在介紹這期內容前&#xff0c;我們先來看看這樣的需求&#xff1a;我們現在要做一個消息推送系統&…

Java 大廠面試題 -- JVM 垃圾回收機制大揭秘:從原理到實戰的全維度優化

最近佳作推薦&#xff1a; Java 大廠面試題 – JVM 面試題全解析&#xff1a;橫掃大廠面試&#xff08;New&#xff09; Java 大廠面試題 – 從菜鳥到大神&#xff1a;JVM 實戰技巧讓你收獲滿滿&#xff08;New&#xff09; Java 大廠面試題 – JVM 與云原生的完美融合&#xf…

圖機器學習(9)——圖正則化算法

圖機器學習&#xff08;9&#xff09;——圖正則化算法1. 圖正則化方法2. 流形正則化與半監督嵌入3. 神經圖學習4. Planetoid1. 圖正則化方法 淺層嵌入方法已經證明&#xff0c;通過編碼數據點間的拓撲關系可以構建更魯棒的分類器來處理半監督任務。本質上&#xff0c;網絡信息…

視頻動態范圍技術演進:從SDR到HDR的影像革命

一、動態范圍技術基礎認知 1.1 人眼視覺特性與動態范圍 人眼的動態感知范圍可達106:1&#xff08;0.0001-105 cd/m&#xff09;&#xff0c;遠超傳統顯示設備能力。視網膜通過虹膜調節&#xff08;物理孔徑&#xff09;與光化學反應&#xff08;光敏蛋白分解&#xff09;實現16…

基于LAMP環境的校園論壇項目

1.配置本地倉庫a.修改主機名為自己姓名全拼[rootserver ~]# hostnamectl set-hostname jun [rootserver ~]# bash [rootjun ~]# 運行結果圖如下圖所示&#xff1a;b.光盤掛載到/mnt目錄下[rootjun yum.repos.d]# mount /dev/sr0 /mnt mount: /mnt: WARNING: source write-prote…

在物聯網系統中時序數據庫和關系型數據庫如何使用?

在物聯網系統中&#xff0c;時序數據庫&#xff08;TSDB&#xff09;和關系型數據庫&#xff08;RDBMS&#xff09;的存儲順序設計需要根據數據特性、業務需求和系統架構綜合考慮。以下是典型的設計方案和邏輯順序&#xff1a;1. 常見存儲順序方案 方案一&#xff1a;先寫時序數…

django安裝、跨域、緩存、令牌、路由、中間件等配置

注意&#xff1a;如果是使用 PyCharm 編程工具就不用創建虛擬化&#xff0c;直接打開 PyCharm 選擇新建的目錄直接調過下面的步驟11. 項目初始化如果不是用 PyCharm 編輯器就需要手動創建虛擬環境在項目目錄cmd&#xff0c;自定義名稱的虛擬環境# 激活虛擬環境 python -m venv …