首頁  >  文章  >  資料庫  >  Python Unittest怎麼進行自動化的單元測試

Python Unittest怎麼進行自動化的單元測試

php中世界最好的语言
php中世界最好的语言原創
2018-04-09 17:53:443326瀏覽

這次帶給大家Python Unittest怎麼進行自動化的單元測試,Python Unittest進行自動化單元測試的注意事項有哪些,以下就是實戰案例,一起來看一下。

本文實例為大家分享了Python Unittest自動化單元測試框架的具體程式碼,供大家參考,具體內容如下

1、python 測試框架(本文只涉及PyUnit)

參考位址

2、環境準備

首先確定已經安裝有Python,之後透過安裝PyUnit,Python版本比較新的已經整合有PyUnit(PyUnit 提供了一個圖形測試介面UnittestGUI.py)
參考:查看位址

3、程式碼實例

##使用的IDE為PyCharm, DEMO結構如圖

1.簡單地一個實例

# Test002_Fail.py
# -*- coding:utf-8 -*-
import unittest
class Test002_Fail(unittest.TestCase):
  #测试用例前执行
  def setUp(self):
    print 'Case Before'
    pass
  #测试用例后执行
  def tearDown(self):
    print 'Case After'
    pass
  #测试用例1
  def test_Case1(self):
    a = 3
    b = 2
    self.assertEqual(a+b,4,'Result Fail')
  #测试用例2
  def test_Case2(self):
    a = 2
    b = 3
    self.assertEqual(a*b,7,'Result Fail')
if name == 'main':
  unittest.main()
2.當case比較多的時候,可以使用Suite來管理多個case, suite 可以看做是一個case 的容器,可以裝很多的case

# SuiteDemo.py
# -*- coding:utf-8 -*-
#一个类,添加测试集
import unittest
class SuiteDemo(unittest.TestCase):
  #测试用例前执行
  def setUp(self):
    print 'Case Before'
    pass
  #测试用例后执行
  def tearDown(self):
    print 'Case After'
    pass
  def test_Case1(self):
    a = 3
    b = 2
    self.assertEqual(a+b,5,'Result Fail')
    print 'Case1'
  def test_Case2(self):
    a = 2
    b = 3
    self.assertEqual(a*b,6,'Result Fail')
    print 'Case2'
#定义一个测试集合,方便添加Case
def suite():
  suiteTest = unittest.TestSuite()
  suiteTest.addTest(SuiteDemo("test_Case1"))
  suiteTest.addTest(SuiteDemo("test_Case2"))
  return suiteTest
#默认运行时通过 Suite 运行
if name == 'main':
  unittest.main(defaultTest='suite')
3.Suite 和Case可以分開寫在不同的Python檔案中,這樣方便區分case模組和Suite管理模組,在測試測試的時候只需要在case模組裡面添加case,之後添加到Suite模組即可了

case模組

# TestCaseDemo
# -*- coding:utf-8 -*-
import unittest
class TestCaseDemo(unittest.TestCase):
  def setUp(self):
    pass
  def tearDown(self):
    pass
  def test_Case1(self):
    print 'test_Case1'
  def test_Case2(self):
    print 'test_Case2'
  def test_Case3(self):
    print 'test_Case3'
  def test_Case4(self):
    print 'test_Case4'
接下來為三個Suite模組,都是先導入Case模組,之後加入Suite,再在Suite裡面加入Case,最後執行的時候需要使用TestRunner,這個TestRunner 相當於Suite 的執行器

簡單地TestSuite:

# TestCase_Demo1.py
# -*- coding:utf-8 -*-
#集合写入一个方法,main调用并启动
import unittest
from TestCase_Demo import TestCaseDemo
#添加一个测试集合,并添加Case
def suite():
  suiteTest = unittest.TestSuite()
  suiteTest.addTest(TestCaseDemo('test_Case1'))
  return suiteTest
#指定并启动测试集合,运行集合方法
if name == 'main':
  runner = unittest.TextTestRunner()
  runner.run(suite())
也可以不定義Suite方法,直接在main方法中進行Case的添加,之後執行

# TestCase_Demo2.py
# -*- coding:utf-8 -*-
#集合可以写在main
import unittest
from TestCase_Demo import TestCaseDemo
#指定并启动测试集合
if name == 'main':
  #添加测试集合Case,并启动
  suiteTest = unittest.TestSuite()
  suiteTest.addTest(TestCaseDemo('test_Case1'))
  suiteTest.addTest(TestCaseDemo('test_Case2'))
  #直接启动集合
  runner = unittest.TextTestRunner()
  runner.run(suiteTest)
可以把不同的Case 添加道不同的Suite裡面,同樣,可以給Suite

分組,用來區分不同的Case ,並且,Suite 之間還可以包含

# TestCase_Demo3.py
# -*- coding:utf-8 -*-
#包含集合,多集合
import unittest
from TestCase_Demo import TestCaseDemo
#添加不同的合集
def Suite1():
  suiteTest = unittest.TestSuite()
  suiteTest.addTest(TestCaseDemo("test_Case1"))
  suiteTest.addTest(TestCaseDemo("test_Case2"))
  print 'Suite1 运行'
  return suiteTest
def Suite2():
  suiteTest = unittest.TestSuite()
  suiteTest.addTest(TestCaseDemo("test_Case3"))
  suiteTest.addTest(TestCaseDemo("test_Case4"))
  print 'Suite2 运行'
  return suiteTest
#包含所有的Suite
def AllSuite():
  allTest = unittest.TestSuite((Suite1(),Suite2()))
  return allTest
#运行的时候,可以根据不同的要求,运行不同的Suite,或者全部运行,这样就方便管理每次运行的case
if name == 'main':
  runner = unittest.TextTestRunner()
  runner.run(AllSuite())
4.小結

PyUnit 是Python的一個單元測試框架,使用它可以方便的管理自動化運行的case.

在Python中,每一個方法只要方法名使用test_ 開頭的都被當作是一個用例,都可以看做成一個case,這裡介紹了使用Suite管理Case,並且分組運行Case,還有其他很多的功能,請參考: unittest — Unit testing framework

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

python使用unittest測試介面步奏詳解

Python怎麼統計字母出現的次數

以上是Python Unittest怎麼進行自動化的單元測試的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn