웹 스크레이퍼에 대한 테스트를 작성하고 싶습니다. 나는 많은 테스트 웹 페이지를 사용하고 싶지만, 엄청난 양의 중복 코드없이 내가 원하는 것을하기 위해 코 (또는 다른 단위 테스트 프레임 워크)를 얻는 방법을 정확히 모르겠습니다.많은 수의 테스트 데이터 파일로 코 실행하기
제 문제는 많은 다른 페이지를 테스트하고 코를 사용하여이를 수행하는 방법을 모르겠다는 것입니다. 대략적으로 다음과 같이하고 싶습니다.
테스트하려는 유일한 페이지가 'page.html'인 경우 문제가되지 않습니다. 하지만 테스트 할 수있는 페이지가 수백 개 있습니다. 나는 클래스를 복제 할 수 있고 매번 클래스의 이름과 경로의 파일 이름을 모두 바꿀 수는 있지만 분명히 우스꽝 스럽다.
각 페이지마다 별도의 Scraper 개체를 만들고 테스트 개체의 목록에 저장하는 코드를 설치에 넣을 것을 고려했습니다. 그런 다음 각 스크래퍼 객체에서 테스트 메소드를 실행할 수 있습니다. 하지만 각 테스트를 격리하고 코로부터 별도의 메시지를받는 데 문제가 있다고 생각합니다.
또한 기본 테스트 클래스를 서브 클래스 화하고 으로 경로를 전달하려고 시도했지만 이것이 코 문제를 만듭니다.
코를 사용하여 해결하는 방법에 대한 조언이나 받아 들일만한 다른 접근법 또는 유용 할만한 모든 읽기에 대해 감사드립니다. 이제
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()
I
코드 샘플을 기반으로
공장에서 인수가 필요하고 코를 인수없이 실행해야하기 때문에 코가 도움이되지 않습니다. – nihlaak
@ user269288 그러면 수동으로 코를 테스트 할 수 없습니까? – aaronasterling
@ user26988 [docs] (http://somethingaboutorange.com/mrl/projects/nose/0.11.2/writing_tests.html)를 읽으면서 내가 테스트에 표시 한 코드를 넣고 싶습니다. 모듈을 생성하고 테스트 생성기를 사용하여 테스트 케이스를 생성하십시오. 그래서'for' 루프를'test_pages'라는 함수에 넣고'Test(). run()'줄을'yield test'로 바꾸십시오. – aaronasterling