繁体   English   中英

python中的unittest Web刮板

[英]unittest web scraper in python

我是单元测试的新手。我想为我编写的Web刮板编写单元测试。我的刮板从网站上收集数据,该网站位于本地磁盘上,在其中输入不同的日期会得出不同的结果

我在脚本中具有以下功能。

get_date [returns date mentioned on web page]
get_product_and_cost [returns product mentioned and their cost]

我不确定这些功能要测试什么。到目前为止,我已经写了这个

class SimplisticTest(unittest.TestCase):

    def setUp(self):
        data = read_file("path to file")
        self.soup = BeautifulSoup(data,'html5lib')

    def test_date(self):
        self.assertIsInstance(get_date(self.soup), str)

    def test_date_length(self):
        self.assertEqual(len(get_date(self.soup)),10)

if __name__ == '__main__':
    unittest.main()

通常,最好从已知输入中测试已知输出。 在您的情况下,您将测试返回类型,但最好测试返回的对象是否与您从输入中期望的对象相对应,这就是使用静态测试数据(在您的情况下为测试网页)的地方。 您也可以使用self.assertRaises(ExceptionType,method,args)测试异常。 如果尚未使用,请参阅https://docs.python.org/3.4/library/unittest.html

基本上,您想测试至少一个显式的情况(例如测试页),可以引发异常,例如错误的参数类型(TypeError或ValueError)或可能的None返回类型,具体取决于您的函数。 确保不要仅测试返回类型或返回量,而是显式地测试数据,这样,如果进行了更改以破坏功能,则可以找到它(而更改仍然可以返回10个元素,但是元素可能包含无效数据)。 我还建议每种方法都有一个测试方法:get_date将具有其测试方法test_get_date。

请记住,您要查找的是方法是否有效,因此请测试极端情况(大输入数据,尽可能多地支持或至少由方法定义),并尝试创建它们,以便该方法的输出与基于其定义(文档)的预期结果不同,该测试失败,并且较早发现了重大更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM