2015-10-26 53 views
1

我正在寫一個用於生成pdf文件的包,通過在網站上發佈一些數據並從數據中檢索生成的pdf。從網站生成的單元測試pdf

我的問題是與unittests。所以我試圖將已知數據集發佈到網站上,檢索pdf並將其與我知道的pdf進行比較。這工作得很好,但是在pdf中有一個時間戳,意味着第二天它不起作用。

正如我所見,我有三種選擇。

  • 一個是擺脫PDF中的時間戳。這似乎是相當困難的從我的谷歌搜索。它可能是像PDF到圖像轉換,然後消隱時間戳。然後與參考文件進行比較。

  • 選項二將創建一個模擬網站,然後我可以使用它來生成一個模擬PDF。然而,這個選項對我來說似乎有點奇怪 - 因爲我不會測試與網站的實際連接,如果我在連接中毀掉了某些東西,我不會發現這個錯誤。

  • 而三個將檢查我檢索一些似乎是pdf的數據,然後用它來完成。這樣,如果網站更改生成的PDF中的逗號,我也會避開。

所以,我想我的問題是雙重的。 1:圖像到圖像消隱方法有多難?2:從單元測試的角度來看,製作模擬網站還是測試我得到一些類似pdf的數據會是更好的方法。

回答

1
  • 選項4:找出其中的時間標記生活在PDF,和前後

例如字節比較,如果該時間戳是在偏移11和是2個字節長:

with open('reference.pdf') as rf: 
    reference_data = rf.read() 
with open('pdf_from_website.pdf') as wf: 
    website_data = wf.read() 
self.assertEqual(reference_data[:11], website_data[:11]) 
self.assertEqual(reference_data[13:], website_data[13:]) 

我不熟悉pdf文件的內部,所以這可能無法正常工作。儘管如此,您可以使用diff來查看差異的位置並嘗試。

對於第二個問題:最好是,如果您可以測試返回的pdf是有效的並且具有它應該具有的內容。

+0

我試着讀了一下pdf如何創建。這似乎幾乎是不可能的,這是一個奇怪的格式。我發現了一些關於SO的建議,這些建議將文檔轉換爲使用Ghostscript之類的可讀文檔,但它看起來像這樣的麻煩 - 並且增加了一些奇怪的依賴項目。 – anderswb

+0

我試着按照你的建議去做,並且在不同日期的兩個文件之間做了文件比較。原來,用標籤識別零件非常容易,即使它不是明文。所以我會掩飾部分的變化和單元測試工作。謝謝! – anderswb