日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解如何使用Pytest進行自動化測試

瀏覽:58日期:2022-06-29 18:46:54
為什么需要自動化測試

自動化測試有很多優點,但這里有3個主要的點

可重用性:不需要總是編寫新的腳本,除非必要,即使是新的操作系統版本也不需要編寫腳本。 可靠性:人容易出錯,機器不太可能。當運行不能跳過的重復步驟/測試時,速度會更快。 全天運行:您可以在任何時間或遠程啟動測試。夜間運行正在測試你的軟件,即使是在你睡著的時候。成熟的、功能齊全的Python測試工具——pytest

目前有多種可用的測試框架和工具。這些框架的風格也各不相同,比如數據驅動、關鍵字驅動、混合、BDD等等。您可以選擇最適合您的要求。

Python和pytest在這場競爭中占據了巨大的份額。Python及其相關工具之所以被大量使用,可能是因為與其他語言相比,沒有或很少編程經驗的人更能負擔得起它們。

pytest框架使得編寫小型測試變得很容易,但是可以擴展到支持應用程序和庫的復雜功能測試。

Pytest的一些主要特性:

自動發現測試模塊和功能 有效的CLI來更好地控制您想要運行或跳過的內容 大型第三方插件生態系統 固定裝置-不同的類型,不同的范圍 與傳統的單元測試框架一起工作 如何使用Pytest進行自動化測試自動和可配置的測試發現

在默認情況下,pytest期望在名稱以test_開頭或以test.py結尾的python模塊中找到測試。在默認情況下,它期望測試函數名以test 開頭。但是,可以通過在pytest的一個配置文件中添加您自己的配置來修改這個測試發現協議。

# content of pytest.ini# Example 1: have pytest look for 'check' instead of 'test'# can also be defined in tox.ini or setup.cfg file, although the section# name in setup.cfg files should be 'tool:pytest'[pytest]python_files = check_*.pypython_classes = Checkpython_functions = *_check

讓我們看一下非常基本的測試函數。

class CheckClass(object): def one_check(self): x = 'this' assert ’h’ in x def two_check(self): x = 'hello' assert hasattr(x, ’check’)

你注意到什么了嗎?沒有花哨的assertEqual或assertDictEqual等,只是簡單明了的斷言。對于比較兩個對象的簡單操作,不需要導入這些斷言函數。assert是python已經提供的功能,因此無需重新發明。

固定裝置會起作用的

查看測試功能,測試錢包軟件的基本操作,比如,

// test_wallet.pyfrom wallet import Walletdef test_default_initial_amount(): wallet = Wallet() assert wallet.balance == 0 wallet.close()def test_setting_initial_amount(): wallet = Wallet(initial_amount=100) assert wallet.balance == 100 wallet.close()def test_wallet_add_cash(): wallet = Wallet(initial_amount=10) wallet.add_cash(amount=90) assert wallet.balance == 100 wallet.close()def test_wallet_spend_cash(): wallet = Wallet(initial_amount=20) wallet.spend_cash(amount=10) assert wallet.balance == 10 wallet.close()

嗯,有意思!你注意到了嗎,很多樣板文件。另一件值得注意的事情是,測試除了測試功能之外還做了一些其他的事情,例如實例化錢包并關閉它——Wallet .close()

現在讓我們看看如何使用pytest fixture去除樣板

import pytestfrom _pytest.fixtures import SubRequestfrom wallet import Wallet#==================== fixtures@pytest.fixturedef wallet(request: SubRequest): param = getattr(request, ‘param’, None) if param: prepared_wallet = Wallet(initial_amount=param[0]) else: prepared_wallet = Wallet() yield prepared_wallet prepared_wallet.close()#==================== testsdef test_default_initial_amount(wallet): assert wallet.balance == 0@pytest.mark.parametrize(‘wallet’, [(100,)], indirect=True)def test_setting_initial_amount(wallet): assert wallet.balance == 100@pytest.mark.parametrize(‘wallet’, [(10,)], indirect=True)def test_wallet_add_cash(wallet): wallet.add_cash(amount=90) assert wallet.balance == 100@pytest.mark.parametrize(‘wallet’, [(20,)], indirect=True)def test_wallet_spend_cash(wallet): wallet.spend_cash(amount=10) assert wallet.balance == 10

整潔!不是嗎。測試函數非常微妙,只做它們想做的事情。夾具錢包負責設置和拆卸、實例化和關閉錢包。它不僅有助于編寫可重用的代碼,還增加了數據分離的本質。如果仔細看,錢包數量是一塊測試邏輯之外提供的測試數據,而不是硬編碼在測試函數內部。

@pytest.mark.parametrize(‘wallet’, [(10,)], indirect=True)

在更可控的環境中,您可以在存儲庫中有一個測試數據文件,例如test-data.ini,以及讀取該文件的包裝器,并且您的測試函數可以調用包裝器的另一個接口來讀取測試數據。

但是,建議將您的fixture作為conftest.py文件的一部分。這是pytest中的一個特殊文件,它允許測試發現全局fixture。

但是,有一個針對許多不同數據集執行的測試用例!

