(1)Unittest框架設計思路
- case:測試用例。
- public:將一些公共的業務封裝成類和方法。
- report:測試報告。
- 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框架總結
- 測試類必須繼承unittest.TestCase。
- 測試函數必須以test開頭。
- 測試類必須有unittest.main()方法。