python自动化框架2019_《一头扎进》系列之Python+Selenium自动化测试框架实战篇6 - 价值好几K的框架,呦!这个框架还真牛叉哦!!!...
1. 簡(jiǎn)介
本文開(kāi)始介紹如何通過(guò)unittest來(lái)管理和執(zhí)行測(cè)試用例,這一篇主要是介紹unittest下addTest()方法來(lái)加載測(cè)試用例到測(cè)試套件中去、用addTest()方法來(lái)加載我們測(cè)試用例到suite中去和利用discover()方法去加載一個(gè)路徑下所有的測(cè)試用例。
2. addTest()方法
這里首先介紹unittest下addTest()方法來(lái)加載測(cè)試用例到測(cè)試套件中去。為了演示效果,我在前面文章的腳本基礎(chǔ)上,新建了一個(gè)測(cè)試腳本,這個(gè)測(cè)試腳本有一個(gè)測(cè)試用例,加上前面的測(cè)試腳本,一共就是三個(gè)測(cè)試用例,前面那個(gè)測(cè)試類(lèi)里面包括兩個(gè)測(cè)試用例。
新建的測(cè)試腳本,test_get_page_title.py代碼如下:
2.1 代碼實(shí)現(xiàn):
2.2 參考代碼:
#-*- coding:utf-8 -*-
#1.先設(shè)置編碼,utf-8可支持中英文,如上,一般放在第一行
#2.注釋:包括記錄創(chuàng)建時(shí)間,創(chuàng)建人,項(xiàng)目名稱(chēng)。
'''Created on 2019-12-24
@author: 北京-宏哥 QQ交流群:705269076
Project: 《《一頭扎進(jìn)》系列之Python+Selenium框架設(shè)計(jì)篇5- 價(jià)值好幾K的框架,呦!這個(gè)框架還真牛叉哦!!!'''
#3.導(dǎo)入模塊
importunittestfrom automation_framework_demo.framework.browser_engine importBrowserEnginefrom automation_framework_demo.pageobjects.baidu_homepage importHomePageclassGetPageTitle(unittest.TestCase):
@classmethoddefsetUpClass(cls):
browser=BrowserEngine(cls)
cls.driver=browser.open_browser(cls)
@classmethoddeftearDownClass(cls):
cls.driver.quit()deftest_get_title(self):
homepage=HomePage(self.driver)print(homepage.get_page_title())
2.3 運(yùn)行結(jié)果:
運(yùn)行代碼后,控制臺(tái)打印如下圖的結(jié)果
今天來(lái)學(xué)習(xí)下,如果加載這兩個(gè)測(cè)試類(lèi)文件里面的3個(gè)測(cè)試腳本。在unittest下有一個(gè)管理測(cè)試套件的叫TestSuit(),我們要使用這個(gè)測(cè)試套件,需要先初始化一個(gè)suite實(shí)例,然后這個(gè)實(shí)例有一個(gè)addTest()的方法,可以加載不同類(lèi)里面的不同測(cè)試函數(shù),格式這樣的 addTest(測(cè)試類(lèi)的類(lèi)名(‘測(cè)試函數(shù)名稱(chēng),就是test開(kāi)頭的函數(shù)’)),我們?cè)趖estsuites這個(gè)包下新建一個(gè)TestRunner.py文件用來(lái)管理我們的用例啟動(dòng)方式。
來(lái)看看這個(gè)TestRunner.py的內(nèi)容
2.4 代碼實(shí)現(xiàn):
2.5 參考代碼:
#-*- coding:utf-8 -*-
#1.先設(shè)置編碼,utf-8可支持中英文,如上,一般放在第一行
#2.注釋:包括記錄創(chuàng)建時(shí)間,創(chuàng)建人,項(xiàng)目名稱(chēng)。
'''Created on 2019-12-24
@author: 北京-宏哥 QQ交流群:705269076
Project: 《《一頭扎進(jìn)》系列之Python+Selenium框架設(shè)計(jì)篇5- 價(jià)值好幾K的框架,呦!這個(gè)框架還真牛叉哦!!!'''
#3.導(dǎo)入模塊
importunittest#from automation_framework_demo.testsuits import testsuits
from automation_framework_demo.testsuits.baidu_search2 importBaiduSearchfrom automation_framework_demo.testsuits.test_get_page_title importGetPageTitle
suite=unittest.TestSuite()
suite.addTest(BaiduSearch('test_baidu_search'))
suite.addTest(BaiduSearch('test_search2'))
suite.addTest(GetPageTitle('test_get_title'))if __name__ == '__main__':#執(zhí)行用例
runner =unittest.TextTestRunner()
runner.run(suite)
2.6 運(yùn)行結(jié)果:
運(yùn)行代碼后,控制臺(tái)打印如下圖的結(jié)果
這個(gè)方法有沒(méi)有局限性呢?當(dāng)然有,加入你有幾百個(gè)測(cè)試類(lèi),你是不是也一直這樣手動(dòng)去添加?有沒(méi)有其他更好的方法去加載我們的測(cè)試腳本,關(guān)于這個(gè)問(wèn)題,請(qǐng)緊跟宏哥的腳步繼續(xù)往下看、往下走。
3. makeSuite()方法
前面文章介紹了如何用addTest()方法來(lái)加載我們測(cè)試用例到suite中去,本文介紹利用makeSuite()方法,一次性加載一個(gè)類(lèi)文件下所有測(cè)試用例到suite中去。還是利用前面一篇文章中的測(cè)試腳本,來(lái)看看TestRunner.py如何寫(xiě)。
3.1 代碼實(shí)現(xiàn):
3.2 參考代碼:
#-*- coding:utf-8 -*-
#1.先設(shè)置編碼,utf-8可支持中英文,如上,一般放在第一行
#2.注釋:包括記錄創(chuàng)建時(shí)間,創(chuàng)建人,項(xiàng)目名稱(chēng)。
'''Created on 2019-12-24
@author: 北京-宏哥 QQ交流群:705269076
Project: 《《一頭扎進(jìn)》系列之Python+Selenium框架設(shè)計(jì)篇5- 價(jià)值好幾K的框架,呦!這個(gè)框架還真牛叉哦!!!'''
#3.導(dǎo)入模塊
importunittest#from automation_framework_demo.testsuits import testsuits
from automation_framework_demo.testsuits.baidu_search2 importBaiduSearchfrom automation_framework_demo.testsuits.test_get_page_title importGetPageTitle'''suite = unittest.TestSuite()
suite.addTest(BaiduSearch('test_baidu_search'))
suite.addTest(BaiduSearch('test_search2'))
suite.addTest(GetPageTitle('test_get_title'))'''suite=unittest.TestSuite(unittest.makeSuite(BaiduSearch))if __name__ == '__main__':#執(zhí)行用例
runner =unittest.TextTestRunner()
runner.run(suite)
3.3 運(yùn)行結(jié)果:
運(yùn)行代碼后,控制臺(tái)打印如下圖的結(jié)果
缺陷: makeSuite()方法雖然比前面文章的addTest()方法有了一定的效率提升,在添加測(cè)試用例到測(cè)試套件過(guò)程。但是這個(gè)方法也有很多缺點(diǎn),我不可能把所有項(xiàng)目腳本都放一個(gè)測(cè)試類(lèi)文件吧。在unittest中還是有很多方法可以用來(lái)添加測(cè)試用例到suite中,makeSuite(類(lèi)名稱(chēng)),只是一種,你可以多看看unittest的文檔介紹。接下來(lái)我們介紹如何一次性加載一個(gè)文件目錄下所有測(cè)試用例。
4. discover()方法
繼續(xù)接著介紹,如何利用unittest管理和執(zhí)行測(cè)試用例的問(wèn)題,這里我們還是利用之前已經(jīng)有的三條測(cè)試用例,如果你跳過(guò)了前面文章,請(qǐng)回到框架設(shè)計(jì)篇的第八篇和第七篇,里面有相關(guān)測(cè)試類(lèi)的文件。本文來(lái)介紹,如果利用discover()方法去加載一個(gè)路徑下所有的測(cè)試用例。這個(gè)方法是不是太適合我們現(xiàn)在的需求,例如我只需要跑testsuite包下所有測(cè)試用例,不管在里面有多少個(gè)包和多少個(gè)測(cè)試類(lèi),只需要用discover()搞定,來(lái)看看這個(gè)場(chǎng)景下TestRunner.py如何寫(xiě)。
4.1 代碼實(shí)現(xiàn):
4.2 參考代碼:
#-*- coding:utf-8 -*-
#1.先設(shè)置編碼,utf-8可支持中英文,如上,一般放在第一行
#2.注釋:包括記錄創(chuàng)建時(shí)間,創(chuàng)建人,項(xiàng)目名稱(chēng)。
'''Created on 2019-12-24
@author: 北京-宏哥 QQ交流群:705269076
Project: 《《一頭扎進(jìn)》系列之Python+Selenium框架設(shè)計(jì)篇5- 價(jià)值好幾K的框架,呦!這個(gè)框架還真牛叉哦!!!'''
#3.導(dǎo)入模塊
importunittest
suite= unittest.TestLoader().discover("testsuits")if __name__ == '__main__':#執(zhí)行用例
runner =unittest.TextTestRunner()
runner.run(suite)
4.3 運(yùn)行結(jié)果:
運(yùn)行代碼后,控制臺(tái)打印如下圖的結(jié)果
上面的testsuits是可以包名,也可以是一個(gè)文件夾名稱(chēng),在實(shí)際腳本開(kāi)發(fā)過(guò)程中,最后都采用這個(gè)方法來(lái)批量管理和執(zhí)行幾百上千的測(cè)試用例。下一篇內(nèi)容,大概會(huì)介紹如何利用HTMLTestRunner.py這個(gè)開(kāi)源的插件,生成測(cè)試報(bào)告,這個(gè)測(cè)試報(bào)告是一個(gè)HTML的格式。介紹完了生成報(bào)告文章,框架設(shè)計(jì)系列教程就會(huì)結(jié)束,不打算過(guò)多介紹其他技能點(diǎn)。
5. 小結(jié)
5.1 報(bào)錯(cuò)提示:ImportError: Start directory is not importable: 'D:\\PyCharm-Workspace\\testcases'
以下兩種路徑實(shí)現(xiàn)代碼存放在path.py中,查看區(qū)別:
base_dir = os.path.dirname(os.getcwd()) # 第一種,當(dāng)前目錄
# os.getcwd() 定位路徑為common
# os.path.dirname(os.getcwd()) 定位路徑為API_work
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 第二種,該代碼存放的根目錄
# os.path.abspath(__file__) 定位路徑為path.py
# os.path.dirname(os.path.abspath(__file__)) 定位路徑為common
# os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 定位路徑為API_work
以上兩種方式,在path.py中執(zhí)行,print輸出均為:
但第一種方式,在run.py中調(diào)用path.py中的base_dir屬性,查找 "test_*.py" 的根目錄就會(huì)出現(xiàn)下以報(bào)錯(cuò):
原因:
1、在run.py中調(diào)用path.py 中的 os.getcwd() 代碼 ,就是定位 run.py 的根目錄;
即:
os.getcwd() 定位路徑為API_work
os.path.dirname(os.getcwd()) 定位路徑為API_work的上一層目錄,因找不到上一層目錄,所以報(bào)錯(cuò);
2、在run.py中調(diào)用第二種方式,是查找path.py的根目錄,所以可執(zhí)行正常;
總結(jié):
其他模塊會(huì)調(diào)用固定路徑時(shí),不要使用 os.getcwd() 當(dāng)前定位方式來(lái)實(shí)現(xiàn);使用 os.path.abspath(__file__) 實(shí)現(xiàn)。
好了,今天的分享就到這里吧!!!謝謝各位的耐心閱讀。有問(wèn)題加群交流討論
您的肯定就是我進(jìn)步的動(dòng)力。如果你感覺(jué)還不錯(cuò),就請(qǐng)鼓勵(lì)一下吧!記得隨手點(diǎn)波推薦不要忘記哦!!!
別忘了點(diǎn) 推薦留下您來(lái)過(guò)的痕跡
總結(jié)
以上是生活随笔為你收集整理的python自动化框架2019_《一头扎进》系列之Python+Selenium自动化测试框架实战篇6 - 价值好几K的框架,呦!这个框架还真牛叉哦!!!...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: QQ空间个人中心的亲密空间介绍
- 下一篇: python中常见的运行时错误_常见Py