1. 程式人生 > >生成html測試報告中關於檔名的坑

生成html測試報告中關於檔名的坑

    最近學習python+selenium實戰,在生成html測試報告檔案時,由於程式碼寫的與書尚不完全一致,導致出現執行失敗的問題,在此記錄:

    生成html測試報告的過程:

    (1)line94:

import StringIO--->import io

    (2)line539:

self.outputBuffer=StringIO.StringIO()--->self.outputBuffer=io.StringIO()

    (3)line631:

      print >> sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime) --->

      print (sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))

    (4)line642:

      if not rmap.has_key(cls): --->if not cls in rmap:

    (5)line766:

    uo =o.decode('latin-1') ---> uo=e

    (6)line772:

     ue = e.encode('latin-1') --->ue = e

3.案例:百度搜索的測試用例來生成html測試報告

step1:建立htmlRepoert_baidu.py,程式碼如下

step2:匯入HTMLTestRunner,unittest等

#匯入HTMLTestRunner
from selenium import webdriver
import unittest
from HTMLTestRunner import HTMLTestRunner
import time
from _io import open

#測試點選百度,生成html報告
#定義類繼承unittest.TestCase
class Baidu(unittest.TestCase):
    '''百度搜索測試生成html報告'''
    #定義setup()設定驅動,定義變數
    def setUp(self):
        #設定驅動
        self.driver =webdriver.Firefox(executable_path="D:\\Program Files (x86)\\Mozilla Firefox32\\firefox.exe")  
        #設定隱式等待時間
        self.driver.implicitly_wait(10)
        #設定要訪問的url
        self.base_url ="http://www.baidu.com"
    
    #定義要測試方法
    def test_baidu_search(self):
        '''測試搜尋HTMLTestRunner'''
        #獲取驅動
        driver = self.driver
        #訪問url 
        driver.get(self.base_url)
        #搜尋等操作
        driver.find_element_by_id("kw").send_keys("HTMLTestRunner")   
        driver.find_element_by_id("su").click()
    
    #釋放資源
    def tearDown(self):
        self.driver.quit()

#利用unittest執行單元測試
if __name__ == "__main__":
    #建立測試集 
    testSuite = unittest.TestSuite()
    #新增測試案例
    testSuite.addTest(Baidu("test_baidu_search"))
    #定義測試報告存放的位置和名稱
   
 #給檔名新增時間,防止被覆蓋更新,需要先匯入time模組的包
    now = time.strftime("%Y_%m_%d_%H:%M:%S")
    fileName = "./"+ now + "result.html"
    htmlFilePos = open(fileName,"wb")
    #定義具體的測試報告
    runner = HTMLTestRunner(stream=htmlFilePos,title="百度搜索的測試報告",description="用例執行情況:")
    
    #執行測試用例
    runner.run(testSuite)
    #關閉報告檔案
    htmlFilePos.close()

4.執行之後報錯資訊:

    Traceback (most recent call last):
  File "D:\study-test\java_test_mar\pySeleniumBook\src\chap08\CreateHtmlReport\htmlReport_Baidu.py", line 53, in <module>
    htmlFilePos = open(fileName,"wb")

OSError: [Errno 22] Invalid argument: './2018_06_08_09:29:43result.html'

    由於是初學,python語言語法不清晰,認真檢查了與書上的寫法對比+度娘沒查出來那裡寫錯了,跑去問同學她也納悶了會,好像沒錯的呀,過了會跟我說你是不是檔名拼錯了,我說不造QAQ,然後她跟我發了張度孃的圖:


5.深坑所在:windows的檔名不能包含冒號!多麼痛的領悟。

 #給檔名新增時間,防止被覆蓋更新,需要先匯入time模組的包
    now = time.strftime("%Y_%m_%d_%H:%M:%S")

6.然後我度娘了一下window檔名規範,手敲一遍:

(1)格式:主檔名.副檔名

(2)檔名最多達255字元

(3)可用多間隔符的副檔名,如:a.b.c作為檔名

(4)檔名可包含空格,但是不能包含?:*"/;<>

(5)不區分大小寫和中英文