试图确定正确的 Python/Django 单元测试解决方案 - unittest vs pytest vs "manage.py test" vs...?

时间:2021-03-11 05:08:09

标签: python django unit-testing django-rest-framework

我是 Python 和 Django 的新手,也为其中一个或两个编写单元测试,我正在尝试浏览测试解决方案以及解决一些运行时错误(即“应用程序尚未加载”)使用“python -m unittest tests/tests.py”时)。我已经阅读了几个小时的论坛帖子和教程,但我最终得到的问题似乎多于答案。

作为敏捷方法培训的一部分,我正在尝试做的是在 Django 模型上实现基本的获取/显示/显示功能,并编写测试以表明序列化程序正在根据数据库中的记录生成正确的输出(或由工厂和伪造者创建,这是我试图解决的另一层复杂性)。我被建议使用 AssertEquals 语句来根据给定数据库行中包含的内容验证 JSON 序列化程序输出,后者由伪造者生成,通过工厂插入并存储在变量中以供 AssertEquals 在比较值时使用。我对逻辑以及我将如何编写它有一个想法,但我目前正被错误绊倒,同时试图找出最好的测试框架是什么,哪些命令、导入和模块是它所必需的。

到目前为止我尝试过的是:

  • 使用 pip 在我的 venv 中安装大量模块。这包括请求、faker、factory_boy、unittest 和 pytest。

  • 使用“python manage.py test”、“python -m unittest tests/tests.py”、“pytest tests/tests.py”运行测试

    • 似乎“python manage.py test”产生了最好的结果。 Unittest 和 pytest 都返回 django.core.exceptions.AppRegistryNotReady:应用程序尚未加载。
  • 创建 RequestsClient() 对象来测试 API 页面。就我尝试过的而言,这是成功的,尽管只包括验证 HTTP 200 OK 状态和 application/json 的内容类型。

这是我的 tests/tests.py 文件(一些细节已更改以匿名化我的公司)。该程序的目的是从 GitHub 收集和分析用户统计信息,因此引用拉取请求(Null 是因为尚未构建 PR 表/模型 - 一旦准备就绪,它将成为外键)。< /p>

import pytest
import unittest
from django.test import TestCase, Client
from rest_framework.test import RequestsClient
from db.models import Associate

req_client = RequestsClient()
req_response = req_client.get('http://127.0.0.1/api/Associates/')
assert req_response.status_code == 200
assert req_response.headers['content-type'] == "application/json"


class AssocTest(TestCase):
    
    def setUp(self):
        Associate.object.create(assoc_id='JD123456', first_name='John', last_name='Doe', email='john.doe@company.com', comments=Null, comment_count=5, pull_requests=Null, pr_count=4, reviews=3)
        pass

    def tearDown(self):
        Associate.object.dispose()
        pass

我知道这可能是一个生死攸关的问题,但我感谢您对新手的帮助和耐心。

0 个答案:

没有答案
相关问题