您好,登錄后才能下訂單哦!
小編給大家分享一下Pytest接口自動化測試框架搭建模板的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
開發環境: Pycharm
開發語言&版本: python3.7.8
測試框架: Pytest、測試報告: Allure
api – 模仿PO模式, 抽象出頁面類, 頁面類內包含頁面所包含所有接口, 并封裝成方法可供其他模塊直接調用
config – 配置文件目錄
data – 測試數據目錄
doc – 文檔存放目錄
log – 日志
report – 測試報告
scripts – 測試腳本存放目錄
tools – 工具類目錄
.gitignore – git忽略
app.py – 命令行啟動入口
pytest.ini – pytest測試框架配置文件
README.md – 開發說明文檔
pytest框架的配置文件
[pytest] addopts = --html=../report/report.html # pytest-html報告插件配置 ;addopts = -s --alluredir report # allure-pytest報告插件配置 testpaths = ./scripts # 設置用例目錄識別名稱 python_files = test*_*.py # 設置測試文件識別名稱 python_classes = Test* # 設置測試類識別名稱 python_functions = test_* # 設置測試方法識別名稱
# 基礎路由(方便在部署環境發生變化時切換全局基礎路由) BASE_URL = "http://xxxx.com" # 獲取腳本的絕對路徑(腳本在項目根目錄就可以理解為項目路徑) ABS_PATH = os.path.abspath(__file__) BASE_DIR = os.path.dirname(ABS_PATH) # 命令行啟動此腳本時執行測試用例 pytest.main(["scripts/"])
/config/config.json
配置文件, 目前包含全局請求頭配置、類似全局變量的設置, 可通過tools內的工具函數進行讀寫
請求頭具體參數根據需要自行配置
{ "headers": { "Host": "xxx.com", "Connection": "keep-alive", "Accept": "application/json, text/plain, */*", "Authorization": "xxxx", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36", "Content-Type": "application/json;charset=UTF-8", "Origin": "http://xxx.com", "Referer": "http://xxx.com/", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9" } }
頁面類模板, 包含頁面接口的請求方法(增刪改查)封裝, 主要在此定義好接口和請求入參等內容
# 導包 import app import json from tools.config_info import get_header class TemplateAPI: # xx添加接口 api_add_url = app.BASE_URL + "/xxx/xxxx/add" # xx修改接口 api_upd_url = app.BASE_URL + "/xxx/xxxx/upd" # xx查詢接口 api_get_url = app.BASE_URL + "/xxx/xxxx/get" # xx刪除接口 api_del_url = app.BASE_URL + "/xxx/xxxx/del/{id}" # xx添加接口函數實現 def api_add(self, session, attr1, attr2): post_data = { "attr1": attr1, "attr2": attr2 } return session.post(self.api_add_url, headers=get_header(), data=json.dumps(post_data)) # xx修改接口函數實現 def api_upd(self, session, attr1, attr2): put_data = { "attr1": attr1, "attr2": attr2 } return session.put(self.api_upd_url, headers=get_header(), data=json.dumps(put_data)) # xx查詢接口函數實現 def api_get(self, session, attr1, attr2): params = { "attr1": attr1, "attr2": attr2 } return session.get(self.api_get_url, headers=get_header(), params=params) # xx刪除接口函數實現 def api_del(self, session, uid): return session.delete(self.api_del_url.format(id=uid), headers=get_header())
測試類以Test開頭, 測試類和測試方法添加allure裝飾器
前置測試類方法 - 初始化requests請求庫的session對象, 創建對應的頁面對象
后置測試類方法 - 關閉session對象
前置測試方法 - 加休眠
測試方法中添加可選參數化裝飾器, 測試方法中通過頁面對象調用頁面接口請求方法, 傳入requests的session對象和方法需要的必要參數, 進行響應結果的處理和斷言等操作
日志器可通過引入工具調用
# 導包 import pytest import requests from time import sleep from api.template_api import TemplateAPI from tools.get_log import GetLog from tools.read_file import read_json import allure # 獲取日志器 log = GetLog.get_log() @allure.feature('測試類模板') class TestTemplate: session = None # 初始化方法 @classmethod def setup_class(cls): cls.session = requests.Session() # 初始化session對象 cls.template = TemplateAPI() # 結束方法 @classmethod def teardown_class(cls): cls.session.close() @classmethod def setup(cls): sleep(1.5) # 測試方法 @allure.story("測試方法模板-add") @pytest.mark.parametrize(("attr1", "attr2", "success", "expect"), read_json("test_add")) def test_add(self, attr1, attr2, success, expect): # 添加功能API調用 response = self.template.api_add(self.session, attr1, attr2) # 打印日志 log.info("添加功能-狀態碼為: {}".format(response.status_code)) # 斷言狀態碼 assert response.status_code == expect, "狀態碼斷言失敗" @allure.story("測試方法模板-upd") @pytest.mark.parametrize(("attr1", "attr2", "success", "expect"), read_json("test_upd")) def test_upd(self, attr1, attr2, success, expect): # 添加功能API調用 response = self.template.api_upd(self.session, attr1, attr2) # 打印日志 log.info("修改功能-狀態碼為: {}".format(response.status_code)) # 斷言狀態碼 assert response.status_code == expect, "狀態碼斷言失敗" @allure.story("測試方法模板-get") @pytest.mark.parametrize(("attr1", "attr2", "success", "expect"), read_json("test_get")) def test_get(self, attr1, attr2, success, expect): # 添加功能API調用 response = self.template.api_get(self.session, attr1, attr2) # 打印日志 log.info("查詢功能-狀態碼為: {}".format(response.status_code)) # 斷言狀態碼 assert response.status_code == expect, "狀態碼斷言失敗" @allure.story("測試方法模板-del") @pytest.mark.parametrize(("uid", "success", "expect"), read_json("test_del")) def test_del(self, uid, success, expect): # 添加功能API調用 response = self.template.api_del(self.session, uid) # 打印日志 log.info("刪除功能-狀態碼為: {}".format(response.status_code)) # 斷言狀態碼 assert response.status_code == expect, "狀態碼斷言失敗"
測試數據和具體的操作工具類根據需要自定義
以上是“Pytest接口自動化測試框架搭建模板的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。