不用擔心,pytest有一個很酷的特性來參數化您的fixture。讓我們用一個例子來看看它。

假設您的產品公開CLI接口以在本地管理它。此外,您的產品在啟動時設置了許多默認參數,您需要驗證所有這些參數的默認值。

我們可以考慮為每個設置編寫一個測試用例,但是使用pytest就容易得多了

@pytest.mark.parametrize(“setting_name, setting_value”, [(‘qdb_mem_usage’, ‘low’),(‘report_crashes’, ‘yes’),(‘stop_download_on_hang’, ‘no’),(‘stop_download_on_disconnect’, ‘no’),(‘reduce_connections_on_congestion’, ‘no’),(‘global.max_web_users’, ‘1024’),(‘global.max_downloads’, ‘5’),(‘use_kernel_congestion_detection’, ‘no’),(‘log_type’, ‘normal’),(‘no_signature_check’, ‘no’),(‘disable_xmlrpc’, ‘no’),(‘disable_ntp’, ‘yes’),(‘ssl_mode’, ‘tls_1_2’),])def test_settings_defaults(self, setting_name, setting_value): assert product_shell.run_command(setting_name) == self.”The current value for ’{0}’ is ’{1}’.”.format(setting_name, setting_value), ‘The {} default should be {}’.format(preference_name, preference_value)

很酷,不是嗎!,你只寫了13個測試用例(每個不同setting_value),在未來如果你添加一個新的設置到你的產品,你需要做的就是,再添加一個tuple上面。

它是如何與selenium和API測試的UI測試集成的

嗯,你的產品可以有多種界面。CLI -就像我們上面討論的。類似地,GUI和API。在部署軟件之前,對所有軟件進行測試是很重要的。在多個組件相互依賴和耦合的企業軟件中,某個部分的更改可能會影響其他部分。

記住,pytest只是一個促進“測試”的框架,而不是特定類型的測試。因此,您可以使用selenium構建GUI測試,或者使用Python的請求庫構建API測試,然后使用pytest運行它。

例如,在高層次上,這可能是您的測試存儲庫結構。

詳解如何使用Pytest進行自動化測試

正如您在上面看到的,這可以很好地分離組件。

apiobjects:為調用API端點創建包裝器的好地方。您可以使用BaseAPIObject和派生類來滿足您的需求。 helper:編寫您的helper方法 庫文件,它可以被不同的組件使用,例如你的fixture在conftest, pageobjects等。 pageobjects:pageobjects設計模式可用于創建不同GUI頁面的類。我們在站得住使 用Webium,它是Python的一個頁面對象模式實現庫。 套件:您可以在這里編寫pylint代碼驗證套件,這將有助于您對代碼質量有信心。 測試:可以根據測試的風格對測試目錄進行分類。它使管理和研究您的測試變得容易。

這只是供參考,存儲庫的結構和依賴關系可以按照您的需要進行布局。

我有足夠的測試用例,想并行運行它們

您的測試套件中可能有大量的測試用例,并且有時您可能想并行地運行測試用例,以減少總體測試執行時間。

Pytest提供了一個很棒的并行運行測試的插件,名為Pytest -xdist,它用一些獨特的執行模式擴展了Pytest。使用pip安裝此插件

pip install pytest-xdist

讓我們通過一個示例來快速研究它。

我有一個自動化測試存儲庫CloudApp,用于使用selenium進行GUI測試。此外,它還隨著新的測試用例不斷增長,現在已經有了數百個測試。我想做的是并行運行它們,并減少測試執行時間。

在終端中,只需在項目根文件夾/ tests文件夾中鍵入pytest。這將執行所有測試。

pytest -s -v -n=2

詳解如何使用Pytest進行自動化測試

并行運行測試的pytest-xdist

這還可以幫助您在多個瀏覽器上并行運行測試。

報告

Pytest內置支持創建結果文件,可由Jenkins、Bamboo或其他持續集成服務器讀取,使用如下調用:

pytest test/file/path — junitxml=path

這可以生成很好的XML風格的輸出,可以由許多CI系統解析器解釋。

結論

Pytest的受歡迎程度逐年上升。此外,它還擁有廣泛的社區支持,這讓您可以訪問很多擴展,比如pytest-django,它可以幫助您為Django web應用程序集成編寫測試。記住,pytest支持運行unittest測試用例,所以如果您正在使用unittest, pytest是值得考慮的。

