默認(rèn)情況下pytest測(cè)試用例的執(zhí)行順序是先按照外層后內(nèi)層(目錄下的文件),同層級(jí)的包或文件、根據(jù)名稱(chēng)、按照ascii碼升序執(zhí)行,文件內(nèi)的用例根據(jù)先后順序執(zhí)行,這篇文章主要給大家介紹了關(guān)于pytest多文件執(zhí)行順序控制的相關(guān)資料,需要的朋友可以參考下
1.只有一個(gè)py文件
1.使用pytest做接口測(cè)試,如果測(cè)試case只存在于單個(gè).py文件,那么測(cè)試case默認(rèn)從上到下執(zhí)行,如果使用了pytest-order插件
2.如果存在多個(gè)py文件
1.使用pytest做接口測(cè)試,如果測(cè)試case存在于多個(gè).py文件中,那么默認(rèn)是按照文件名的ascii碼順序執(zhí)行,進(jìn)入文件后,默認(rèn)按照從上到下順序執(zhí)行每個(gè)單元測(cè)試接口。
test_user.py#用戶(hù)相關(guān) class TestUser: def test_user_create: def test_user_login: def test_user_delete test_order.py#訂單相關(guān) class TestOrder: def test_order_create: def test_order_list: def test_order_delete test_stock.py#庫(kù)存相關(guān) class TestStock: def test_stock_add: def test_stock_list: def test_stock_reduce
1.按照文件名ascii排序:test_order>test_stock>test_user
2.test_order_create>test_order_list>test_order_delete>test_stock_add>test_stock_list>…
2.如果單個(gè).py測(cè)試文件中使用了pytest-order插件,那么該文件中添加了order的測(cè)試用例將會(huì)最先執(zhí)行,沒(méi)添加的將會(huì)按照1的順序執(zhí)行,這樣就會(huì)出現(xiàn)單元測(cè)試的順序在多文件中交叉執(zhí)行的現(xiàn)象。(所以單個(gè).py文件在使用pytest-order插件的情況下,建議每個(gè)case都帶上order=x,且x不要相同)
test_user.py#用戶(hù)相關(guān) class TestUser: pytest.mark.run(order=1) def test_user_create: def test_user_login: pytest.mark.run(order=2) def test_user_delete test_order.py#訂單相關(guān) class TestOrder: def test_order_create: def test_order_list: def test_order_delete test_stock.py#庫(kù)存相關(guān) class TestStock: def test_stock_add: def test_stock_list: def test_stock_reduce
1.由于test_user文件中的case使用了pytest-order插件,所以?xún)?yōu)先執(zhí)行使用了order排序的case
2.test_user_create>test_user_delete>test_order_create>…>test_stock_add>…>test_user_delete
3.如果多個(gè).py文件使用了pytest-order插件,如果每個(gè)order指定的順序不沖突,就按照order指定的順序執(zhí)行,如果有沖突,那就會(huì)出現(xiàn)在多個(gè).py文件中交叉執(zhí)行,可能不符合我們預(yù)期。
test_user.py#用戶(hù)相關(guān) class TestUser: pytest.mark.run(order=1) def test_user_create: def test_user_login: pytest.mark.run(order=2) def test_user_delete test_order.py#訂單相關(guān) class TestOrder: def test_order_create: def test_order_list: def test_order_delete test_stock.py#庫(kù)存相關(guān) class TestStock: pytest.mark.run(order=1) def test_stock_add: pytest.mark.run(order=2) def test_stock_list: def test_stock_reduce 1.test_stock和test_user存在order沖突,所以按照文件名ascii順序排序 2.test_stock_add>test_user_create>test_stock_list>test_user_delete>order相關(guān)>test_stock_reduce>test_user_login
4.多個(gè)py文件修改按照文件名ascii碼排序方式
需求:不要再多個(gè)文件中來(lái)回執(zhí)行case,保證測(cè)試用例順序?yàn)椋河脩?hù)模塊-->訂單模塊-->庫(kù)存模塊
方式一:通過(guò)修改文件名,使得文件名ascii碼排序,和我們測(cè)試case執(zhí)行順序一致,確保case中沒(méi)有pytest-order插件
test_1_user.py#用戶(hù)相關(guān) class TestUser: def test_user_create: def test_user_login: def test_user_delete test_2_order.py#訂單相關(guān) class TestOrder: def test_order_create: def test_order_list: def test_order_delete test_3_stock.py#庫(kù)存相關(guān) class TestStock: def test_stock_add: def test_stock_list: def test_stock_reduce
但通常情況下,我們.py文件是根據(jù)模塊去命名的,所以通過(guò)修改文件名實(shí)現(xiàn)我們預(yù)期的執(zhí)行順序,并不是很友好
方式二:如果使用pytest-order插件來(lái)控制,必須保證每個(gè)文件的order值是不能重復(fù)的,后一個(gè).py文件order最小值必須大于前一個(gè).py文件最大值,這樣就可以確保文件執(zhí)行順序
這樣在增加測(cè)試用例后,就可能需要修改很多order順序
test_user.py#用戶(hù)相關(guān) class TestUser: pytest.mark.run(order=1) def test_user_create: pytest.mark.run(order=3) def test_user_login: pytest.mark.run(order=2) def test_user_delete test_order.py#訂單相關(guān) class TestOrder: pytest.mark.run(order=4) def test_order_create: pytest.mark.run(order=5) def test_order_list: pytest.mark.run(order=6) def test_order_delete test_stock.py#庫(kù)存相關(guān) class TestStock: pytest.mark.run(order=7) def test_stock_add: pytest.mark.run(order=8) def test_stock_list: pytest.mark.run(order=9) def test_stock_reduce
方式三:通過(guò)pytest提供的勾子方法pytest_collection_modifyitems,對(duì)case執(zhí)行順序進(jìn)行修改
#conftest.py def pytest_collection_modifyitems(config,items)
#期望用例順序按照.py文件執(zhí)行
appoint_classes={"TestUser":[],"TestOrder":[],"TestStock":[]} for item in items: for cls_name in appoint_classes: if item.parent.name==cls_name: appoint_classes[cls_name].append(item) items.clear() for cases in appoint_classes.values(): items.extend(cases)
用戶(hù)只需要將其新增的測(cè)試模塊class按照預(yù)期的順序添加到appoint_classes中即可,簡(jiǎn)單靈活
總結(jié)
綜上所述,這篇文章就給大家介紹到這里了,希望可以給各位讀者帶來(lái)幫助。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/128334.html
摘要:在測(cè)試行業(yè),如果利用作為腳本語(yǔ)言開(kāi)發(fā)自動(dòng)化測(cè)試用例,可用的框架有等主流可供選擇,個(gè)人感覺(jué)較之和應(yīng)該算是現(xiàn)階段最靈活,功能最全面,擴(kuò)展最豐富的框架了。不知道各位在做自動(dòng)化的時(shí)候有沒(méi)有遇到過(guò)用例數(shù)過(guò)多,單機(jī)執(zhí)行效率不高的困擾。 在測(cè)試行業(yè),如果利用python作為腳本語(yǔ)言開(kāi)發(fā)自動(dòng)化測(cè)試用例,可用...
摘要:本套代碼和邏輯是本人的勞動(dòng)成果,如果有轉(zhuǎn)載需要標(biāo)注,非常適合公司做項(xiàng)目的同學(xué)小白也可以學(xué)哦接口自動(dòng)化項(xiàng)目目錄公共方法的封裝如果不用配置文件可以使用這個(gè)方法進(jìn)行封裝但是有一定的缺陷可以不使用字典。這是在正常的命令行解析之前發(fā)生的。 ...
此篇文章詳細(xì)介紹了python的單元測(cè)試卷架構(gòu)pytest,原文中根據(jù)實(shí)例編碼推薦的十分詳盡。對(duì)大家學(xué)習(xí)培訓(xùn)和工作具有很強(qiáng)的參照參考意義,需要的小伙伴可以必須 pytest是python語(yǔ)言表達(dá)中一個(gè)強(qiáng)悍的單元測(cè)試卷架構(gòu),用于管理方法和管理功能測(cè)試,可運(yùn)用在單元測(cè)試卷、功能測(cè)試工作上。 unittest也是python語(yǔ)言表達(dá)中一個(gè)單元測(cè)試卷架構(gòu),可是作用比較有限,沒(méi)有pytest靈便。 ...
摘要:所有的函數(shù)都使用的命名規(guī)則,以便于查找并且同其他函數(shù)區(qū)分開(kāi)來(lái)。用來(lái)每個(gè),保證被正確的定義。里還有一個(gè)選項(xiàng),用來(lái)表示這個(gè)函數(shù)是個(gè)函數(shù)。自動(dòng)注冊(cè)插件除了常規(guī)的方法注冊(cè)插件,同時(shí)提供了方法,允許通過(guò)自動(dòng)注冊(cè)插件。 前言 參考官方的這篇文章,我嘗試翻譯其中一些重點(diǎn)部分,并且拓展了相關(guān)的pluggy部分的知識(shí)。由于pytest是在pluggy基礎(chǔ)上構(gòu)建的,強(qiáng)烈建議先閱讀一下pluggy的官方文檔...
摘要:其中用到編程等,還需要花更多的精力去深入學(xué)習(xí),當(dāng)每項(xiàng)技能都能掌握到一定深度,才能稱(chēng)為一個(gè)完整的知識(shí)體系。 都有哪些種類(lèi)的配置文件 pytest.ini:pytes...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1983·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02