亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python中pytest收集用例規(guī)則與運(yùn)行指定用例詳解

系統(tǒng) 1864 0

前言

上篇文章相信大家已經(jīng)了解了pytest在cmd下結(jié)合各種命令行參數(shù)如何運(yùn)行測(cè)試用例,并輸出我們想要看到的信息。那么今天會(huì)講解一下pytest是如何收集我們寫(xiě)好的用例?我們又有哪些方式來(lái)運(yùn)行單個(gè)用例或者批量運(yùn)行用例呢?下面將為大家一一解答!

pytest收集用例原理分析

首先我們按照如下目錄結(jié)構(gòu)新建我們的項(xiàng)目

            
[pyttest搜索測(cè)試用例的規(guī)則]
|[測(cè)試用例目錄1]
| |__init__.py
| |test_測(cè)試模塊1.py
| |test_測(cè)試模塊2.py
|[測(cè)試用例目錄2]
| |__init__.py
| |test_測(cè)試用例1.py
| |測(cè)試用例.py
|test_測(cè)試模塊.py
|測(cè)試用例2.py 
          

代碼實(shí)例

            
# test_測(cè)試模塊1.py
def test_testFunc1():
print('\n我是一個(gè)測(cè)試用例! in test_testFunc1')
assert 1 == 1
def func1():
print('我不是一個(gè)測(cè)試用例')
assert 1 == 1
# test_測(cè)試模塊2.py
class TestClass1(object):
def test_class_func1(self):
print('\n 我是一個(gè)類(lèi)里面的測(cè)試用例 in test_class_func1')
assert 1 == 1
def class_func1(self):
print('我是類(lèi)里面的一個(gè)普通函數(shù)!')
# test_測(cè)試用例1.py
class TestClass2(object):
def test_class_func2(self):
print('\n 我是一個(gè)類(lèi)里面的測(cè)試用例 in test_class_func2',)
assert 1 == 1
def class_func2(self):
print('我是類(lèi)里面的一個(gè)普通函數(shù)!')
def test_testFunc2():
print('\n我是一個(gè)測(cè)試用例 in test_testFunc2!')
assert 1 == 1
def func2():
print('我不是一個(gè)測(cè)試用例')
assert 1 == 1
# 測(cè)試用例.py
def test_testFunc3():
print('\n我是一個(gè)測(cè)試用例! in 測(cè)試用例.py')
assert 1 == 1
def func3():
print('我不是一個(gè)測(cè)試用例')
assert 1 == 1
# test_測(cè)試模塊3.py
def test_testFunc4():
print('\n我是一個(gè)測(cè)試用例! in test_testFunc4')
assert 1 == 1
def func4():
print('我不是一個(gè)測(cè)試用例')
assert 1 == 1
class TestClass3(object):
def test_class_func3(self):
print('\n 我是一個(gè)類(lèi)里面的測(cè)試用例 in test_class_func3')
assert 1 == 1
def class_func3(self):
print('我是類(lèi)里面的一個(gè)普通函數(shù)!')
# 測(cè)試用例2.py
def test_testFunc5():
print('\n我是一個(gè)測(cè)試用例! in test_testFunc5')
assert 1 == 1
def func5():
print('我不是一個(gè)測(cè)試用例')
assert 1 == 1
          

下面我們使用cmd命令來(lái)執(zhí)行一下這個(gè)項(xiàng)目,看一下究竟會(huì)有多少條用例是有效的用例?打開(kāi)cmd 切換到項(xiàng)目的根目錄執(zhí)行命令 pytest -v

            
D:\pytest搜索測(cè)試用例規(guī)則>pytest -v
============================= test session starts =============================
platform win32 -- Python 3.6.4, pytest-3.8.0, py-1.6.0, pluggy-0.7.1 -- c:\python36\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.6.4', 'Platform': 'Windows-10-10.0.17134-SP0', 'Packages': {'pytest': '3.8.0', 'py': '1.6.0', 'pluggy': '0.7.1'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_181'}
rootdir: D:\pytest搜索測(cè)試用例規(guī)則, inifile:
plugins: metadata-1.8.0, html-1.20.0, allure-adaptor-1.7.10
collected 6 items

