web自動化測試實戰之批量執行測試用例

本文參考Python自動化測試實戰(作者:無涯)+網上教程+小編實戰操練,感謝前人的教程學學他人的知識點,一步一步變爲自己的知識點,也可以從中衍生新的測試思想與方法.


01

實戰之分離測試固件


在UI 自動化測試中,不管編寫哪個模塊的測試用例,都需要首先在測試類中編寫測試固件初始化WebDriver類及打開瀏覽器,執行登錄,才能進行下一步業務邏輯的操作,測試用例執行完成後還需要關閉瀏覽器,這部分的代碼如下:



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   類名爲:InitTest



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_驗證登錄是否成功,代碼如下:



# 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/p/p/aside/ul/li[3]/span').click()
        time.sleep(1)
        #刷新門店評分報表頁
        cls.dr.refresh()
        time.sleep(5)
        #點擊列表第一頁,第五行門店的查看按鈕,進入評分信息詳情'
        xpath('/html/body/p/p/p/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/p/p/p/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地址即可,而不需要在每個測試類修改測試地址,減少了編寫重複性代碼的開銷。分離了測試固件,運行以上代碼,對應的測試用例執行通過。

02

實戰之批量執行測試用例

在實際測試中,常常需要批量執行測試用例。例如,在testCase 包中有 case001_login.py 和 case002_Score_report.py 兩個文件,下面批量執行這兩個模塊的測試用例。創建新文件  test_case_suite.py,在 test_case_suite.py文件中編寫批量執行的代碼,測試用例的代碼跟上面文件中的一致,目錄大概如下

接着我們在創建 AllTest.py 我們來看看如何進行調用全部的測試用例,如下代碼就可以實現

#-*-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.

後面我會在基於這集中測試方法上,補充一些可優化的點,最近工作比較繁忙,會抽空給大家分享好文,持續分享持續輸出,希望本文對你們會有所幫助,也歡迎大家支持小編,進行分享,廣而告之.

本文參考Python自動化測試實戰(作者:無涯)+網上教程+小編實戰操練,感謝前人的教程,追溯歷史相關文章點擊下方鏈接:

UI自動化1.0《新手需要知道的事兒》

UI自動化1.0《selenium框架詳解》

UI自動化1.0《selenium頁面實戰》

UI自動化1.0《selenium頁面實戰2》

UI自動化1.0《selenium頁面實戰3》

UI自動化1.1《UI自動化框架的瞭解》

UI自動化1.1《UI自動化的框架源碼》

UI自動化1.1《UI自動化的框架源碼》

備註:測試資料集合更新了,可在公衆號後臺回覆989進行領取最新資料包,識別下方二維碼關注,後臺回覆989 

識別下方公衆號二維碼關注,後臺回覆989 

並且推出福利測試技術進階提升圈子點擊原文鏈接或者戳鏈接查看詳情:#測試提升圈#

覺得小編菜雞點個贊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章