在CSDN上面看到一篇文章,是web自動(dòng)化測(cè)試?yán)樱玫氖莝elenium python,這個(gè)里面元素的定位我還不太了解,但是自動(dòng)化思維是一致的,謄抄下來,留著以后用。
一、安裝HTMLTestRunner
HTMLTestRunner 是 Python 標(biāo)準(zhǔn)庫的 unittest 模塊的一個(gè)擴(kuò)展,它可以生成 HTML的 測(cè)試報(bào)告。?
首先要下 HTMLTestRunner.py 文件,將下載的文件放入…\python\Lib目錄下?
python2版下載地址:http://tungwaiyip.info/software/HTMLTestRunner.html?
python3版下載地址:http://pan.baidu.com/s/1dEZQ0pz
在IDLE里引入 HTMLTestRunner 包,如果沒有報(bào)錯(cuò),則說明添加成功,如下圖:?
之后是給出了alltest.py執(zhí)行測(cè)試套件,并且生成測(cè)試報(bào)告,然后給出了百度搜索和搜狗搜索的testcase,如下:
二、代碼
#coding=utf-8'''
Created on 2017-6-14
@author: 靈樞
Project:通過測(cè)試套件執(zhí)行多個(gè)測(cè)試用例,并生成報(bào)告
'''import HTMLTestRunnerimport unittestimport os,time
listaa = "E:\\selenium_python2\\test_case"defcreatesuite1():? ? testunit=unittest.TestSuite()
? ? discover=unittest.defaultTestLoader.discover(listaa,pattern='start_*.py',top_level_dir=None)
? ? for test_suite in discover:
? ? ? ? for test_case in test_suite:
? ? ? ? ? ? testunit.addTests(test_case)
? ? ? ? ? ? print(testunit)
? ? return testunit
now = time.strftime("%Y-%m-%d %H_%M_%S",time.localtime())
filename="E:\\selenium_python2\\report\\"+now+"_result.html"fp=open(filename,'wb')
runner=HTMLTestRunner.HTMLTestRunner(
? ? stream=fp,
? ? title=u'搜索功能測(cè)試報(bào)告',
? ? description=u'用例執(zhí)行情況:')
runner.run(createsuite1())#關(guān)閉文件流,不關(guān)的話生成的報(bào)告是空的
fp.close()
代碼分析
import HTMLTestRunner:要使用 HTMLTestRunner 首先要導(dǎo)入模塊
unittest.TestSuite():TestSuite()可以看作成一個(gè)容器 ,可通過 addTests 方法把要執(zhí)行的用例添加到該容器里
defaultTestLoader:測(cè)試用例加載器,其包括多個(gè)加載測(cè)試用例的方法。返回一個(gè)測(cè)試套件
discover(listaa,pattern=’start*.py’,top_level_dir=None):找到指定目錄listaa下所有測(cè)試模塊;遞歸查到子目錄下名稱以start開頭的測(cè)試用例,只有匹配到文件名才能被加載;如果啟動(dòng)的不是頂層目錄,那么頂層目錄必須要單獨(dú)指定,如果沒有頂層目錄,默認(rèn)為None
time.strftime(“%Y-%m-%d %H_%M_%S”,time.localtime()):獲取當(dāng)前時(shí)間,第一個(gè)參數(shù)設(shè)置時(shí)間格式,第二個(gè)參數(shù)是得到struct_time 形式的當(dāng)前時(shí)間
filename=”E:\selenium_python2\report\”+now+”_result.html”:測(cè)試報(bào)告的存放路徑及文件名,文件名中加了當(dāng)前時(shí)間以便每次生成不同的測(cè)試報(bào)告
fp=open(filename,’wb’):創(chuàng)測(cè)試報(bào)告的html文件,此時(shí)還是個(gè)空文件
runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title=u’搜索功能測(cè)試報(bào)告’,description=u’用例執(zhí)行情況:’) :定義 HTMLTestRunner 測(cè)試報(bào)告,stream 定義報(bào)告所寫入的文件;title 為報(bào)告的標(biāo)題;description 為報(bào)告的說明與描述
runner.run(createsuite1()):運(yùn)行測(cè)試容器中的用例,并將結(jié)果寫入的報(bào)告中
fp.close():關(guān)閉文件流,將HTML內(nèi)容寫進(jìn)測(cè)試報(bào)告文件
listaa目錄下的測(cè)試用例:
start_baidu.py
# coding=utf-8
'''
Created on 2017-6-14
@author: 靈樞
Project:登錄百度測(cè)試用例
'''
from selenium import webdriver
import unittest, time
classBaiduTest(unittest.TestCase):? ??
? ? def setUp(self): ? ? ??
? ? ? ? self.driver = webdriver.Chrome()
? ? ? ? self.driver.implicitly_wait(30) #隱性等待時(shí)間為30秒? ? ? ??
? ? ? ? self.base_url = "https://www.baidu.com"? ??
def ?test_baidu_search(self):? ? ? ??
? ? ? ?u"""百度搜索"""? ? ? ??
? ? ? ? driver = self.driver
? ? ? ? driver.get(self.base_url + "/")
? ? ? ? driver.find_element_by_id("kw").clear()
? ? ? ? driver.find_element_by_id("kw").send_keys("unittest")
? ? ? ? driver.find_element_by_id("su").click()
? ? ? ? time.sleep(3)
? ? ? ? title=driver.title
? ? ? ? self.assertEqual(title, u"unittest_百度搜索")
? ? def ?test_baidu_set(self):? ? ? ??
? ? ? ? ?u"""百度設(shè)置"""? ? ? ??
? ? ? ? driver=self.driver
? ? ? ? driver.get(self.base_url+"/gaoji/preferences.html")
? ? ? ? m=driver.find_element_by_name("NR")
? ? ? ? time.sleep(1)
? ? ? ? m.find_element_by_xpath("http://option[@value='50']").click()
? ? ? ? time.sleep(1)
? ? def ?tearDown(self):? ? ? ??
? ? ? ? self.driver.quit()
if __name__ == "__main__":
? ? ? ? unittest.main()
start_sogou.py
搜狗搜索類似百度搜索的操作,不再重復(fù)復(fù)制。
三、運(yùn)行
運(yùn)行all_tests.py,生成的報(bào)告如下:
