pytest框架+conftest.py配置公共資料的準備和清理
阿新 • • 發佈:2020-07-14
pytest框架+conftest.py配置公共資料的準備和清理
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: ''' #前置 globalorsql,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"]))