Google App Engine, Python, Selenium, Nose 테스트 등에서 헤드리스 테스트를 로컬로 실행하려고합니다. 개별적으로 모든 작업을 수행 할 수 있지만 문제는 셀렌을 가리킬 곳을 모르는 것입니다. 시험을 볼 때.GAE 헤드리스 테스트를 로컬 데이터베이스에서 수행하는 방법은 무엇입니까?
한 가지 가능한 솔루션
저는 여기에 진전 한 하나 개의 가능한 솔루션입니다,하지만 난 나를에서 실행 내 모델과 같은 데이터베이스와 상호 작용하는 셀레늄을 사용할 수있는 솔루션으로 환영받을 것 테스트 베드 :
8080
에서 dev_appserver
을 실행 한 다음 셀렌을 가리킬 수 있지만 테스트 베드 데이터 저장소는 셀렌이 가리키는 서버와 다를 것입니다.
$ dev_appserver.py --datastore_path tests/datastore --port 8080 .
을 내 단위 테스트의 setUp
에 : :.
self.testbed.init_datastore_v3_stub(datastore_file='tests/datastore',use_sqlite=True)
(I하지 않았다 때 오류를 가지고 있기 때문에 내가 use_sqlite을하고 있어요 내가 정말 좋아 dev_appserver
을 실행하여 통일 시도했습니다 dev_appserver
도 sqlite를 사용하고 있으므로 분명히 동일한 형식을 기대해야합니다.)
불행히도 이것은 작동하지 않습니다. 데이터 저장소에 엔티티를 만들 수 있습니다 (단위 테스트 또는 실행중인 서버의 일부로). 파일을 삭제하고 엔티티가 사라지는 것을 확인하여 지속적인지 확인합니다. 그러나 엔티티를 보려면 dev_appserver
에서 제공하는 데이터 저장소 뷰어를 사용하면 유닛 테스트에서 생성 된 엔티티가 발견되지 않으며 유닛 테스트에서 실행되는 명령은 로컬 서버에 속한 엔티티를 발견하지 못합니다.
한 가지 생각은 app_id
는 단위 테스트와 서버 사이에 다른 것을, 그래서 수동으로 사용하여 app_id
을 설정
self.testbed.setup_env(app_id='foo')
곳 foo
내 app.yaml
파일과 동일합니다. 나는 심지어 dev~foo
을 시도했는데, 그게 관리 콘솔에 표시되는 것이기 때문이다. 그것도 작동하지 않았다.
결론
이것은 내가 쓴 것까지입니다. 테스트 베드 및 셀레늄 (또는 셀레늄이 방문하는 서버)을 동일한 데이터베이스와 상호 작용하는 방법에 대한 정보는 크게 감사하겠습니다.
왜 데이터 스토어/서버를 통해 모든 데이터 저장소에 액세스하지 못합니까?왜 코드에서 init_datastore를 어디서 호출할까요? –
https://developers.google.com/appengine/docs/python/tools/localunittesting#Python_Writing_Datastore_and_memcache_tests 링크를 통해 단위 테스트를 위해 데이터 저장소를 초기화해야합니다. 그렇게하지 않으면 단위 테스트에 작업 할 데이터 저장소가 없거나 쓸모 없게되거나 개발 데이터 저장소를 공유하여 개발 프로세스를 방해하게됩니다. 테스트가 원하는대로 많은 엔티티를 만들고 파괴 할 수있는 자체 데이터 저장소를 갖고 싶습니다. – Dave