Django覆盖率不包括APITestCase测试。

3

我有一个相对较大的 Django + DRF 项目,其中包含超过 400 个测试,但我无法获得超过 40% 的覆盖率指标。

这是运行测试后的结果。

据我理解,这里可能有几个问题的来源:

(1) 我们应用的目录结构很奇怪

我们已经对我们的目录结构进行了一些调整,这是今天的样子:

core_app
 - apis
  - businessapi
   - models
   - migrations
   - serializers
   - views
   - tests
    - business_tests.py
   - admin.py
   - urls.py
   - apps.py
   - __init__.py
  - userapi
  - transactionapi
  - ...
 - settings
  - production.py
 - celery_apps
  - ...
 - ...

以下是我们的business_test.py文件的内容:

class TestBusiness(APITestCase):
    def setUp(self):
        self.businessA = BusinessFactory(...)
        self.businessB = BusinessFactory(...)

        self.primary_adminA = ProfileFactory(...)
        self.primary_adminB = ProfileFactory(...)

        # Create 10 spenders
        self.spendersA = ProfileFactory.create_batch(...)
        self.spendersB = ProfileFactory.create_batch(...)

        # Create 5 admins
        self.adminsA = ProfileFactory.create_batch(...)
        self.adminsB = ProfileFactory.create_batch(...)

        # Authorize
        self.primary_admin_client = APIClient()
        self.primary_admin_client.credentials(Accept="application/json")
        self.primary_admin_client.force_authenticate(self.primary_adminA)
        
        ...


    def test_business_permissions(self):
        expected_response = {...}
        sorted_expected = OrderedDict(sorted(expected_response.items()))

        # Try to access as primaryadmin
        _, client = authenticate_user(self.primary_adminA.id)
        response = client.get("url_to_test")
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.json(), sorted_expected)

(2) 覆盖率不会检测通过API调用触发的测试

我个人认为这种情况不太可能,因为有像这个例子 https://dev.to/lucasmiguelmac/pytest-with-django-rest-framework-from-zero-to-hero-8c4 中明显工作正常的api测试。

总之,当我尝试查看我的覆盖率运行报告时,它会失败,并且从来不统计那些一定被执行的views、models和serializers,我对此有绝对的把握!


嗨,你已经找到这个问题的解决方案了吗? - Kev
1个回答

0
你必须在你的 tests 文件夹中创建一个 __init__.py,以便 Django 将其视为模块。然后通过运行 python manage.py test 命令来执行这些测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接