python使用requests+excel進(jìn)行接口自動(dòng)化測試的實(shí)現(xiàn)
在當(dāng)今的互聯(lián)網(wǎng)時(shí)代中,接口自動(dòng)化測試越來越成為軟件測試的重要組成部分。Python是一種簡單易學(xué),高效且可擴(kuò)展的語言,自然而然地成為了開發(fā)人員的首選開發(fā)語言。而requests和xlwt這兩個(gè)常用的Python標(biāo)準(zhǔn)庫,能夠幫助我們輕松地開發(fā)接口自動(dòng)化測試,更快更好地完成測試工作。
下面是這兩個(gè)庫在接口自動(dòng)化測試中可帶來的好處:
1. requests可以方便地模擬發(fā)送HTTP請(qǐng)求,實(shí)現(xiàn)接口測試,支持GET、POST、PUT、DELETE等請(qǐng)求方式。使用requests,我們可以輕松實(shí)現(xiàn)對(duì)接口的請(qǐng)求及返回結(jié)果的處理。
import requests response = requests.get('http://example.com')
2. requests提供了對(duì)HTTP頭的復(fù)雜處理和特定認(rèn)證方案的支持,包括Basic,Digest,OAuth等。這意味著我們可以輕松地實(shí)現(xiàn)接口的授權(quán)認(rèn)證。
import requests response = requests.get('http://example.com', auth=('user', 'pass'))
3. requests支持Cookie和Session的處理,可以用來保證用戶的身份認(rèn)證或后續(xù)請(qǐng)求的連續(xù)性。這對(duì)于需要進(jìn)行多次調(diào)用接口的測試非常有用。
4. xlwt庫支持將測試結(jié)果以Excel格式將結(jié)果輸出或記錄。接口自動(dòng)化測試有的時(shí)候需要輸出測試報(bào)告,xlwt可以方便地將測試結(jié)果輸出為Excel表格。
import xlwt book = xlwt.Workbook(encoding='utf-8') sheet = book.add_sheet('Sheet1') sheet.write(0, 0, '接口名稱') sheet.write(0, 1, '測試結(jié)果') sheet.write(1, 0, 'test API') sheet.write(1, 1, 'Pass') book.save('result.xls')
5. xlwt庫為測試結(jié)果提供格式化的輸出,用戶可以自定義表格樣式以及表格內(nèi)容的格式、字體、顏色、邊框等,以便用戶快速理解接口測試結(jié)果,對(duì)其做出有效的應(yīng)對(duì)。
綜上所述,requests和xlwt是Python的兩個(gè)基礎(chǔ)庫,它們能夠方便地完成接口自動(dòng)化測試,并且大大提高測試的效率和精度。因此,如果您還沒有使用它們進(jìn)行接口自動(dòng)化測試,不妨試試看以下的接口自動(dòng)化測試框架DEMO。
完整代碼
import requests import xlwt import xlrd import unittest class BaseTestCase(unittest.TestCase): url = "" # 接口請(qǐng)求的 URL method = "GET" # 接口請(qǐng)求的方法 data = {} # 接口請(qǐng)求的數(shù)據(jù) headers = {} # 接口請(qǐng)求的頭部 expected_code = 200 # 預(yù)期的 HTTP 狀態(tài)碼 expected_result = {} # 預(yù)期的響應(yīng)結(jié)果 def setUp(self): """每個(gè)測試方法執(zhí)行前調(diào)用""" pass def tearDown(self): """每個(gè)測試方法執(zhí)行后調(diào)用""" pass def run_case(self, case): """動(dòng)態(tài)創(chuàng)建的測試方法,執(zhí)行測試用例""" self.url = case['url'] self.method = case['method'] self.data = case['data'] self.headers = case.get('headers', {}) self.expected_code = case.get('expected_code', 200) self.expected_result = case.get('expected_result', {}) self.test_api() def test_api(self): """測試用例實(shí)現(xiàn)""" response = requests.request(self.method, url=self.url, headers=self.headers, data=self.data) self.assertEqual(response.status_code, self.expected_code) # 斷言響應(yīng)的 HTTP 狀態(tài)碼是否與預(yù)期一致 self.assertDictEqual(response.json(), self.expected_result) # 斷言響應(yīng)的結(jié)果是否與預(yù)期一致 def read_excel(file_path, sheet_name): workbook = xlrd.open_workbook(file_path) # 打開 Excel 文件 sheet = workbook.sheet_by_name(sheet_name) # 獲取 Excel 工作表 rows = sheet.nrows # 獲取行數(shù) cases = [] for i in range(1, rows): # 從第 2 行開始讀取測試用例 case = {} case['url'] = sheet.cell_value(i, 0) # 讀取接口請(qǐng)求的 URL case['method'] = sheet.cell_value(i, 1) # 讀取接口請(qǐng)求的方法 case['data'] = sheet.cell_value(i, 2) # 讀取接口請(qǐng)求的數(shù)據(jù) case['headers'] = sheet.cell_value(i, 3) # 讀取接口請(qǐng)求的頭部 case['expected_code'] = int(sheet.cell_value(i, 4)) # 讀取預(yù)期的 HTTP 狀態(tài)碼 case['expected_result'] = eval(sheet.cell_value(i, 5)) # 讀取預(yù)期的響應(yīng)結(jié)果 case['name'] = sheet.cell_value(i, 6) # 讀取用例名稱 cases.append(case) return cases def write_excel(file_path, sheet_name, cases): workbook = xlwt.Workbook() sheet = workbook.add_sheet(sheet_name) sheet.write(0, 0, '用例編號(hào)') sheet.write(0, 1, '用例名稱') sheet.write(0, 2, '測試結(jié)果') for i, case in enumerate(cases): sheet.write(i+1, 0, i+1) sheet.write(i+1, 1, case.get('name', '') or case['url']) sheet.write(i+1, 2, '通過' if case.get('result') else '失敗') workbook.save(file_path) if __name__ == '__main__': cases = read_excel('cases.xlsx', 'Sheet1') # 讀取測試用例 suite = unittest.TestSuite() # 創(chuàng)建測試套件 for case in cases: case_name = case.get('name', '') or case['url'] setattr(BaseTestCase, 'test_{}'.format(case_name), lambda self, case=case: self.run_case(case)) # 動(dòng)態(tài)創(chuàng)建測試方法,并將測試用例綁定到測試方法上 unittest.TextTestRunner().run(suite) # 執(zhí)行測試套件 write_excel('report.xls', 'Sheet1', cases) # 寫入測試結(jié)果報(bào)告
下面詳細(xì)介紹一下??上方代碼
1. 安裝所需要的庫和依賴項(xiàng)
pip install requests pip install xlwt
2. 編寫接口自動(dòng)化測試基類及測試用例實(shí)現(xiàn)
import requests import xlwt import unittest class BaseTestCase(unittest.TestCase): url = "" # 接口請(qǐng)求的 URL method = "GET" # 接口請(qǐng)求的方法 data = {} # 接口請(qǐng)求的數(shù)據(jù) headers = {} # 接口請(qǐng)求的頭部 expected_code = 200 # 預(yù)期的 HTTP 狀態(tài)碼 expected_result = {} # 預(yù)期的響應(yīng)結(jié)果 def setUp(self): """每個(gè)測試方法執(zhí)行前調(diào)用""" pass # 可以進(jìn)行一些初始化工作 def tearDown(self): """每個(gè)測試方法執(zhí)行后調(diào)用""" pass # 可以進(jìn)行一些清理工作 def test_api(self): """測試用例實(shí)現(xiàn)""" response = requests.request(self.method, url=self.url, headers=self.headers, data=self.data) self.assertEqual(response.status_code, self.expected_code) # 斷言響應(yīng)的 HTTP 狀態(tài)碼是否與預(yù)期一致 self.assertDictEqual(response.json(), self.expected_result) # 斷言響應(yīng)的結(jié)果是否與預(yù)期一致
3. 編寫 Excel 文件讀取和解析函數(shù)
import xlrd def read_excel(file_path, sheet_name): workbook = xlrd.open_workbook(file_path) # 打開 Excel 文件 sheet = workbook.sheet_by_name(sheet_name) # 獲取 Excel 工作表 rows = sheet.nrows # 獲取行數(shù) cases = [] for i in range(1, rows): # 從第 2 行開始讀取測試用例 case = {} case['url'] = sheet.cell_value(i, 0) # 讀取接口請(qǐng)求的 URL case['method'] = sheet.cell_value(i, 1) # 讀取接口請(qǐng)求的方法 case['data'] = sheet.cell_value(i, 2) # 讀取接口請(qǐng)求的數(shù)據(jù) case['headers'] = sheet.cell_value(i, 3) # 讀取接口請(qǐng)求的頭部 case['expected_code'] = int(sheet.cell_value(i, 4)) # 讀取預(yù)期的 HTTP 狀態(tài)碼 case['expected_result'] = eval(sheet.cell_value(i, 5)) # 讀取預(yù)期的響應(yīng)結(jié)果 cases.append(case) return cases
4. 編寫 Excel 結(jié)果報(bào)告寫入函數(shù)
def write_excel(file_path, sheet_name, cases): workbook = xlwt.Workbook() sheet = workbook.add_sheet(sheet_name) sheet.write(0, 0, '用例編號(hào)') sheet.write(0, 1, '用例名稱') sheet.write(0, 2, '測試結(jié)果') for i, case in enumerate(cases): sheet.write(i+1, 0, i+1) sheet.write(i+1, 1, case.get('name', '')) sheet.write(i+1, 2, '通過' if case.get('result') else '失敗') workbook.save(file_path)
5. 編寫主函數(shù)
if __name__ == '__main__': cases = read_excel('cases.xlsx', 'Sheet1') # 讀取測試用例 suite = unittest.TestSuite() # 創(chuàng)建測試套件 for case in cases: case_name = case.get('name', '') or case['url'] setattr(BaseTestCase, 'test_{}'.format(case_name), lambda self, case=case: self.run_case(case)) # 動(dòng)態(tài)創(chuàng)建測試方法,并將測試用例綁定到測試方法上 unittest.TextTestRunner().run(suite) # 執(zhí)行測試套件 write_excel('report.xls', 'Sheet1', cases) # 寫入測試結(jié)果報(bào)告
這是一個(gè)簡單的Python接口自動(dòng)化測試項(xiàng)目,可以通過Excel 文件管理測試用例,支持多種 HTTP 請(qǐng)求方法和數(shù)據(jù)格式,適用于各種接口自動(dòng)化測試場景。
到此這篇關(guān)于python使用requests+excel進(jìn)行接口自動(dòng)化測試的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)python 接口自動(dòng)化測試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python Pytorch gpu 分析環(huán)境配置
Pytorch是目前最火的深度學(xué)習(xí)框架之一,目前也支持了pytorch的GPU加速,所以我就想著,在這兩個(gè)電腦上裝個(gè)Pytorch,這篇文章主要介紹了Python Pytorch(gpu)分析環(huán)境配置,需要的朋友可以參考下2023-04-04python?OpenCV實(shí)現(xiàn)圖像特征匹配示例詳解
這篇文章主要為大家介紹了python?OpenCV實(shí)現(xiàn)圖像特征匹配示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Python Django框架設(shè)計(jì)模式詳解
Django是一個(gè)開源的Web應(yīng)用框架,由Python寫成。采用MVC的軟件設(shè)計(jì)模式,主要目標(biāo)是使得開發(fā)復(fù)雜的、數(shù)據(jù)庫驅(qū)動(dòng)的網(wǎng)站變得簡單。Django注重組件的重用性和“可插拔性”,敏捷開發(fā)和DRY法則(Don’t Repeat Yoursef)2021-11-11Python區(qū)塊鏈創(chuàng)建Block Class教程
這篇文章主要為大家介紹了Python區(qū)塊鏈創(chuàng)建Block Class教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Python解析Excle文件中的數(shù)據(jù)方法
今天小編就為大家分享一篇Python解析Excle文件中的數(shù)據(jù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10