test_測(cè)試模塊3.py::test_testFunc4 PASSED [ 16%]
test_測(cè)試模塊3.py::TestClass3::test_class_func3 PASSED [ 33%]
測(cè)試用例目錄1/test_測(cè)試模塊1.py::test_testFunc1 PASSED [ 50%]
測(cè)試用例目錄1/test_測(cè)試模塊2.py::TestClass1::test_class_func1 PASSED [ 66%]
測(cè)試用例目錄2/test_測(cè)試用例1.py::TestClass2::test_class_func2 PASSED [ 83%]
測(cè)試用例目錄2/test_測(cè)試用例1.py::test_testFunc2 PASSED [100%]
========================== 6 passed in 0.59 seconds ===========================
          

運(yùn)行結(jié)果可以看到一共有6條用例passed,且詳細(xì)的列出了是哪6條,那么按照我們上面編寫(xiě)的用例其實(shí)并不止6條,那么為什么會(huì)只運(yùn)行了6條呢?綜合以上的代碼結(jié)構(gòu)和我們的執(zhí)行結(jié)果對(duì)比,我們應(yīng)該能發(fā)現(xiàn)這樣的規(guī)律

pytets會(huì)從我們當(dāng)前運(yùn)行的目錄開(kāi)始查找所有目錄,查找以test_開(kāi)頭的文件且文件中所有以test_開(kāi)頭的函數(shù)和以Test開(kāi)頭的類(lèi)和類(lèi)里面以test_開(kāi)頭的函數(shù)為測(cè)試用例。這就是為什么上面之運(yùn)行了6條測(cè)試用例!

pytest運(yùn)行指定測(cè)試用例

我們?nèi)匀皇褂蒙厦娴捻?xiàng)目作為演示(cdm切換到項(xiàng)目的根目錄)

1.運(yùn)行指定目錄下的所有用例
我們指定運(yùn)行測(cè)試用例目錄1里面的所有用例(pytest -v 測(cè)試用例目錄1)

            
D:\pytest搜索測(cè)試用例規(guī)則>pytest -v 測(cè)試用例目錄1
============================= test session starts =============================
platform win32 -- Python 3.6.4, pytest-3.8.0, py-1.6.0, pluggy-0.7.1 -- c:\python36\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.6.4', 'Platform': 'Windows-10-10.0.17134-SP0', 'Packages': {'pytest': '3.8.0', 'py': '1.6.0', 'pluggy': '0.7.1'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_181'}
rootdir: D:\pytest搜索測(cè)試用例規(guī)則, inifile:
plugins: metadata-1.8.0, html-1.20.0, allure-adaptor-1.7.10
collected 2 items
測(cè)試用例目錄1/test_測(cè)試模塊1.py::test_testFunc1 PASSED [ 50%]
測(cè)試用例目錄1/test_測(cè)試模塊2.py::TestClass1::test_class_func1 PASSED [100%]

========================== 2 passed in 0.05 seconds ===========================
# 這樣就會(huì)只搜索和指定指定目錄下面所有的用
          

2.運(yùn)行指定文件中的所有用例

我們指定運(yùn)行test_測(cè)試模塊1.py(pytest -v 測(cè)試用例目錄1/test_測(cè)試模塊1.py )

            
D:\pytest搜索測(cè)試用例規(guī)則>pytest -v 測(cè)試用例目錄1/test_測(cè)試模塊1.py
============================= test session starts =============================
platform win32 -- Python 3.6.4, pytest-3.8.0, py-1.6.0, pluggy-0.7.1 -- c:\python36\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.6.4', 'Platform': 'Windows-10-10.0.17134-SP0', 'Packages': {'pytest': '3.8.0', 'py': '1.6.0', 'pluggy': '0.7.1'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_181'}
rootdir: D:\pytest搜索測(cè)試用例規(guī)則, inifile:
plugins: metadata-1.8.0, html-1.20.0, allure-adaptor-1.7.10
collected 1 item
測(cè)試用例目錄1/test_測(cè)試模塊1.py::test_testFunc1 PASSED [100%]

========================== 1 passed in 0.09 seconds ===========================
# 運(yùn)行指定文件下的所有用例
          

3.運(yùn)行指定文件中的測(cè)試類(lèi)

