2015-10-26 54 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