django 单元测试

通过sonarqube 检查代码质量的时候发现覆盖率一直为0,然后分析只有通过单元测试才能将覆盖率体现出来。

1、示例代码,使用了app目录下面的tests.py文件

from django.test import TestCase, Client
from .fetch_data.ops_data import UriRequestTime
from .models import OpsUrlRequestTime
from datetime import datetime
from user.models import MyUser


class UriRequestTimeTestCase(TestCase):
    def setUp(self) -> None:
        self.c = Client()
        MyUser.objects.create_user(
            'aabbcc@qq.com',
            'qwertyu',
            '10086',
            'liudehua'
        )

    def test_ImportOpsUriRequestTime(self) -> None:
        """
        测试导入ops的url统计数据
        :return:
        """
        UriRequestTime().create_uri_data()

        last_data = list(OpsUrlRequestTime.objects.all().values('createDate')[:1])
        import_res = (datetime.now().date() - last_data[0].get('createDate')).days
        self.assertEqual(import_res, 0)

    def test_OpsUriRequestTimeViewSet(self) -> None:
        """
        测试导入ops的url统计数据的视图类
        :return:
        """
        UriRequestTime().create_uri_data()

        self.c.login(username='aabbcc@qq.com', password='qwertyu')
        response = self.c.get('/statement/OpsRequest/ShowOpsUriRequestTime/', ACCEPT='application/json')
        assert response.json()['data']['count'] > 0, "导入数据失败"

2、验证单元测试是否通过,如果不想每次执行都删掉测试数据库和询问要不要删掉已有数据库,请选择第一行的命令

python manage.py test --keepdb  --noinput statement
或者
python manage.py test statement

3、测试通过后,生成.coverage文件,然后生成xml文件

coverage run --source='.' manage.py test statement
coverage xml -o coverage.xml

4、推送到sonarqube

D:\sonar-scanner-cli\sonar-scanner-cli-4.8.0.2856-windows\sonar-scanner-4.8.0.2856-windows\bin\sonar-scanner.bat -D"sonar.projectKey=xxx" -D"sonar.sources=."
  -D"sonar.host.url=http://192.168.60.208:9000" -D"sonar.login=sqp_xxxx6df1f47f3a13f28ce803bea6"

 

此时覆盖率就不是0了。

 

posted @ 2023-04-21 18:37  腐汝  阅读(48)  评论(0编辑  收藏  举报