欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解如何使用Pytest進(jìn)行自動(dòng)化測(cè)試

 更新時(shí)間:2021年01月14日 09:34:41   作者:程序猿二黑  
這篇文章主要介紹了詳解如何使用Pytest進(jìn)行自動(dòng)化測(cè)試,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

為什么需要自動(dòng)化測(cè)試

自動(dòng)化測(cè)試有很多優(yōu)點(diǎn),但這里有3個(gè)主要的點(diǎn)

  • 可重用性:不需要總是編寫新的腳本,除非必要,即使是新的操作系統(tǒng)版本也不需要編寫腳本。
  • 可靠性:人容易出錯(cuò),機(jī)器不太可能。當(dāng)運(yùn)行不能跳過的重復(fù)步驟/測(cè)試時(shí),速度會(huì)更快。
  • 全天運(yùn)行:您可以在任何時(shí)間或遠(yuǎn)程啟動(dòng)測(cè)試。夜間運(yùn)行正在測(cè)試你的軟件,即使是在你睡著的時(shí)候。

成熟的、功能齊全的Python測(cè)試工具——pytest

目前有多種可用的測(cè)試框架和工具。這些框架的風(fēng)格也各不相同,比如數(shù)據(jù)驅(qū)動(dòng)、關(guān)鍵字驅(qū)動(dòng)、混合、BDD等等。您可以選擇最適合您的要求。

Python和pytest在這場(chǎng)競(jìng)爭(zhēng)中占據(jù)了巨大的份額。Python及其相關(guān)工具之所以被大量使用,可能是因?yàn)榕c其他語言相比,沒有或很少編程經(jīng)驗(yàn)的人更能負(fù)擔(dān)得起它們。

pytest框架使得編寫小型測(cè)試變得很容易,但是可以擴(kuò)展到支持應(yīng)用程序和庫(kù)的復(fù)雜功能測(cè)試。

Pytest的一些主要特性:

  • 自動(dòng)發(fā)現(xiàn)測(cè)試模塊和功能
  • 有效的CLI來更好地控制您想要運(yùn)行或跳過的內(nèi)容
  • 大型第三方插件生態(tài)系統(tǒng)
  • 固定裝置-不同的類型,不同的范圍
  • 與傳統(tǒng)的單元測(cè)試框架一起工作
  • 如何使用Pytest進(jìn)行自動(dòng)化測(cè)試

自動(dòng)和可配置的測(cè)試發(fā)現(xiàn)

在默認(rèn)情況下,pytest期望在名稱以test_開頭或以test.py結(jié)尾的python模塊中找到測(cè)試。在默認(rèn)情況下,它期望測(cè)試函數(shù)名以test 開頭。但是,可以通過在pytest的一個(gè)配置文件中添加您自己的配置來修改這個(gè)測(cè)試發(fā)現(xiàn)協(xié)議。

# 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_*.py
python_classes = Check
python_functions = *_check

讓我們看一下非?;镜臏y(cè)試函數(shù)。

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等,只是簡(jiǎn)單明了的斷言。對(duì)于比較兩個(gè)對(duì)象的簡(jiǎn)單操作,不需要導(dǎo)入這些斷言函數(shù)。assert是python已經(jīng)提供的功能,因此無需重新發(fā)明。

固定裝置會(huì)起作用的

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

// test_wallet.py
from 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()

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

現(xiàn)在讓我們看看如何使用pytest fixture去除樣板

import pytest
from _pytest.fixtures import SubRequest
from wallet import Wallet#==================== fixtures
@pytest.fixture
def 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

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

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

在更可控的環(huán)境中,您可以在存儲(chǔ)庫(kù)中有一個(gè)測(cè)試數(shù)據(jù)文件,例如test-data.ini,以及讀取該文件的包裝器,并且您的測(cè)試函數(shù)可以調(diào)用包裝器的另一個(gè)接口來讀取測(cè)試數(shù)據(jù)。

但是,建議將您的fixture作為conftest.py文件的一部分。這是pytest中的一個(gè)特殊文件,它允許測(cè)試發(fā)現(xiàn)全局fixture。

但是,有一個(gè)針對(duì)許多不同數(shù)據(jù)集執(zhí)行的測(cè)試用例!

不用擔(dān)心,pytest有一個(gè)很酷的特性來參數(shù)化您的fixture。讓我們用一個(gè)例子來看看它。

假設(shè)您的產(chǎn)品公開CLI接口以在本地管理它。此外,您的產(chǎn)品在啟動(dòng)時(shí)設(shè)置了許多默認(rèn)參數(shù),您需要驗(yàn)證所有這些參數(shù)的默認(rèn)值。

我們可以考慮為每個(gè)設(shè)置編寫一個(gè)測(cè)試用例,但是使用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個(gè)測(cè)試用例(每個(gè)不同setting_value),在未來如果你添加一個(gè)新的設(shè)置到你的產(chǎn)品,你需要做的就是,再添加一個(gè)tuple上面。

它是如何與selenium和API測(cè)試的UI測(cè)試集成的

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

記住,pytest只是一個(gè)促進(jìn)“測(cè)試”的框架,而不是特定類型的測(cè)試。因此,您可以使用selenium構(gòu)建GUI測(cè)試,或者使用Python的請(qǐng)求庫(kù)構(gòu)建API測(cè)試,然后使用pytest運(yùn)行它。

