处理大量测试数据文件时的运行问题
我想为一个网页抓取工具写一些测试。我需要用到很多测试网页,但我不太确定怎么用nose(或者其他单元测试框架)来实现我的需求,而不写一大堆重复的代码。
我的问题是,我想测试很多不同的网页,但不知道怎么用nose来做到这一点。大概我想做的就是这样:
class TestPage(object):
def setup(self):
with open('test_data/page.html', 'r') as f:
html = f.read()
self.scraper = Scraper(html)
如果我只想测试一个页面,比如'page.html',那这样做是可以的。但是我有成百上千个页面需要测试。如果我每次都复制这个类,然后改一下类名和文件路径,那显然太荒谬了。
我想过在设置部分写代码,为每个页面创建单独的抓取对象,并把它们存储在测试对象的一个列表里。然后我可以让测试方法对每个抓取对象进行操作。但我觉得这样会遇到保持每个测试独立的问题,还会在nose中得到不同的消息。
我也尝试过从一个基础测试类继承,并把路径传给init,但这会给nose带来问题。
如果有人能给我一些建议,告诉我怎么用nose解决这个问题,或者推荐其他的方法,或者一些有用的阅读材料,我会非常感激。
2 个回答
0
使用 Freshen(https://github.com/rlisagor/freshen)配合 nose 似乎是最好的解决办法。
你只需要写一些功能文件,然后每个需要测试的网址只需添加一个场景就可以了。
0
根据你的代码示例,你只需要一个类工厂:
def make_test(page)
class TestPage(object):
def setup(self):
with open(page, 'r') as f:
html = f.read()
self.scraper = Scraper(html)
return TestPage
现在你可以遍历一个页面列表,为每个页面做一个测试:
for page in list_of_pages:
Test = make_test(page)
Test().run()
我不太确定这是否是运行nose测试的方式,但这会是一个完整的类,所以你可以像平常一样使用它。
你可以把所有的测试页面存放在一个文件夹里,这样你就可以循环遍历这个文件夹里的文件,获取你的页面列表。要创建一个新的测试,只需要把html文件保存在指定的文件夹里。这样说是不是符合你的想法?