我正在为一个项目编写测试用例,并想测试我的登录功能。我正在使用LiveServerTestCase
类,selenium
并在Django网站[link](https://docs.djangoproject.com/en/1.8/topics/testing/tools/)中遵循此文档。如果您看到以下代码:
from django.test import LiveServerTestCase
from selenium.webdriver.firefox.webdriver import WebDriver
class MySeleniumTests(LiveServerTestCase):
fixtures = ['user-data.json']
@classmethod
def setUpClass(cls):
super(MySeleniumTests, cls).setUpClass()
cls.selenium = WebDriver()
@classmethod
def tearDownClass(cls):
cls.selenium.quit()
super(MySeleniumTests, cls).tearDownClass()
def test_login(self):
self.selenium.get('%s%s' % (self.live_server_url, '/login/'))
username_input = self.selenium.find_element_by_name("username")
username_input.send_keys('rakesh')
password_input = self.selenium.find_element_by_name("password")
password_input.send_keys('ranjan')
self.selenium.find_element_by_xpath('//input[@value="Log in"]').click()
我的用户名是rakesh
,密码是ranjan
,我想知道为什么下面的代码在这里失败?我正确地发送了参数,但仍然不接受。
由于在每个测试用例上都会创建一个新的数据库,是否有办法在上述代码中创建新的用户和密码?我对编写测试用例特别陌生,将不胜感激。
Error: loaddata.py:225: UserWarning: No fixture named 'user-data' found.
warnings.warn("No fixture named '%s' found." % fixture_name)
我也无法理解你的意思 fixtures = ['user-data.json']
我强烈建议您使用工厂而不是JSON固定装置。它更具可读性且易于维护。
在您发送的示例中,我想知道密码是否已正确加密。
例子:
factories.py
:
from django.contrib.auth.hashers import make_password
from factory import DjangoModelFactory, Sequence
class UserFactory(DjangoModelFactory):
class Meta:
model = User
# this is just an example; you need the required fields on your actual User Model
email = Sequence(lambda n: 'john-doe-{0}@a.com'.format(n))
username = Sequence(lambda n: 'john_doe_{0}'.format(n))
password = make_password("password")
在您的测试中:
def test_login(self):
rakesh = UserFactory.create(
username="rakesh",
password=make_password("ranjan")
)
self.selenium.get('%s%s' % (self.live_server_url, '/login/'))
...
显然,如果仍然无法通过以下操作:
body = self.selenium.find_element_by_tag_name('body')
self.assertIn(u'Welcome rakesh, you have successfully logged in.', body.text)
确保打印body
以找出错误所在。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句