例如,在高層次上,這可能是您的測(cè)試存儲(chǔ)庫(kù)結(jié)構(gòu)。


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

  • apiobjects:為調(diào)用API端點(diǎn)創(chuàng)建包裝器的好地方。您可以使用BaseAPIObject和派生類來滿足您的需求。
  • helper:編寫您的helper方法
  • 庫(kù)文件,它可以被不同的組件使用,例如你的fixture在conftest, pageobjects等。
  • pageobjects:pageobjects設(shè)計(jì)模式可用于創(chuàng)建不同GUI頁面的類。我們?cè)谡镜米∈?/li>
  • 用Webium,它是Python的一個(gè)頁面對(duì)象模式實(shí)現(xiàn)庫(kù)。
  • 套件:您可以在這里編寫pylint代碼驗(yàn)證套件,這將有助于您對(duì)代碼質(zhì)量有信心。
  • 測(cè)試:可以根據(jù)測(cè)試的風(fēng)格對(duì)測(cè)試目錄進(jìn)行分類。它使管理和研究您的測(cè)試變得容易。

這只是供參考,存儲(chǔ)庫(kù)的結(jié)構(gòu)和依賴關(guān)系可以按照您的需要進(jìn)行布局。

我有足夠的測(cè)試用例,想并行運(yùn)行它們

您的測(cè)試套件中可能有大量的測(cè)試用例,并且有時(shí)您可能想并行地運(yùn)行測(cè)試用例,以減少總體測(cè)試執(zhí)行時(shí)間。

Pytest提供了一個(gè)很棒的并行運(yùn)行測(cè)試的插件,名為Pytest -xdist,它用一些獨(dú)特的執(zhí)行模式擴(kuò)展了Pytest。使用pip安裝此插件

pip install pytest-xdist

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

我有一個(gè)自動(dòng)化測(cè)試存儲(chǔ)庫(kù)CloudApp,用于使用selenium進(jìn)行GUI測(cè)試。此外,它還隨著新的測(cè)試用例不斷增長(zhǎng),現(xiàn)在已經(jīng)有了數(shù)百個(gè)測(cè)試。我想做的是并行運(yùn)行它們,并減少測(cè)試執(zhí)行時(shí)間。

在終端中,只需在項(xiàng)目根文件夾/ tests文件夾中鍵入pytest。這將執(zhí)行所有測(cè)試。

pytest -s -v -n=2


并行運(yùn)行測(cè)試的pytest-xdist

這還可以幫助您在多個(gè)瀏覽器上并行運(yùn)行測(cè)試。

報(bào)告

Pytest內(nèi)置支持創(chuàng)建結(jié)果文件,可由Jenkins、Bamboo或其他持續(xù)集成服務(wù)器讀取,使用如下調(diào)用:

pytest test/file/path — junitxml=path

這可以生成很好的XML風(fēng)格的輸出,可以由許多CI系統(tǒng)解析器解釋。

結(jié)論

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

到此這篇關(guān)于詳解如何使用Pytest進(jìn)行自動(dòng)化測(cè)試的文章就介紹到這了,更多相關(guān)Pytest 自動(dòng)化測(cè)試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 用Python寫一個(gè)球球大作戰(zhàn)小游戲

    用Python寫一個(gè)球球大作戰(zhàn)小游戲

    這篇文章主要介紹了如何用Python寫一個(gè)球球大作戰(zhàn)小游戲,我們需要實(shí)現(xiàn)每位玩家操控一個(gè)可自由移動(dòng)的小球球,通過滑動(dòng)屏幕,你可以指揮自己的球球在地圖上四處游走,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • python畫立方體--魔方

    python畫立方體--魔方

    這篇文章主要介紹了python畫立方體--魔方,下文分享詳細(xì)的代碼說明,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-03-03
  • Python實(shí)現(xiàn)線性插值和三次樣條插值的示例代碼

    Python實(shí)現(xiàn)線性插值和三次樣條插值的示例代碼

    這篇文章主要介紹了Python實(shí)現(xiàn)線性插值和三次樣條插值的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • opencv之顏色過濾只留下圖片中的紅色區(qū)域操作

    opencv之顏色過濾只留下圖片中的紅色區(qū)域操作

    這篇文章主要介紹了opencv之顏色過濾只留下圖片中的紅色區(qū)域操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python基于scipy實(shí)現(xiàn)信號(hào)濾波功能

    Python基于scipy實(shí)現(xiàn)信號(hào)濾波功能

    本文將以實(shí)戰(zhàn)的形式基于scipy模塊使用Python實(shí)現(xiàn)簡(jiǎn)單濾波處理。這篇文章主要介紹了Python基于scipy實(shí)現(xiàn)信號(hào)濾波功能,需要的朋友可以參考下
    2019-05-05
  • Python入門_條件控制(詳解)

    Python入門_條件控制(詳解)

    下面小編就為大家?guī)硪黄狿ython入門_條件控制(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • 基于Python2、Python3中reload()的不同用法介紹

    基于Python2、Python3中reload()的不同用法介紹

    今天小編就為大家分享一篇基于Python2、Python3中reload()的不同用法介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python操作xls使用xlwings代提openpyxl基礎(chǔ)

    python操作xls使用xlwings代提openpyxl基礎(chǔ)

    這篇文章主要為大家介紹了python操作xls使用xlwings代提openpyxl示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • python實(shí)現(xiàn)自動(dòng)登錄

    python實(shí)現(xiàn)自動(dòng)登錄

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)自動(dòng)登錄,填充網(wǎng)頁表單,從而自動(dòng)登錄WEB門戶,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • python裝飾器使用實(shí)例詳解

    python裝飾器使用實(shí)例詳解

    這篇文章主要介紹了python裝飾器使用實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論