使用大量测试数据文件运行鼻子

时间:2010-11-30 09:57:56

标签: python unit-testing 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',那就没问题了。但我有数百页要测试。我可以复制该类,每次都更改类的名称和路径的文件名,但这显然是荒谬的。

我想过将代码放入setup中为每个页面创建单独的Scraper对象,并将它们存储在测试对象的列表中。然后我可以让测试方法对每个Scraper对象进行操作。但我认为我遇到的问题是保持每个测试被隔离并从鼻子中获取单独的消息。

我还尝试将基础测试类子类化并将路径传递给 init ,但这会给鼻子带来问题。

我很感激有关如何使用鼻子,另一种方法或任何可能有用的阅读来解决这个问题的建议。

2 个答案:

答案 0 :(得分: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() 

我不确定这是不是你如何进行鼻子测试,但这将是一个完整的课程,所以你可以做任何你通常做的事情。

您可以将所有测试页面存储在一个目录中,这样您就可以遍历目录中的文件并获取您的页面列表。要创建新测试,您只需将html保存在给定目录中即可。这是关于你在寻找什么?

答案 1 :(得分:0)

通过鼻子使用梳洗(https://github.com/rlisagor/freshen)似乎是最好的答案。

只需编写功能文件,然后您只需添加每个URL的方案即可进行测试。