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