我們整個自動化才是報告的環節基本上分為三個部分:
1.測試用例的准備
2.測試用例的執行
3.測試報告的輸出
1.測試用例的准備:
那我們就以搜孤網頁做一個簡單的用例:
from selenium import webdriver import unittest class Case_1(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.maximize_window()#放大瀏覽器
self.driver.get("https://www.sogou.com/") def test_001(self): self.driver.find_element_by_link_text('微信').click() self.assertIn(self.driver.title,u'搜狗微信搜索_訂閱號及文章內容獨家收錄,一搜即達') def test_002(self): self.driver.find_element_by_link_text('新聞').click() self.assertIn(self.driver.title,u'搜狗新聞 - 上網從搜狗開始') def test_003(self): self.driver.find_element_by_link_text('圖片').click() self.assertIn(self.driver.title,u'搜狗圖片-上網從搜狗開始') def tearDown(self): self.driver.close() self.driver.quit() if __name__ == '__main__': unittest.main() print('簡單的用例')
2-3.用例執行與測試報告的輸出:
import os,time,unittest import HTMLTestRunner report_path = os.getcwd()#'F:\Python\Interface_automation'
now = time.strftime('%y-%m-%d %H:%M',time.localtime(time.time()))#獲取當前信息並且以前面的格式輸出
title = u'搜狗首頁鏈接測試報告'#標題
report_repash = os.path.join(report_path,title + now + '.html')#這里只要是組成一個測試報告路徑
print(report_repash) #導入用例
def case_all(): case_pash = 'F:\Python\Interface_automation' discover = unittest.defaultTestLoader.discover(case_pash,pattern='ceshi*.py')#添加用例,在case_path的路徑下,所有以ceshi開頭的文件都當做用例文件執行
return discover if __name__ == '__main__': fp = open(report_repash, "wb") # 保存報告文件
print(fp) runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=title + ':',) runner.run(case_all()) # 執行用例
fp.close() '''二、unittest.defaultTestLoader.discover加載測試用例 1.discover方法里面有三個參數: -case_dir:這個是待執行用例的目錄。 -pattern:這個是匹配腳本名稱的規則,test*.py意思是匹配test開頭的所有腳本。 -top_level_dir:這個是頂層目錄的名稱,一般默認等於None就行了。 2.discover加載到的用例是一個list集合,需要重新寫入到一個list對象testcase里,這樣就可以用unittest里面的TextTestRunner這里類的run方法去執行。'''
這就是一個完整的測試用例的產生-執行-結果輸出的一個過程其中測試用例的執行有三種辦法:
如下:
# coding=utf-8 #1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行
#2.注釋:包括記錄創建時間,創建人,項目名稱。
''' Created on 2016-7-27 @author: Jennifer Project:使用unittest框架編寫測試用例思路 '''
#3.導入unittest模塊
import unittest #4.定義測試類,父類為unittest.TestCase。 #可繼承unittest.TestCase的方法,如setUp和tearDown方法,不過此方法可以在子類重寫,覆蓋父類方法。 #可繼承unittest.TestCase的各種斷言方法。
class Test(unittest.TestCase): #5.定義setUp()方法用於測試用例執行前的初始化工作。 #注意,所有類中方法的入參為self,定義方法的變量也要“self.變量” #注意,輸入的值為字符型的需要轉為int型
def setUp(self): self.number=raw_input('Enter a number:') self.number=int(self.number) #6.定義測試用例,以“test_”開頭命名的方法 #注意,方法的入參為self #可使用unittest.TestCase類下面的各種斷言方法用於對測試結果的判斷 #可定義多個測試用例 #最重要的就是該部分
def test_case1(self): print(self.number) self.assertEqual(self.number,10,msg='Your input is not 10') def test_case2(self): print(self.number) self.assertEqual(self.number,20,msg='Your input is not 20') @unittest.skip('暫時跳過用例3的測試') def test_case3(self): print (self.number) self.assertEqual(self.number,30,msg='Your input is not 30') #7.定義tearDown()方法用於測試用例執行之后的善后工作。 #注意,方法的入參為self
def tearDown(self): print ('Test over') #8如果直接運行該文件(__name__值為__main__),則執行以下語句,常用於測試腳本是否能夠正常運行
if __name__=='__main__': #8.1執行測試用例方案一如下: #unittest.main()方法會搜索該模塊下所有以test開頭的測試用例方法,並自動執行它們。 #執行順序是命名順序:先執行test_case1,再執行test_case2
unittest.main() ''' #8.2執行測試用例方案二如下: #8.2.1先構造測試集 #8.2.1.1實例化測試套件 suite=unittest.TestSuite() #8.2.1.2將測試用例加載到測試套件中。 #執行順序是安裝加載順序:先執行test_case2,再執行test_case1 suite.addTest(Test('test_case2')) suite.addTest(Test('test_case1')) #8.2.2執行測試用例 #8.2.2.1實例化TextTestRunner類 runner=unittest.TextTestRunner() #8.2.2.2使用run()方法運行測試套件(即運行測試套件中的所有用例) runner.run(suite) '''
''' #8.3執行測試用例方案三如下: #8.3.1構造測試集(簡化了方案二中先要創建測試套件然后再依次加載測試用例) #執行順序同方案一:執行順序是命名順序:先執行test_case1,再執行test_case2 test_dir = './' discover = unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py') #8.3.2執行測試用例 #8.3.2.1實例化TextTestRunner類 runner=unittest.TextTestRunner() #8.3.2.2使用run()方法運行測試套件(即運行測試套件中的所有用例) runner.run(discover) '''
至此一個完成的過程就就這樣了,第二遍有unitest的詳解哦。