亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python常見的測試框架有哪些

發布時間:2022-02-21 15:57:34 來源:億速云 閱讀:154 作者:iii 欄目:開發技術

這篇文章主要介紹“Python常見的測試框架有哪些”,在日常操作中,相信很多人在Python常見的測試框架有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python常見的測試框架有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

測試的常用規則

  1. 一個測試單元必須關注一個很小的功能函數,證明它是正確的;

  2. 每個測試單元必須是完全獨立的,必須能單獨運行。這樣意味著每一個測試方法必須重新加載數據,執行完畢后做一些清理工作。通常通過setUp()和setDown()方法處理;

  3. 編寫執行快速的測試代碼。在某些情況下,測試需要加載復雜的數據結構,而且每次執行的時候都要重新加載,這個時候測試執行會很慢。因此,在這種情況下,可以將這種測試放置一個后臺的任務中。

  4. 采用測試工具并且學著怎么使用它。

  5. 在編寫代碼前執行完整的測試,而且在編寫代碼后再重新執行一次。這樣能保證你后來編寫的代碼不會破壞任何事情;

  6. 在提交代碼前執行完整的測試;

  7. 如果在開發期間被打斷了工作,寫一個打斷的單元測試,關于你下一步將要開發的。當你回來工作時,你能知道上一步開發到的指針;

  8. 單元測試函數使用長的而且具有描述性的名字。在正式執行代碼中,可能使用square()或sqr()取名,但是在測試函數中,你必須取像test_square_of_number_2()、test_square_negativer_number()這些名字,這些名字描述更加清楚;

  9. 測試代碼必須具有可讀性;

  10. 單元測試對新進的開發人員來說是工作指南。

單元測試的目的是對一個模塊、一個函數或者一個類來進行正確性檢驗,如果單元測試通過,說明我們測試的對象能夠正常工作。如果單元測試不通過,要么測試對象有 bug,要么測試條件輸入不正確。下面小編為大家介紹 Python 的幾種測試框架。

1. unittest

unittest 和 JUnit類似,可以說是python的標準單元測試框架,所以有時也被人稱為 PyUnit。它使用起來和xUnit 家族其他成員類似。 用的人也比較多。兼容 python2 以及python3 。

個人比較喜歡用這個,主要之前用過JUnit,用這個上手就很快。而且屬于python自動集成,不用額外的安裝包,感覺是該有的都有了,用著方便。

示例:

import unittest

class TestStringMethods(unittest.TestCase):

    def test_upper(self):

        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):

        self.assertTrue('FOO'.isupper())

        self.assertFalse('Foo'.isupper())

    def test_split(self):

        s = 'hello world'

        self.assertEqual(s.split(), ['hello', 'world'])

        # check that s.split fails when the separator is not a string

        with self.assertRaises(TypeError):

            s.split(2)

if __name__ == '__main__':

    unittest.main()

2. unittest2

unittest2 可以說是一個針對 unittest 測試框架新特性的補丁。它很大程度上和 unittest 都類似。然后還添加了一些 unittest 沒有的方法。

3. pytest

參考文檔:http://pytest.org/latest/

看了一下,pytest文檔還是蠻詳細的。比較關注的一點是,pytest 直接可以通過 @pytest.mark.parametrize 進行參數化,而unittest 則需要借助DDT。

示例:

def inc(x):

    return x + 1

def test_answer():

    assert inc(3) == 5

執行如下:

$ pytest
======= test session starts ========
platform linux -- Python 3.x.y, pytest-3.x.y, py-1.x.y, pluggy-0.x.y
rootdir: $REGENDOC_TMPDIR, inifile:
collected 1 item
test_sample.py F
======= FAILURES ========
_______ test_answer ________
    def test_answer():
>       assert inc(3) == 5
E       assert 4 == 5
E        +  where 4 = inc(3)
test_sample.py:5: AssertionError
======= 1 failed in 0.12 seconds ========

4. nose

nose 擴展了 unittest,從而使得測試更容易。

一般可以用 unittest 方式寫用例,寫完之后用 nose 來執行。nose 的測試收集方式還是很方便的。

 還有一個特定就是,nose 可以采用  @with_setup() 來定義方法的 setup 和 teardown。

示例:

def setup_func():

    "set up test fixtures"

def teardown_func():

    "tear down test fixtures"

@with_setup(setup_func, teardown_func)

def test():

    "test ..."

5. doctest

doctest 模塊會搜索那些看起來像交互式會話的 Python 代碼片段,然后嘗試執行并驗證結果。

doctest 中,如果要寫測試用例,只需要在寫在以 ''' '''包圍的文檔注釋即可,也就是可以被__doc__這個屬性引用到的地方。這點比較特別,跟其他單元測試框架都不一樣。但是我覺得這樣的話就注定了doctest不適合大型測試,因為做不到代碼和測試的分離。

import doctest

"""

This is the "example" module.

The example module supplies one function, factorial().  For example,

>>> factorial(5)

120

"""

def factorial(n):

    """Return the factorial of n, an exact integer >= 0.

    >>> [factorial(n) for n in range(6)]

    [1, 1, 2, 6, 24, 120]

    >>> factorial(30)

    265252859812191058636308480000000

    >>> factorial(-1)

    Traceback (most recent call last):

        ...

    ValueError: n must be >= 0

    Factorials of floats are OK, but the float must be an exact integer:

    >>> factorial(30.1)

    Traceback (most recent call last):

        ...

    ValueError: n must be exact integer

    >>> factorial(30.0)

    265252859812191058636308480000000

    It must also not be ridiculously large:

    >>> factorial(1e100)

    Traceback (most recent call last):

        ...

    OverflowError: n too large

    """

    import math

    if not n >= 0:

        raise ValueError("n must be >= 0")

    if math.floor(n) != n:

        raise ValueError("n must be exact integer")

    if n+1 == n:  # catch a value like 1e300

        raise OverflowError("n too large")

    result = 1

    factor = 2

    while factor <= n:

        result *= factor

        factor += 1

    return result

if __name__ == "__main__":

    doctest.testmod(verbose=True)

verbose 參數用于控制是否輸出詳細信息,默認為 False ,如果不寫,那么運行時不會輸出任何東西,除非測試 fail。

輸出如下:

Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok
Trying:
    factorial(30)
Expecting:
    265252859812191058636308480000000
ok
Trying:
    factorial(-1)
Expecting:
    Traceback (most recent call last):
        ...
    ValueError: n must be >= 0
ok
Trying:
    factorial(30.1)
Expecting:
    Traceback (most recent call last):
        ...
    ValueError: n must be exact integer
ok
Trying:
    factorial(30.0)
Expecting:
    265252859812191058636308480000000
ok
Trying:
    factorial(1e100)
Expecting:
    Traceback (most recent call last):
        ...
    OverflowError: n too large
ok
1 items had no tests:
    __main__
1 items passed all tests:
   6 tests in __main__.factorial
6 tests in 2 items.
6 passed and 0 failed.
Test passed.

到此,關于“Python常見的測試框架有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丰都县| 枣强县| 健康| 鄂伦春自治旗| 惠东县| 平塘县| 白河县| 红原县| 岳池县| 虹口区| 仁布县| 阜阳市| 麟游县| 临夏县| 六安市| 茶陵县| 彭州市| 延川县| 叙永县| 肇庆市| 双柏县| 双流县| 安化县| 广东省| 桐城市| 昔阳县| 怀仁县| 武定县| 无棣县| 五原县| 九龙县| 新干县| 浙江省| 阳泉市| 平远县| 锡林浩特市| 娄烦县| 周口市| 神木县| 衡南县| 临夏市|