Unittest單元測試框架



(1)Unittest框架設計思路

  1. case:測試用例。
  2. public:將一些公共的業務封裝成類和方法。
  3. report:測試報告。
  4. testrunner:批量運行。

(2)setUp、tearDown、測試函數

  • setUp()方法,初始化,最先執行,比如:每次都會打開瀏覽器,打印開始執行測試的時間。
  • tearDown()方法,最后執行,比如:每次執行完成都會截圖,打印執行結束的時間。
  • 測試函數 ,第二執行,函數名必須以test開頭。
from selenium import webdriver
import unittest
import os
import time
from public.wukong_crm.login import Login


class TestIndex(unittest.TestCase):
    def setUp(self):
        """ setUp方法,初始化 最先執行,每次都會打開頁面 """
        self.driver = webdriver.Chrome()
        # 打開悟空CRM系統
        self.driver.get("http://[服務器ip]:8088/")
        self.driver.maximize_window()
        time.sleep(3)

        # 打印用例開始執行的時間
        print("start_time:" + time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())))

    def tearDown(self):
        """  最后執行,每次執行完成都會截圖 """
        file_dir = "D:/Desktop/Testman_Study/圖庫/screen/"
        # 如果找不到文件夾,則新建一個文件夾
        if not os.path.exists(file_dir):
            os.makedirs(os.path.join("D:/", "Desktop", "Testman_Study", "圖庫", "screen"))
        # 打印執行完成的時間
        print("end_time:" + time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())))
        # 截圖命名以時間戳命名
        screen_name = file_dir + time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time())) + ".png"
        self.driver.get_screenshot_as_file(screen_name)
        self.driver.quit()

    def testIndex01_01(self):
        """WKCRM_001. 驗證導航文案是否顯示正常"""
        # 調用login方法,登錄悟空CRM系統
        Login(self.driver).login()
        
        # 獲取導航欄各個控件的文本信息
        # 辦公
        text_bg = self.driver.find_element_by_xpath('//a[@class="nav-item router-link-active"]/div').text
        # 客戶管理
        text_khgl = self.driver.find_element_by_xpath('//*[@id="app"]/section/header/div/div/div/a[2]/div').text
        # 商業智能
        text_syzn = self.driver.find_element_by_xpath('//*[@id="app"]/section/header/div/div/div/a[3]/div').text
        # 項目管理
        text_xmgl = self.driver.find_element_by_xpath('//*[@id="app"]/section/header/div/div/div/a[4]/div').text
        # 開通授權
        text_ktsq = self.driver.find_element_by_xpath('//*[@id="app"]/section/header/div/span[1]/button').text
        # 帶有用戶名的頭像
        text_tx = self.driver.find_element_by_xpath(
            '//*[@id="app"]/section/header/div/span[2]/div[2]/div/div/div/div').text
        # 斷言結果,進行文本信息的比對
        self.assertEqual('辦公', text_bg)
        self.assertEqual('客戶管理', text_khgl)
        self.assertEqual('商業智能', text_syzn)
        self.assertEqual('項目管理', text_xmgl)
        self.assertEqual('開通授權', text_ktsq)
        self.assertEqual('hs', text_tx)
        
if __name__ == "__main__":
    unittest.main()

(3)斷言機制、常用斷言方法

        # 斷言方法一:
        # assertEqual、assertNotEqual
        # 表示相等
        self.assertEqual('辦公', text_bg)
        self.assertNotEqual("辦公管理", text_bg)

        # 斷言方法二:
        # assertIn、assertNotIn
        # 表示包含,類似於模糊查詢
        self.assertIn("開通", text_ktsq)

        # 斷言方法三:
        # assertTrue、assertFalse
        # bool值
        self.assertTrue(
            self.driver.find_element_by_xpath('//a[@class="nav-item router-link-active"]/div').is_displayed())
        self.assertFalse(
            self.driver.find_element_by_xpath('//a[@class="nav-item router-link-active"]/div').is_displayed())

        # 斷言方法四:
        # 設置一個不存在的控件,找不到就會報錯,強制中斷
        if username.text == "":
            print("不等於")
        else:
            print("不等於")
            self.driver.find_element_by_id("蔡坨坨")

(4)批量執行自動化測試用例、html美化報告生成

testrunner.py

# -*- coding:utf-8 -*-
# 作者:IT小學生蔡坨坨
# 時間:2020/12/16 22:41

import unittest
import time
import os
import sys
from report import HTMLTestRunner

# 獲取當前.py文件的絕對路徑,並進行路徑分割
# dir_name:目錄路徑
# file_name:文件名稱
dir_name, file_name = os.path.split(os.path.abspath(sys.argv[0]))
print(dir_name, file_name)
# 測試用例路徑
case_path = ".\\case\\web\\wukong_crm\\"
# 測試報告路徑
result = dir_name + "\\report\\"

def create_suite():
    """  定義單元測試容器 """
    test_unit = unittest.TestSuite()  # TestSuite() 測試套件

    # 定義搜索用例文件的方法
    # 比如:web/yunshang下的所有.py文件
    discover = unittest.defaultTestLoader.discover(case_path, pattern="*.py", top_level_dir=None)
    # 將測試用例加入測試容器中
    for test_suite in discover:
        for case_name in test_suite:
            test_unit.addTest(case_name)
    return test_unit

# 調用create_suite()方法
test_case = create_suite()
# 獲取系統當前時間
now_time = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time()))
day = time.strftime('%Y-%m-%d', time.localtime(time.time()))
# 定義測試報告路徑
result_dir = result + day

def report():
    """定義一個測試報告生成方法"""
    file_name = result_dir + "\\" + now_time + "_result.html"
    fp = open(file_name, 'wb')
    # 定義測試報告
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title="測試報告", description="執行情況")
    # 執行測試用例
    runner.run(test_case)
    # 關閉報告文件
    fp.close()

# 檢驗文件夾路徑是否存在
if os.path.exists(result_dir):
    # 調用report()方法
    report()
else:
    # 創建測試報告文件夾
    os.mkdir(result_dir)
    report()

HTMLTestRunner.py美化html測試報告

(5)CRM項目自動化測試

. 代表通過

F 代表未通過

E 表示程序錯誤

unittest框架總結

  1. 測試類必須繼承unittest.TestCase。
  2. 測試函數必須以test開頭。
  3. 測試類必須有unittest.main()方法。


免責聲明!

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



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