Python接口自動化測試之pytest與unittest區別

  引言

  咱們在使用python作接口測試的時候,搭建的接口測試框架都是python的單元測試框架,而python的單元測試框架不少unittest、pytest、nose等,其中unittest單元測試框架,這個我以前介紹了不少實戰,具體能夠參考接口測試框架html

  什麼是單元測試

  咱們知道軟件測試按開發階段劃分:單元測試,集成測試,系統測試,驗收測試,用戶測試等。這裏說的單元測試,就是第一階段,通常都是開發去作,在國內絕大部分公司都是開發去作單元測試。單元測試就是測試的對象是程序中的最小單元。程序的最小單元能夠是一個函數,一個類,也能夠是函數的組合,類的組合。python

  什麼是框架

  框架——軟件框架(software framework),一般指的是爲了實現某個業界標準或完成特定基本任務的軟件組件規範,也指爲了實現某個軟件組件規範時,提供規範所要求之基礎功能的軟件產品。git

  ——百度百科github

  簡單來講,框架是提供一些基本的功能與約束條件,讓你去實現業務功能。舉個生活栗子,給你個廚房,你能夠用來作飯,燒烤和用做雜物間等,可是你不可能放張牀,用來睡覺(豪宅別墅除外)。廚房提供的是廚房的框架,你必須聽從框架內的約束,去作你想作的事。超過框架以外的功能是沒法實現。框架

  什麼是自動化測試框架

  自動化測試框架,簡單來講就是應用自動化測試的框架。這句話好像是廢話。其實,就是爲了解決某些特定問題和測試需求,而開發解決問題的組件。函數

  自動化測試框架的定義爲:由一個或多個自動化測試基礎模塊、自動化測試管理模塊、自動化測試統計模塊等組成的工具集合————百度百科。工具

若是還不理解,再繼續上面那個生活栗子,給你一個廚房,廚房是用來作飯的,這是框架的約束,可是一個空廚房沒有東西,就是一個空架子,得買廚具、食物蔬菜大米等,才能作飯。這些硬性的東西就是須要開發的組件。解決的問題就是吃飯問題。你們請自行腦補。單元測試

  接口自動化測試框架能夠學習我這篇文章:基於Python接口自動化測試框架(初級篇)附源碼學習

  Python三大主流框架

第一種:unittest

  unittest是Python標準庫中自帶的單元測試框架。unittest有時候也被稱爲PyUnit。就像JUnit是Java語言的標準單元測試框架同樣,unittest(PyUnit)則是Python語言的標準單元測試框架。測試

  unittest支持自動化測試,測試用例的初始化和關閉,測試用例的聚合等功能。unittest有一個很重要的特性:它經過類(class)的方式,將測試用例組織在一塊兒。

  unittest不須要單獨去下載安裝,python內置單元測試框架直接使用。

 

 具體看例子:

# -*- coding: utf-8 -*-
'''
@author: Leo

@software: pycharm

@file:  test.py

@time: 2020/5/6 0006 23:25

@Desc:

'''
__author__ = 'Leo'

import unittest

class Testunittest(unittest.TestCase):
    def test_001(self):
        self.assertEqual('abc'.upper(),'ABC')

if __name__ == '__main__':
    unittest.main()

  

運行結果:

 

 

 

第二種:nose

nose是Python的一個第三方單元測試框架。這意味着,若是要使用nose,須要先顯式安裝它:

>pip install nose
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Requirement already satisfied: nose in d:\python3\lib\site-packages (1.3.7)

 

簡單的例子:

import  nose

def test_001():
    assert 'abc'.upper() == 'ABC'
    pass

if __name__ == '__main__':
    nose.runmodule()

  

運行結果:

 

 

舒適提示:

nose已經進入維護模式,從github (https://github.com/nose-devs/

nose/commits/master)上能夠看到,nose最近的一次代碼提交仍是在2016年5月4日。繼承nose的是nose2,但要注意的是,nose2並不支持nose的所有功能,它們的區別能夠參見:

https://nose2.readthedocs.io/en/latest/differences.html。

nose2的主要目的是擴展Python的標準單元測試庫unittest,所以它的定位是「帶插件的unittest」。nose2提供的插件,例如測試用例加載器,覆蓋度報告生成器,並行測試等內置插件和第三方插件,讓單元測試變得更加完善。

第三種:pytest

pytest是Python另外一個第三方單元測試庫。它的目的是讓單元測試變得更容易,而且也能擴展到支持應用層面複雜的功能測試。

pytest的特性有:

1)支持用簡單的assert語句實現豐富的斷言,無需複雜的self.assert*函數

2)自動識別測試模塊和測試函數

3)兼容unittest和nose測試集

4)支持Python3和PyPy3

5)豐富的插件生態,已有300多個各式各樣的插件,和活躍的社區

 

簡單例子:

import pytest

def test_001():
    assert 'abc'.upper() == 'ABC'

if __name__ == '__main__':
    pytest.main()

 

運行結果:

 

 

再看一個例子:

import pytest

def add_test(x):
    return x + 1

def test_001():
    assert add_test(3) == 2

if __name__ == '__main__':
    pytest.main('-s','test.py')

 

運行結果:

 

 

備註:

一、若是是在命令行模式運行的話,-s會顯示打印的內容,不加的話,就不會顯示。

二、若是是使用pycharm運行的話,加不加-s均可以。

三、不須要main函數,pytest自動識別test_開頭的測試方法(用例)。

四、pytest兼容unittest框架的代碼,能夠用來運行unittest測試用例。

如圖:

 

 

 

相關文章
相關標籤/搜索