Насморк с большим количеством файлов тестовых данных - PullRequest
1 голос
/ 30 ноября 2010

Я хочу написать несколько тестов для веб-скребка. Я хочу использовать множество тестовых веб-страниц, но не знаю точно, как заставить нос (или другую платформу модульного тестирования) делать то, что мне нужно, без огромного количества дублирующегося кода.

Моя проблема в том, что я хочу протестировать много разных страниц, и я не уверен, как это сделать, используя нос. Это примерно то, что я хочу сделать:

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 , но это создает проблемы для носа.

Буду признателен за любые советы о том, как решить эту проблему, используя нос, другой подход или любое чтение, которое может быть полезным.

Ответы [ 2 ]

0 голосов
/ 07 марта 2013

Использование Freshen (https://github.com/rlisagor/freshen) через нос кажется лучшим ответом.

Просто напишите файлы объектов, тогда вам просто нужно добавить сценарий для каждого URL для тестирования.

0 голосов
/ 30 ноября 2010

на основе вашего примера кода, вам просто нужна фабрика классов:

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-файл в указанном каталоге.Это то, что вы искали?

...