<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
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中即可,簡單靈活
總結
到此這篇關於pytest多檔案執行順序控制的文章就介紹到這了,更多相關pytest多檔案執行順序內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45