1

我想为网络爬虫写一些测试。我想使用很多测试网页,但我不确定如何让鼻子(或另一个单元测试框架)在没有大量重复代码的情况下做我需要的事情。

我的问题是我想测试很多不同的页面,但我不知道如何使用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”,那就没问题了。但我有数百页要测试。我可以复制该类,并且每次都更改类的名称和路径的文件名,但这显然是荒谬的。

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

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

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

4

2 回答 2

0

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

只需编写功能文件,然后您只需为每个 URL 添加一个场景即可进行测试。

于 2013-03-07T03:05:57.927 回答
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 保存在给定目录中。那是关于你要找的东西吗?

于 2010-11-30T10:08:05.957 回答