0

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') 

fooapp.yaml 파일과 동일합니다. 나는 심지어 dev~foo을 시도했는데, 그게 관리 콘솔에 표시되는 것이기 때문이다. 그것도 작동하지 않았다.

결론

이것은 내가 쓴 것까지입니다. 테스트 베드 및 셀레늄 (또는 셀레늄이 방문하는 서버)을 동일한 데이터베이스와 상호 작용하는 방법에 대한 정보는 크게 감사하겠습니다.

+0

왜 데이터 스토어/서버를 통해 모든 데이터 저장소에 액세스하지 못합니까?왜 코드에서 init_datastore를 어디서 호출할까요? –

+0

https://developers.google.com/appengine/docs/python/tools/localunittesting#Python_Writing_Datastore_and_memcache_tests 링크를 통해 단위 테스트를 위해 데이터 저장소를 초기화해야합니다. 그렇게하지 않으면 단위 테스트에 작업 할 데이터 저장소가 없거나 쓸모 없게되거나 개발 데이터 저장소를 공유하여 개발 프로세스를 방해하게됩니다. 테스트가 원하는대로 많은 엔티티를 만들고 파괴 할 수있는 자체 데이터 저장소를 갖고 싶습니다. – Dave

답변

2

다음 코드는 현재 SDK와 잘 작동 다음 --storage_path=/path/to/storage 옵션

self.testbed = testbed.Testbed() 
    self.testbed.setup_env(app_id='dev~foo') 
    self.testbed.activate() 
    self.testbed.init_datastore_v3_stub(datastore_file="/path/to/storage/datastore.db", 
             use_sqlite=True) 
    self.testbed.init_memcache_stub() 

시작 dev_appserver.py을.

는 참고 :

  • setup_env(app_id=your_app_id)activate() 전에 호출해야합니다. Appoon documentation의 시퀀스가 ​​다른 예가 있는데 이는 아마도 설명서 버그 일 것입니다.
  • app_id에 "dev ~"접두어를 사용해야합니다.
관련 문제