2010-11-30 7 views
1

웹 스크레이퍼에 대한 테스트를 작성하고 싶습니다. 나는 많은 테스트 웹 페이지를 사용하고 싶지만, 엄청난 양의 중복 코드없이 내가 원하는 것을하기 위해 코 (또는 다른 단위 테스트 프레임 워크)를 얻는 방법을 정확히 모르겠습니다.많은 수의 테스트 데이터 파일로 코 실행하기

제 문제는 많은 다른 페이지를 테스트하고 코를 사용하여이를 수행하는 방법을 모르겠다는 것입니다. 대략적으로 다음과 같이하고 싶습니다.

테스트하려는 유일한 페이지가 '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

코드 샘플을 기반으로

답변

0

, 당신은 단지 클래스 공장이 필요 그것이 당신이 코 테스트를하는 방법인지 확실하지 않습니다.하지만 당신이 정상적으로 할 수있는 모든 일을 할 수있는 완전한 본격적인 수업이 될 것입니다.

모든 테스트 페이지를 하나의 디렉토리에 저장할 수 있으므로 디렉토리에있는 파일을 반복 할 수 있으므로 목록의 페이지 목록을 얻을 수 있습니다. 새로운 테스트를 만들려면 html을 지정된 디렉토리에 저장해야합니다. 그것이 당신이 찾고 있던 것에 관한 것입니까?

+0

공장에서 인수가 필요하고 코를 인수없이 실행해야하기 때문에 코가 도움이되지 않습니다. – nihlaak

+0

@ user269288 그러면 수동으로 코를 테스트 할 수 없습니까? – aaronasterling

+0

@ user26988 [docs] (http://somethingaboutorange.com/mrl/projects/nose/0.11.2/writing_tests.html)를 읽으면서 내가 테스트에 표시 한 코드를 넣고 싶습니다. 모듈을 생성하고 테스트 생성기를 사용하여 테스트 케이스를 생성하십시오. 그래서'for' 루프를'test_pages'라는 함수에 넣고'Test(). run()'줄을'yield test'로 바꾸십시오. – aaronasterling

0

코를 통한 Freshen (https://github.com/rlisagor/freshen)을 사용하는 것이 가장 좋은 방법 인 것 같습니다.

그냥 기능 파일을 작성한 다음 테스트 할 URL 당 시나리오를 추가하면됩니다.

관련 문제