如何在Django中使用pytest?

大男孩1337

当我将pytest与Django一起使用时,不会创建test_ <db_name>。

最小可复制示例:

在Django专案中:

./manage.py startapp testing_pytest

在models.py中

class Snippet(models.Model):

    created = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=100, blank=True, default='')
    code = models.TextField()
    linenos = models.BooleanField(default=False)
    external_id = models.CharField(max_length=100, default='0')

    class Meta:
        ordering = ['created']

然后在Postgres中创建一个名为loc_db的数据库,

./manage.py makemigrations
./manage.py migrate 

在serializers.py中

class BulkUpdateOrCreateListSerializer(serializers.ListSerializer):
    def create(self, validated_data):
        result = [self.child.create(attrs) for attrs in validated_data]
        try:
            res = self.child.Meta.model.objects.bulk_create(result)
        except IntegrityError as e:
            raise ValidationError(e)
        return res

class SnippetSerializer(serializers.ModelSerializer):
    class Meta:
        model = Snippet
        fields = ['id','title', 'code', 'linenos']
        read_only_fields = ['id']
        list_serializer_class = BulkUpdateOrCreateListSerializer

    def create(self, validated_data):
        instance = Snippet(**validated_data)
        if isinstance(self._kwargs["data"], dict):
            instance.save()
        return instance

在views.py中

class SnippetGetView(generics.ListAPIView):
    serializer_class = SnippetSerializer
    queryset = Snippet.objects.all()

class SnippetUpdateView(generics.ListCreateAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer
    def get_serializer(self, *args, **kwargs):
        if isinstance(kwargs.get("data", {}), list):
            kwargs["many"] = True
        return super(SnippetUpdateView, self).get_serializer(*args, **kwargs)

在tests.py中

@pytest.fixture(scope='session',autouse=True)
def my_faker():
    return Faker()

@pytest.fixture(scope='session',autouse=True)
def factory():
    return APIRequestFactory()

@pytest.fixture(scope='session',autouse=True)
def snippets():
    snippets = []
    for i in range(TEST_SIZE):
        snippets.append({'title':'snippet'+str(i),'code':'print(True)','linenos':False,'external_id':'1'})
    return snippets

@pytest.mark.django_db
def test_update_snippet(factory,snippets):
    request = factory.post('/add-snippets/',snippets)
    view = SnippetUpdateView.as_view()
    response = view(request)
    response.render()
    assert status.is_success(response.status_code)

并在<project_name> /settings.py中

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'loc_db',
        'USER': '<some name>',
        'PASSWORD': '<some pass>',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

并在pytest.ini中

[pytest]
DJANGO_SETTINGS_MODULE = <project_dir>.settings
python_files = tests.py test_*.py *_tests.py

我希望在执行这些测试时运行pytest可以创建test_loc_db,然后保存该代码片段数组以进行批量创建。但是,没有创建test_db。相反,它只是通过了该测试。但我不确定为什么。这些摘要保存在哪里?

AzyCrw4282

我认为没有pytestdb事务输出到文件的功能。我还检查了文档,但似乎该功能不存在。

通常(和您的行为一样)仅输出测试是否通过。最后一行看起来像这样

============================== <N Tests> passed in 0.27s ==============================

测试控制台上还会报告失败的测试。以下是对任何类型的数据库保存的最接近的提及:

此数据可用于标有pytest.mark.django_db()标记的测试,或使用db固定装置的测试。测试数据将保存在数据库中,并且不会重置。

您可以从这里看到您也可以调查一下Django's test framework是否支持该功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

  1. 1

    来自Microsoft Office加载项taskpane.js的MySQL驱动程序模块的空引用

  2. 2

    使用AWS Cognito和React的仅限Facebook / Google的登录名(无用户名/密码)

  3. 3

    创建Windows Phone 8应用并将其连接到数据库的最佳方法(最好是SQL Server)

  4. 4

    为什么Java中的System.out.println()打印到控制台?

  5. 5

    卷曲函数无法解析来自bash中变量的代理

  6. 6

    是什么在Android的consumer-rules.pro和proguard-rules.pro之间的区别?

  7. 7

    设置与Apache POI Excel表散点图标记图标的颜色

  8. 8

    将Qt Pyside2与asyncio await语法一起使用?

  9. 9

    崇高的文字+蟒蛇的蟒蛇

  10. 10

    任务':app:minifyReleaseWithR8'.java.lang.NullPointerException的执行失败(无错误消息)

  11. 11

    OpenJDK的和AdoptOpenJDK的区别

  12. 12

    大型数据集缓存到Spark内存中时,“超出了GC开销限制”(通过sparklyr和RStudio)

  13. 13

    “执行测试CMAKE_HAVE_LIBC_PTHREAD”失败实际上是什么意思?

  14. 14

    使用Core 2.2中的Identity,如何在关闭浏览器15分钟后保持会话活动?

  15. 15

    React中的ForwardRefExoticComponent和ForwardRefRenderFunction有什么区别?

  16. 16

    猫鼬查找结果,然后将字段替换为findOne

  17. 17

    如何降级Google Colab的Torch版本

  18. 18

    Keras提前停止回调错误,val_loss指标不可用

  19. 19

    如何避免VSCode中的“导入路径不能以.ts扩展名结尾”错误?

  20. 20

    Nuxt.JS:如何在页面中获取路由URL参数

  21. 21

    是否有为什么会AccessibilityManager.sInstance导致内存泄漏的一个原因?

热门标签

归档