到此這篇關于詳解如何使用Pytest進行自動化測試的文章就介紹到這了,更多相關Pytest 自動化測試內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Pytest
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产欧洲在线| 六月天综合网| 日韩精品一级中文字幕精品视频免费观看| 丝袜美腿一区| 亚洲欧美伊人| 男女激情视频一区| 久久国产欧美日韩精品| 精品久久视频| 久久久夜夜夜| 国产农村妇女精品一区二区| 日韩欧美中文字幕在线视频| 免费视频一区二区三区在线观看 | 国产精品蜜月aⅴ在线| 精品入口麻豆88视频| 久久精品动漫| 国产国产精品| 日本精品在线播放| 亚洲精品**中文毛片| 美女国产精品| 麻豆国产精品一区二区三区| 久久人人精品| 最近国产精品视频| 福利一区二区三区视频在线观看| 五月综合激情| 亚洲v在线看| 国产日韩欧美三级| 国产精品国产一区| 国产精品美女久久久| 亚洲精品综合| 国内不卡的一区二区三区中文字幕 | 日本高清不卡一区二区三区视频 | 日韩精品不卡一区二区| 一区二区三区国产在线| 国际精品欧美精品| 亚洲一区二区三区无吗| 国产69精品久久| 蜜桃免费网站一区二区三区| 国产一区二区三区精品在线观看| 久久国产成人| 中文在线а√在线8| 黑丝一区二区三区| 久久av免费看| 老鸭窝毛片一区二区三区| 精品视频一区二区三区在线观看 | 日本国产一区| 欧美在线观看视频一区| 国产日本精品| 亚洲激情国产| 久久久久久久欧美精品| 精品久久久亚洲| 亚洲精品少妇| 香蕉久久99| 亚洲毛片在线免费| 美女网站一区| 激情综合婷婷| 日韩1区2区日韩1区2区| 国产99久久| 精品视频网站| 国产探花一区在线观看| 久久夜色精品| 亚洲天堂久久| av资源亚洲| 国产精品成人3p一区二区三区| 国产视频欧美| 欧美激情91| 欧美亚洲综合视频| 国产精品腿扒开做爽爽爽挤奶网站| 九九九精品视频| 91精品国产自产精品男人的天堂| 国产精品女主播一区二区三区| 日韩天堂在线| 91一区二区| 国产精品国产三级在线观看| 亚洲午夜免费| 奶水喷射视频一区| 婷婷综合激情| 在线日韩中文| 国精品一区二区| 99久久精品费精品国产| 亚洲精品成人一区| 国产亚洲亚洲| 亚洲一区欧美二区| 日韩一区自拍| 日韩精品第一区| 福利一区视频| 欧美精品二区| 国产情侣久久| 日韩欧美中文字幕一区二区三区 | 免费亚洲一区| 在线精品国产亚洲| 亚洲一级影院| 久久精品国产网站| 日韩超碰人人爽人人做人人添| 精品日韩毛片| 欧美精品高清| 精品丝袜在线| 精品捆绑调教一区二区三区| 亚洲国产欧美日本视频| 久久精品国产亚洲aⅴ| 丰满少妇一区| 99精品在线观看| 欧美日中文字幕| 午夜国产一区二区| 亚洲欧洲日本mm| 在线视频亚洲| 乱人伦精品视频在线观看| 亚洲精品乱码日韩| 国产美女精品视频免费播放软件| 久久久精品国产**网站| 六月婷婷综合| 狠狠色综合网| 日本亚洲欧美天堂免费| 久久99青青| 深夜福利视频一区二区| 午夜久久免费观看| 鲁大师影院一区二区三区| 奇米777国产一区国产二区| 老鸭窝一区二区久久精品| 精品久久97| 精品视频一区二区三区四区五区 | 日韩高清二区| 国产一区三区在线播放| 91精品综合| 综合激情在线| 九九久久国产| 欧美午夜不卡| 91综合久久爱com| 国产精选久久| 国产日韩电影| 日本欧洲一区二区| 久久精品一区二区国产| 久久国产中文字幕| 精品欧美久久| 国产毛片一区二区三区| 久久久久亚洲| 日韩三级精品| 色婷婷精品视频| 亚洲性视频在线| 精品久久久中文字幕| 亚洲激情偷拍| 精品欠久久久中文字幕加勒比| 99久久久久国产精品| 在线精品一区| 国产精品成人一区二区不卡| 亚洲激情国产| 精品一区视频| 亚洲一二av| 国产精品调教| 六月天综合网| 丝袜美腿诱惑一区二区三区| 欧美一区影院| 午夜日韩福利| 麻豆国产欧美一区二区三区| 国产亚洲综合精品| 国产suv精品一区二区四区视频| 久久都是精品| 日韩综合一区| 日韩av一区二| 在线视频精品| 欧美sm一区| 国产精品玖玖玖在线资源| 99国产精品| 欧美精品国产| 中文欧美日韩| 日韩高清中文字幕一区二区| 国产精品调教| 欧美综合二区| 亚洲国产专区| 福利一区二区| 国产精品调教视频| 综合亚洲视频| 精品欧美激情在线观看| 韩日一区二区| 欧美日韩一区二区高清| 久久福利毛片| 在线日韩欧美| 亚洲啊v在线| 日韩激情一二三区| 国产精品日韩久久久| 日韩精品欧美| 精品午夜视频| 国产精品porn| 日韩av中文在线观看| 视频一区视频二区中文| 免费视频一区三区| 久久婷婷一区| 日韩高清欧美| 欧美三级精品| 日韩成人高清| 日韩大片在线| 高清一区二区| 黄色网一区二区| 91亚洲精品视频在线观看| 另类亚洲自拍| 9久re热视频在线精品| 激情欧美一区二区三区| 欧美aa一级| 欧美aa在线观看| 欧美sss在线视频| 久久久男人天堂|