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了。