UnitTest基礎、測試實例


1.四大組件:
a.test fixture:setUp(前置條件),tearDown(后置條件),用於初始化測試用例及清理和釋放資源
b.test case:測試用例,通過集成unittest.TestCase,來實現用例的繼承。在UnitTest中,測試用例都是通過test來識別的。
例:class forTest(unites.TestCase);def test_xx
c.test suite:測試套件,也稱為測試用例集
d.test runner:運行器,一般通過runner來調用suite去執行測試

2.UnitTest運行機制:通過在main函數中,調用unittest.main()運行所有內容。

import unittest

class forTest(unittest.TestCase):

    # 類的初始化
    @classmethod
    def setUpClass(cls) -> None:
        print('sClass')

    # 類的釋放
    @classmethod
    def tearDownClass(cls) -> None:
        print('tclass')

    # 用例初始化(用例執行前執行)
    def setUp(self) -> None:
        print('setUp')

    # 用例釋放(用例執行后執行)
    def tearDown(self) -> None:
        print('tearDown')

    #函數
    def plus(self,a,b):
        print(a+b)
        return a+b

    def test_c(self):
        self.plus(1,2)
        print('c')

    # 測試用例
    def test_a(self):
        print('a')

    def test_b(self):
        print('b')

if __name__=='__main__':
    unittest.main(verbosity=2)  # verbosity=2 讓結果更細致些

'''
只有test_xx() 的函數才能執行
'''

打印結果:

 

 

3.ddt數據驅動
ddt(data-driver tests), 在實際測試中,單個測試需要用多種不同的條件(測試數據)對其測試。

a. 在class前定義@ddt,data用於設定參數

下面的例子實現自動打開百度,並輸入'網球王子' 、'王者榮耀',相當於兩條測試數據

import unittest
from selenium import webdriver
import time
from ddt import ddt,data,

@ddt
class forTest01(unittest.TestCase):

    def setUp(self) -> None:
        self.driver = webdriver.Chrome()
        self.driver.get('http://www.baidu.com/')
        # pass

    def tearDown(self) -> None:
        time.sleep(2)
        # pass

    @data('網球王子', '王者榮耀')
    def test_1(self, txt):
        self.driver.find_element_by_id('kw').send_keys(txt)
        self.driver.find_element_by_id('su').click()

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

 

b. unpack用於解析參數。當需要傳入多個參數時,unpack可以依次解析傳參。

@ddt
class forTest01(unittest.TestCase):

    def setUp(self) -> None:
        self.driver = webdriver.Chrome()
        # pass

    def tearDown(self) -> None:
        time.sleep(2)
        # pass

    @data(('http://www.baidu.com/', '王者榮耀'),('http://www.baidu.com/','網球王子'))
    @unpack
    def test_1(self, url, txt):
        self.driver.get(url)
        self.driver.find_element_by_id('kw').send_keys(txt)
        self.driver.find_element_by_id('su').click()

 

c. file_data是ddt中用於讀取yml文件的裝飾器

 

文件傳參實現自動化

import unittest
from selenium import webdriver
import time
from ddt import ddt,data,unpack,file_data
import yaml

@ddt
class forTest01(unittest.TestCase):

    def setUp(self) -> None:
        self.driver = webdriver.Chrome()
        # pass

    def tearDown(self) -> None:
        time.sleep(3)
        # pass

    @file_data('ppp.yml')
    def test_1(self, **kwargs):
        self.driver.get(kwargs.get('url')) # 獲取參數中key為url的value
        self.driver.find_element_by_id('kw').send_keys(kwargs.get('txt'))
        self.driver.find_element_by_id('su').click()

 

安裝PyYAML

import yaml

file = open('f.yml', encoding='utf-8')
res = yaml.load(file, Loader = yaml.FullLoader)
print(res)

打印結果:

{'name': '小龍女', 'age': 18, 'data': {'a': 1, 'b': '2', 'c': 3, 'd': 4}, 'list': [1, 2, 'c']}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM