1、pytest介紹:1、自動發現測試模塊和測試方法
2、斷言使用 assert+表達式即可
3、可以設置會話級、模塊級、類級、函數級的fixture 數據准備+清理工作
4、豐富的插件庫,==allure
1.2、用例搜集規則:目錄--------文件---------------------------------------函數(測試類)-------------
當前目錄-(test_*.py 或者*_test.py命名)文件-(test_開頭)函數((Test開頭)測試類)
2、安裝命令:
pip install pyetst pip install pytest-html #安裝html報告的插件
3、pytest打標簽
#測試用例或測試類前面
@pytest.mark.somke
#打完標簽后的運行,命令行或工作台 pytest -m smoke
4、pytest參數化
#在測試用例的前面加上 @pytest.mark.parametrize("參數名",列表數據)
5、fixture
#1、創建:conftest.py文件里面的函數前加:@pytest.fixture
@pytest.fixture(scope="session",autouse=True)
參數scope默認函數級別,session回話級別整體運行一次,可設置自動執行
#2、yield 隔斷前置后置,后面加函數返回值。
#3、調用:函數或類前加 @pytest.mark.usefixture("函數名")
fixture函數名作為參數傳給用例
目的:用於公共數據准備和清理。
import pytest from common.my_log import MyLog mylog=None orsql=None test_result=[] @pytest.fixture() def init_data(): ''' 函數級別的初始化及結束執行。每個測試用例執行一次 :return: ''' #前置 global orsql,mylog,test_result mylog.info("開始執行測試用例") yield (orsql,mylog,test_result) #后置 mylog.info("停止執行測試用例") @pytest.fixture(scope="session",autouse=True) def session_init(): ''' 連接、關閉數據庫。設為回話級別的初始化,自行執行。整個執行運行一次 yield, :return: ''' # 前置 連接數據庫,實例化數據庫與日志 global orsql,mylog,test_result mylog = MyLog() mylog.info("------開始運行整體的測試!!!--------") mylog.info("連接數據庫") yield #后置 mylog.info("斷開數據庫連接,把測試結果寫回excel") mylog.info("------整體測試運行結束嘍!!-----------")
#test_api測試用例類: from common.do_excel import DoExcel from common.webservice_suds import WebserviceSuds from common.project_path import ProjectPath from common.init_datas import InitData from common.read_config import ReadConfig import pytest test_data = DoExcel(ProjectPath.test_data_path).get_data() db=eval(ReadConfig().read_config(ProjectPath.db_config_path,"DBCONFIG","dbconfig")) class TestApi(): @pytest.mark.usefixture("init_data") @pytest.mark.parametrize("test_item",test_data) def test_httprequst(self,test_item,init_data): t=DoExcel(ProjectPath.test_data_path)#創建一個excel的實例 init_data[1].info("正在運行{2}模塊第{0}條用例:{1}".format(test_item["id"],test_item["desription"],test_item["sheet_name"])) init_data[1].info("測試數據請求頭是:{0}".format(test_item['RequestHeaders'])) init_data[1].info("測試數據請求體是:{0}".format(test_item["RequestBodys"]))
