2016-06-16 8 views
0

webtest 라이브러리를 사용하여 몇 가지 테스트 케이스를 작성하려고하는데 문제는 내 사이트에 사용자가 로그인해야하는 액세스 제어 권한이 있다는 것입니다. 양식 게시가 성공적으로 수행 된 것으로 보이지만 그 결과에는 쿠키가 없으며 로그인 후에 cookiejar는 비어 있습니다.양식 제출에서 쿠키 가져 오기 및 웹 테스트와 함께 사용하기

테스트 설정 :

class TestMyViewSuccessCondition(unittest.TestCase): 

    def setUp(self): 
     self.config = testing.setUp() 

     from myapp import main 

     settings = {'sqlalchemy.url': postgresqlURL} 
     app = main({}, **settings) 
     from webtest import TestApp 

     self.testapp = TestApp(app, cookiejar=CookieJar()) 

테스트 : 양식 제출 후

page = self.testapp.get('/login', status=200) 

    self.assertIn('Please login', page) 

    form = page.forms['loginForm'] 
    form['username'] = 'user' 
    form['password'] = 'userpw' 

    result = form.submit(status=200) 

    # self.testapp.cookies is empty dictionary at this point 
    # it fails here, login page is shown again 
    page = self.testapp.get('/home', status=200) 

이 결과는 200 OK 및 로그인 페이지의 HTML 콘텐츠를 반환하지만 리디렉션은 발생하지 않습니다이다 문제? 또는 의도 한대로 작동합니까? 모든 액세스 제어 이전에 다른 양식 제출은 정상적으로 작동했습니다. 쿠키는 사용자가 링크를 클릭하거나 페이지를 다시로드 할 때마다 변경됩니다. 세션 쿠키를 사용하고 있습니다. 쿠키에 안전하지 않은 플래그를 설정하려고했습니다.

과 내 로그인보기의 마지막 반환 :

if 'form.submitted' in request.POST: 
# do stuff 
    return HTTPFound(location=request.route_url('home')) 

나는 일반 유닛 테스트를 사용하는 것입니다하지만보기 리디렉션 할 할 때 유닛 테스트 모듈은 너트를 푼다 때문에, 누군가가 WebTest에 라이브러리를 제안했다.

답변

0

form.submit()은 실제로 사용자가 제출 버튼을 클릭하는 기본 사용 사례를 모방하지 않았습니다. 정상적인 경우 브라우저는 사용자 이름, 비밀번호 및 을 request.POST에 추가합니다. 그러나 form.submit()은 사용자 이름과 암호 만 추가하고 양식에 정의 된 암호 만 추가하므로 요청과 함께 자체 값을 정의 할 수 없습니다. (적어도 나는 방법을 발견하지 못했다)

로그인 화면에서 문제가 해결되었다. if 'form.submitted' in request.POST: ->if 'username' in request.POST and 'password' in request.POST:

위와 같이 쿠키가 정상적으로 작동하며 로그인이 내 테스트를 지원하지 못했습니다.