我想要运行下面出现错误的测试用例.
运行commond:python manage.py test
如果您想尝试删除测试数据库'test_project_management_db',请输入'yes',或者取消'no'取消:是为别名'default'销毁旧测试数据库...
Traceback (most recent call last):
File "manage.py", line 24, in <module>
execute_from_command_line(sys.argv)
File "/home/rails/Desktop/projects/envs/project_manage_env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
utility.execute()
File "/home/rails/Desktop/projects/envs/project_manage_env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 355, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/rails/Desktop/projects/envs/project_manage_env/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 29, in run_from_argv
super(Command, self).run_from_argv(argv)
File "/home/rails/Desktop/projects/envs/project_manage_env/local/lib/python2.7/site-packages/django/core/management/base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/rails/Desktop/projects/envs/project_manage_env/local/lib/python2.7/site-packages/django/core/management/base.py", line 330, in execute
output = self.handle(*args, **options)
File "/home/rails/Desktop/projects/envs/project_manage_env/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 62, in handle
failures = test_runner.run_tests(test_labels)
File "/home/rails/Desktop/projects/envs/project_manage_env/local/lib/python2.7/site-packages/django/test/runner.py", line 601, in run_tests
old_config = self.setup_databases()
File "/home/rails/Desktop/projects/envs/project_manage_env/local/lib/python2.7/site-packages/django/test/runner.py", line 546, …Run Code Online (Sandbox Code Playgroud) 我在运行这些测试用例时为我的项目编写了一些测试用例,每次在给出消息然后销毁数据库之后创建别名'default'的测试数据库.我只关注消息,所以如何避免创建测试数据库,因为它需要很多时间.
username$ ./manage.py test
...............
Some message, I Want only this message
...............
Creating test database for alias 'default'...
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
Destroying test database for alias 'default'...
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用来自 drf-extensions 的批量更新。为了使其工作,有一个安全措施需要标题“X-BULK-OPERATION”:'true'。我可以使用 curl 或我的 angular 应用程序使应用程序正常工作,但在我的测试中,我试图rest_framework.test.APIClient用来发送 partial_update 请求,但每次我收到 400 响应时,在调试请求时,我都会收到
ipdb> response.data
{'detail': "Header 'X-BULK-OPERATION' should be provided for bulk operation."}
Run Code Online (Sandbox Code Playgroud)
这是我尝试在测试中使用的请求
response = self.client.patch(
'/api/v1/db_items/?active=True',
json.dumps(data),
content_type='application/json',
**{X-BULK-OPERATION: 'true'}
)
Run Code Online (Sandbox Code Playgroud)
有没有办法在 APIClient 请求上设置标头?
我什至尝试更改标题名称并将其设置在凭据中
self.client.credentials(HTTP_BULK_OPERATION='true')
Run Code Online (Sandbox Code Playgroud)
但我每次都会遇到同样的错误
有没有办法在django测试中检查两个对象列表是否相等.
让我说我有一些模型:
class Tag(models.Model):
slug = models.SlugField(max_length=50, unique=True)
def __unicode__(self):
return self.slug
Run Code Online (Sandbox Code Playgroud)
我运行这个简单的测试:
def test_equal_list_fail(self):
tag_list = []
for tag in ['a', 'b', 'c']:
tag_list.append(Tag.objects.create(slug=tag))
tags = Tag.objects.all()
self.assertEqual(tag_list, tags)
Run Code Online (Sandbox Code Playgroud)
这失败了:
======================================================================
FAIL: test_equal_list_fail (userAccount.tests.ProfileTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "path/to/tests.py", line 155, in test_equal_list_fail
self.assertEqual(tag_list, tags)
AssertionError: [<Tag: a>, <Tag: b>, <Tag: c>] != [<Tag: a>, <Tag: b>, <Tag: c>]
----------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
这将工作:
def test_equal_list_passes(self):
tag_list = []
for tag in ['a', 'b', 'c']:
tag_list.append(Tag.objects.create(slug=tag))
tags = Tag.objects.all() …Run Code Online (Sandbox Code Playgroud) 我在django中有以下test.py文件.你能解释一下这段代码吗?
from contacts.models import Contact
...
class ContactTests(TestCase):
"""Contact model tests."""
def test_str(self):
contact = Contact(first_name='John', last_name='Smith')
self.assertEquals(
str(contact),
'John Smith',
)
Run Code Online (Sandbox Code Playgroud) 我想用一个临时数据库启动django shell(就像做django测试时所做的那样)
有没有像这样的命令:
python manage.py testshell
Run Code Online (Sandbox Code Playgroud)
在哪里我可以创建一堆虚假模型而不污染我的数据库?
如何定义依赖于其他字段使用的字段factory-boy?
例如,我想定义一个email取决于first name和last name的User.
我尝试使用post_generation装饰器.但是,我的系统需要在创建实例之前定义电子邮件.
我是单元测试的新手,所以我不知道我做错了什么.我在Django1.8中使用python2.7
我跑的时候
python manage.py test myapp --keepdb
Run Code Online (Sandbox Code Playgroud)
我明白了
======================================================================
ERROR: test_view_content (myproject.news.tests.test_views.EntryTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/zoli/projects/project_dict/myproject/news/tests/test_views.py", line 27, in test_view_content
response = client.get(reverse('news_list', kwargs={'page': 1}))
File "/home/zoli/.virtualenvs/project_dict/local/lib/python2.7/site-packages/django/test/client.py", line 500, in get
**extra)
File "/home/zoli/.virtualenvs/project_dict/local/lib/python2.7/site-packages/django/test/client.py", line 303, in get
return self.generic('GET', path, secure=secure, **r)
File "/home/zoli/.virtualenvs/project_dict/local/lib/python2.7/site-packages/django/test/client.py", line 379, in generic
return self.request(**r)
File "/home/zoli/.virtualenvs/project_dict/local/lib/python2.7/site-packages/django/test/client.py", line 466, in request
six.reraise(*exc_info)
File "/home/zoli/.virtualenvs/project_dict/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 108, in get_response
response = middleware_method(request)
File "/home/zoli/projects/project_dict/myproject/middleware/multihostname.py", line 18, in process_request
host = request.META['HTTP_HOST'].split(':')[0] …Run Code Online (Sandbox Code Playgroud) 我想编写一个抽象模型mixin,我可以使用它来创建OneToOne - 与用户模型的关系.这是我的代码:
from django.conf import settings
from django.db import models
class Userable(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE
)
class Meta:
abstract = True
Run Code Online (Sandbox Code Playgroud)
我为这个模型编写了以下测试:
class TestUserable(TestCase):
mixin = Userable
def setUp(self):
user = User.objects.create_user(
email="testuser@test.com",
name="Test User",
password="test1234test"
)
self.user = user
self.model = ModelBase(
'__TestModel__' + self.mixin.__name__, (self.mixin,),
{'__module__': self.mixin.__module__}
)
with connection.schema_editor() as schema_editor:
schema_editor.create_model(self.model)
def test_user(self):
self.model.objects.create(user=self.user)
self.assertEqual(self.model.objects.count(), 1)
def tearDown(self):
with connection.schema_editor() as schema_editor:
schema_editor.delete_model(self.model)
Run Code Online (Sandbox Code Playgroud)
我的问题是,在它的tearDown()方法中的这个测试抛出了以下错误:
django.db.utils.OperationalError: cannot DROP TABLE "core___testmodel__userable" because it …Run Code Online (Sandbox Code Playgroud) django django-models django-testing django-tests django-migrations
如何在TestCase方法中使用 pytest 固定装置?类似问题的几个答案似乎暗示我的例子应该有效:
import pytest
from django.test import TestCase
from myapp.models import Category
pytestmark = pytest.mark.django_db
@pytest.fixture
def category():
return Category.objects.create()
class MyappTests(TestCase):
def test1(self, category):
assert isinstance(category, Category)
Run Code Online (Sandbox Code Playgroud)
但这总是会导致错误:
TypeError: test1() missing 1 required positional argument: 'category'
Run Code Online (Sandbox Code Playgroud)
我意识到我可以将这个简单的例子转换成一个函数,它会起作用。我更喜欢使用 django,TestCase因为它支持导入传统的“django fixture”文件,这是我的几个测试所需要的。将我的测试转换为函数需要重新实现这个逻辑,因为没有记录的方式使用 pytest(或 pytest-django)导入“django 固定装置”。
包版本:
Django==3.1.2
pytest==6.1.1
pytest-django==4.1.0
Run Code Online (Sandbox Code Playgroud)