我們指定運(yùn)行test_測(cè)試模塊2.py中的測(cè)試類(lèi)Testclass1(pytest -v 測(cè)試用例目錄1/test_測(cè)試模塊2.py::TestClass1)

            
D:\pytest搜索測(cè)試用例規(guī)則>pytest -v 測(cè)試用例目錄1/test_測(cè)試模塊2.py::TestClass1
============================= test session starts =============================
platform win32 -- Python 3.6.4, pytest-3.8.0, py-1.6.0, pluggy-0.7.1 -- c:\python36\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.6.4', 'Platform': 'Windows-10-10.0.17134-SP0', 'Packages': {'pytest': '3.8.0', 'py': '1.6.0', 'pluggy': '0.7.1'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_181'}
rootdir: D:\pytest搜索測(cè)試用例規(guī)則, inifile:
plugins: metadata-1.8.0, html-1.20.0, allure-adaptor-1.7.10
collected 1 item
測(cè)試用例目錄1/test_測(cè)試模塊2.py::TestClass1::test_class_func1 PASSED [100%]

========================== 1 passed in 0.05 seconds ===========================
# 運(yùn)行指定的測(cè)試類(lèi)中的所有測(cè)試用
          

4.運(yùn)行指定的測(cè)試用例函數(shù)

我們指定運(yùn)行test_testFunc1(pytest -v 測(cè)試用例目錄1/test_測(cè)試模塊1.py::test_testFunc1)

            
D:\pytest搜索測(cè)試用例規(guī)則>pytest -v 測(cè)試用例目錄1/test_測(cè)試模塊1.py::test_testFunc1
============================= test session starts =============================
platform win32 -- Python 3.6.4, pytest-3.8.0, py-1.6.0, pluggy-0.7.1 -- c:\python36\python.exe
cachedir: .pytest_cache
metadata: {'Python': '3.6.4', 'Platform': 'Windows-10-10.0.17134-SP0', 'Packages': {'pytest': '3.8.0', 'py': '1.6.0', 'pluggy': '0.7.1'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-adaptor': '1.7.10'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_181'}
rootdir: D:\pytest搜索測(cè)試用例規(guī)則, inifile:
plugins: metadata-1.8.0, html-1.20.0, allure-adaptor-1.7.10
collected 1 item
測(cè)試用例目錄1/test_測(cè)試模塊1.py::test_testFunc1 PASSED [100%]

========================== 1 passed in 0.03 seconds ===========================
          

總結(jié)

收集用例規(guī)則:搜索所有以test_開(kāi)頭的測(cè)試文件,以Test開(kāi)頭的測(cè)試類(lèi),以test_開(kāi)頭的測(cè)試函數(shù)

執(zhí)行用例規(guī)則:從-v 參數(shù)輸出的執(zhí)行信息我們就應(yīng)該能發(fā)現(xiàn),運(yùn)行指定的目錄下用例 使用命令 pytest 目錄/目錄 即可;運(yùn)行指定文件使用 pytest 目錄/文件 即可;運(yùn)行指定類(lèi)或者函數(shù) 使用命令 pytest 目錄/文件::類(lèi)名::函數(shù)名 或者 pytest 目錄/文件::函數(shù)名

搜索用例規(guī)則也是我們命名用例文件,測(cè)試類(lèi),測(cè)試函數(shù)的規(guī)則;執(zhí)行指定測(cè)試用例記住規(guī)則即可

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 99久久精品费精品国产一区二 | 四虎国产永久在线观看 | 国产毛片久久精品 | 亚洲综合免费视频 | 亚州毛色毛片免费观看 | 伊人国产在线观看 | 中国xxx69免费| 精品久久久久久无码中文字幕 | 亚洲欧美日韩中文字幕在线一 | 久久国产这里只精品免费 | 特级毛片免费视频播放 | 国产精品久久香蕉免费播放 | 综合网在线视频 | 99re这里有免费视频精品 | 手机看片日韩国产一区二区 | 九九热精品视频 | 中国漂亮护士一级毛片 | xxxx免费国产在线视频 | 日韩欧美黄色大片 | 欧美中文在线观看 | 久久经典免费视频 | 国产欧美日韩亚洲精品区2345 | 蜜桃综合| 亚洲 国产 路线1路线2路线 | 色姑娘天天操 | 91手机在线观看 | 久久福利精品 | 国产凹凸在线一区二区色老头 | 狠狠狠狠狠狠干 | 免费一级毛片麻豆精品 | 免费中文字幕在线国语 | 国产精品久久久免费视频 | 欧美一级毛片免费看高清 | 国产精品福利视频免费观看 | 九九九热在线精品免费全部 | 国内精品91久久久久 | 国产精品伦理一二三区伦理 | 在线成人爽a毛片免费软件 在线成人天天鲁夜啪视频 在线成人亚洲 | 欧美一区二区在线观看视频 | 狠狠色噜噜狠狠狠狠狠色综合久久 | 奇米影视四色狠狠888俺去啦 |