01實戰之分離測試固件html
在UI 自動化測試中,無論編寫哪一個模塊的測試用例,都須要首先在測試類中編寫測試固件初始化WebDriver類及打開瀏覽器,執行登陸,才能進行下一步業務邏輯的操做,測試用例執行完成後還須要關閉瀏覽器,這部分的代碼以下:python
import unittest from selenium import webdriver import time, os class InitTest(unittest.TestCase): @classmethod def setUpClass(cls): #print('start!進入初始化環境') cls.dr = webdriver.Chrome() cls.dr.maximize_window() #print('測試瀏覽器爲:{0}'.format(cls.dr.name)) time.sleep(1) ulr1 = 'http://*******.****.com.cn' @classmethod def tearDownclass(cls): cls.dr.quit()
在每個測試類中都要編寫以上代碼,所以須要重複編寫不少代碼。是否能夠把測試固件這部分代碼分離出去,測試類直接繼承分離出去的類呢?咱們把測試固件分離到項目中,新建文件名稱爲 public_XF_login.py 類名爲:InitTestweb
import unittest from selenium import webdriver import time, os class InitTest(unittest.TestCase): @classmethod def setUpClass(cls): #print('start!進入初始化環境') cls.dr = webdriver.Chrome() cls.dr.maximize_window() #print('測試瀏覽器爲:{0}'.format(cls.dr.name)) time.sleep(1) ulr1 = 'http://********.com.cn' #(u'訪問測試環境後臺管理系統') cls.dr.get(ulr1) #print('測試地址爲:{0}'.format(cls.dr.current_url)) time.sleep(1) xpath = cls.dr.find_element_by_xpath #點擊帳號登陸,輸入用戶名+密碼 xpath('//*[@id="app"]/div/div[2]/div[2]/div/div[1]/div').click() time.sleep(1) # 捕捉帳號文本欄,進行輸入帳號 xpath('//*[@id="app"]/div/div[2]/div[2]/div/form/div[1]/input').send_keys(u'********') time.sleep(1) # 捕捉密碼文本欄,進行輸入密碼 xpath('//*[@id="app"]/div/div[2]/div[2]/div/form/div[2]/input').send_keys(u'*******') time.sleep(1) #點擊登陸 xpath('//*[@id="app"]/div/div[2]/div[2]/div/form/div[3]/input').click() @classmethod def tearDownclass(cls): cls.dr.quit()
from test_python.public_XF_login import InitTest 在須要引用該類的文件先進行引用該類,測試類進行繼承InitTest,繼承後,在測試類中直接編寫要執行的測試用例,例如(該2條case是小編實際項目的自動化代碼,各位能夠也拿)case001_驗證登陸是否成功,代碼以下:瀏覽器
# -*-coding=utf-*- import time import unittest from test_python.public_XF_login import InitTest class Admin(InitTest): def testCase_001(cls): '''驗證用戶是否登陸成功''' cls.assertEqual('http://********.com.cn/#/', cls.dr.current_url) time.sleep(1) cls.dr.quit() if __name__ == '__main__': unittest.main(verbosity=2)
from test_python.public_XF_login import InitTest 在須要引用該類的文件先進行引用該類,測試類進行繼承 InitTest,繼承後,在測試類中直接編寫要執行的測試用例,例如case002_驗證登陸是否成功,代碼以下:app
# coding=utf-8 import time import unittest from test_python.public_XF_login import InitTest class Admin(InitTest): def testCase_002(cls): '''進入門店評分報表頁面_驗證門店查看明細功能''' xpath = cls.dr.find_element_by_xpath time.sleep(2) #進入門店評分報表頁面 xpath('/html/body/section/section/aside/ul/li[3]/span').click() time.sleep(1) #刷新門店評分報表頁 cls.dr.refresh() time.sleep(5) #點擊列表第一頁,第五行門店的查看按鈕,進入評分信息詳情' xpath('/html/body/section/section/section/main/div[2]/div/div/div[2]/div[2]/div[1]/div[3]/table/tbody/tr[5]/td[10]/div/button/span').click() #斷言門店詳情頁面制定元素是否展現的爲神祕訪客 判斷頁面是否成功跳轉到詳情頁 text = xpath('/html/body/section/section/section/main/div[2]/div/div/div[2]/div[2]/div/div[1]/div[1]/p[1]').text cls.assertEqual(u'神祕顧客', text) time.sleep(1) cls.dr.quit() #Case_002執行完畢關閉瀏覽器 if __name__ == '__main__': unittest.main(verbosity=2)
註解:首先須要導入public_XF_login.py 模塊中的InitTest類,測試類 Admin 繼承InitTest類。這樣執行測試類後,會先執行setUpClass方法,再執行具體的測試用例,最後執行 tearDownclass 方法。python 的類繼承的方式解決了在每一個測試類中都須要編寫測試固件的問題。把測試固件分離出去後,即便後期測試地址發生變化,只須要修改public_XF_login.py 模塊中InitTest類中的 url地址便可,而不須要在每一個測試類修改測試地址,減小了編寫重複性代碼的開銷。分離了測試固件,運行以上代碼,對應的測試用例執行經過。ide
02實戰之批量執行測試用例測試
在實際測試中,經常須要批量執行測試用例。例如,在testCase 包中有 case001_login.py 和 case002_Score_report.py 兩個文件,下面批量執行這兩個模塊的測試用例。建立新文件 test_case_suite.py,在 test_case_suite.py文件中編寫批量執行的代碼,測試用例的代碼跟上面文件中的一致,目錄大概以下優化
接着咱們在建立 AllTest.py 咱們來看看如何進行調用所有的測試用例,以下代碼就能夠實現ui
#-*-coding=utf-8-*- import unittest import os def AllTest(): '''獲取全部的測試模塊''' suite=unittest.TestLoader().discover( start_dir=os.path.dirname('F:\\python3\\python_code\\test_case_suite'), pattern='case*.py', top_level_dir=None) return suite if __name__ == '__main__': unittest.TextTestRunner(verbosity=2).run(AllTest())
註解:在以上代碼中,批量獲取測試模塊用到的方法是 discover。discover方法有三個參數,第一個參數 start_dir是測試模塊的路徑,存放在testCase包中;第二個參數pattern用來獲取testCase包中全部以test開頭的模塊文件,會獲取到test_baidu.py和test_sina.py;第三個參數 top_level_dir 在調用的時候直接給默認值None。咱們執行 AllTest.py 文件執行代碼以下,這就是批量化執行case.url
後面我會在基於這集中測試方法上,補充一些可優化的點,最近工做比較繁忙,會抽空給你們分享好文,持續分享持續輸出,但願本文對大家會有所幫助。本文參考Python自動化測試實戰(做者:無涯),感謝前人的教程學學他人的知識點,一步一步變爲本身的知識點,也能夠從中衍生新的測試思想與方法。