ここでは、セレニウムを使った私のエンドツーエンドテスト(私はセレンのジャンゴテストでは全く新しい)のスニペットです。djangoセレンテスト中の永続ログイン
from django.contrib.auth.models import User
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from selenium.webdriver.chrome.webdriver import WebDriver
class MyTest(StaticLiveServerTestCase):
@classmethod
def setUpClass(cls):
super(DashboardTest, cls).setUpClass()
cls.selenium = WebDriver()
cls.user = User.objects.create_superuser(username=...,
password=...,
email=...)
time.sleep(1)
cls._login()
@classmethod
def _login(cls):
cls.selenium.get(
'%s%s' % (cls.live_server_url, '/admin/login/?next=/'))
...
def test_login(self):
self.selenium.implicitly_wait(10)
self.assertIn(self.username,
self.selenium.find_element_by_class_name("fixtop").text)
def test_go_to_dashboard(self):
query_json, saved_entry = self._create_entry()
self.selenium.get(
'%s%s' % (
self.live_server_url, '/dashboard/%d/' % saved_entry.id))
# assert on displayed values
def self._create_entry():
# create an entry using form and returns it
def test_create(self):
self.maxDiff = None
query_json, saved_entry = self._create_entry()
... assert on displayed values
私は、各テストの間にログインが持続的ではないことに気付きました。だから私はsetUp
の_login
を使うことができますが、私のテストは遅くなります。
したがって、テスト間に持続的なログインを維持するにはどうすればよいですか?これらのテストをテストするためのベストプラクティス(djnagoセレンテスト)は何ですか?
ありがとう:)私は大きなアプリケーションを使用する場合、主なアプリケーションの機能とテストを分割します。それは最初の失敗の後に終了し、私は残りのシナリオをテストすることができません。 –
これはセレンのテストが脆弱である理由ですが、私はまだそれを行う正しい方法は、多くの反復アクションアサーションアクションアサーションを持つ単一の関数を書くことだと言っています。ターゲットとされた機能をすばやくフィードバックしたい場合は、セレンなしで単体テストを作成してください。 私がよく使っている例は次のとおりです。https://github.com/kevinharvey/jmad/blob/test-driven-django-development/jmad/jmad/tests.py#L47 – kevinharvey