1 # -*- coding: utf-8 -*- 2 import unittest 3 from selenium import webdriver 4 import HTMLTestRunner 5 from openpyxl import load_workbook 6 class mylogintest(unittest.TestCase):#定義一個mylogintest類繼承unittest.TestCase類 7 '''打開百度測試''' 8 def setUp(self):#用例執行前的初始化工作 9 print("開始測試") 10 self.driver = webdriver.Firefox() 11 12 def tearDown(self):#用例執行后的初始化工作 13 print("結束測試") 14 self.driver.quit() 15 16 def testopenBD(self): 17 '''打開百度''' 18 book = load_workbook("mylogintest.xlsx") # 默認可讀寫,若有需要可以指定write_only和read_only為True 19 b = book.active 20 datadict = {} #創建一個字典變量 21 maxC = b.max_column#獲取最大列 22 maxR = b.max_row#獲取最大行 23 for i in range(1, maxC + 1):#range默認從0開始,到后面參數的-1結束,而openpyxl都是從第一行第一列開始的,所以參數為1,maxC+1;意思就是遍歷第一列到最后一列, 24 datadict.setdefault(b.cell(1, i).value)#設置字典datadict的鍵值,從第一行第一列,到第一行最后一列,也就是第一行的標題設置為鍵值,i表示列 25 # print(datadict) 26 for i in range(2, maxR + 1):#除去第一行標題,從第二行遍歷到最后一行 27 for j in range(1, maxC + 1):#從第一列遍歷到最后一列 28 datadict[b.cell(1, j).value] = b.cell(i, j).value#在字典里設置鍵對應的值,j表示列 29 # print(datadict) 30 # if datadict["url"] & datadict["校驗"] != None: 31 self.driver.get(datadict["地址"])#從對應鍵里取出值地址對應的URL值,這里的鍵就是表格的第一行標題,所以EXCEL的標題要按照規定來寫 32 if self.driver.title == datadict["校驗"]:#如果打開地址后,title值跟校驗對應的值一致 33 b.cell(i, maxC, '通過')#就將測試通過結果寫入當前行的最后一列的單元格中, 34 else: 35 b.cell(i, maxC, '不通過')#就將測試不通過結果寫入當前行的最后一列的單元格中,所以建立表格數據的時候,默認將結果寫到最后一列即可 36 book.save("mylogintest.xlsx")#最后記得關閉 37 38 if __name__=='__main__': 39 filename = './'+'mylogintestresult.html'#定義文件名與路徑 40 fp = open(filename,'wb')#生成文件 41 ut = unittest.TestSuite() # 創建測試套件;TestSuite不加括號的結果:addTest() missing 1 required positional argument: 'test' 42 ut.addTest(mylogintest('testopenBD'))#將要執行的用例加入測試套件中 43 runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title='分別打開百度51網站',description='百度51') #如果引用的是from HTMLTestRunner import HTMLTestRunner,這里就不需要寫兩個HTMLTestRunner,一個就夠了 44 runner.run(ut)#運行測試套件 45 fp.close()
表格內容為:黃色標記為腳本自動寫入的值
測試報告:
其實針對一個用例多條數據的情況,用測試報告沒太大用,而且我暫時也沒有找到一個測試用例,多條測試數據能夠生成一個多條結果的報告,這里只有一條,所以直接用表格寫入寫出的方法也還比較方便,
生成的測試報告可以刪除掉不用