前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >测试开发进阶(三十五)

测试开发进阶(三十五)

作者头像
zx钟
发布2019-11-14 14:51:08
2690
发布2019-11-14 14:51:08
举报
文章被收录于专栏:测试游记

导入测试数据

在Pycharm中连接数据库

执行sql

测试数据在:https://github.com/zx490336534/ApiTest/tree/master/test按照顺序执行

选择执行的目标

处理时间格式

从数据库中可以看出,使用 models.DateTimeField生成的时间数据格式为 2019-11-0606:21:19.355242

我们需要返回一个 `2019-11-06 06:21:19的内容

所以我们需要重写 list

代码语言:javascript
复制
def list(self, request, *args, **kwargs):
    queryset = self.filter_queryset(self.get_queryset())

    page = self.paginate_queryset(queryset)
    if page is not None:
        serializer = self.get_serializer(page, many=True)
        datas = serializer.data
        datas = get_count_by_project(datas)
        return self.get_paginated_response(datas)

    serializer = self.get_serializer(queryset, many=True)
    datas = serializer.data
    datas = get_count_by_project(datas)
    return Response(datas)

将对数据的处理写在 get_count_by_project函数中

通过调试可以看到获取到的datas对象为一个包含字典的列表

很容易的想到使用 正则来进行提取,并修改字典内容

代码语言:javascript
复制
mtch = re.search(r'(.*)T(.*)\..*?', item['create_time'])
item['create_time'] = mtch.group(1) + ' ' + mtch.group(2)

获取项目数据

获取接口总数

代码语言:javascript
复制
project_id = item['id']
interfaces_testcases_objs = Interfaces.objects.values('id').annotate(testcases=Count('testcases')). \
    filter(project_id=project_id, is_delete=False)
interfaces_count = interfaces_testcases_objs.count()

interfaces_testcases_objs相当于调用了以下SQL语句

代码语言:javascript
复制
SELECT `tb_interfaces`.`id`, COUNT(`tb_testcases`.`id`) AS `testcases` FROM `tb_interfaces` LEFT OUTER JOIN `tb_testcases` ON (`tb_interfaces`.`id` = `tb_testcases`.`interface_id`) WHERE (`tb_interfaces`.`is_delete` = False AND `tb_interfaces`.`project_id` = 1) GROUP BY `tb_interfaces`.`id` ORDER BY NULL

获取用例总数

代码语言:javascript
复制
testcases_count = 0
for one_dict in interfaces_testcases_objs:
    testcases_count += one_dict['testcases']

获取配置数量

代码语言:javascript
复制
interfaces_configures_objs = Interfaces.objects.values('id').annotate(configures=Count('configures')). \
    filter(project_id=project_id, is_delete=False)
configures_count = 0
for one_dict in interfaces_configures_objs:
    configures_count += one_dict['configures']

相当于执行了以下SQL

代码语言:javascript
复制
SELECT `tb_interfaces`.`id`, COUNT(`tb_configures`.`id`) AS `configures` FROM `tb_interfaces` LEFT OUTER JOIN `tb_configures` ON (`tb_interfaces`.`id` = `tb_configures`.`interface_id`) WHERE (`tb_interfaces`.`is_delete` = False AND `tb_interfaces`.`project_id` = 1) GROUP BY `tb_interfaces`.`id` ORDER BY NULL

获取测试套件总数

代码语言:javascript
复制
testsuits_count = Testsuits.objects.filter(project_id=project_id, is_delete=False).count()

整个函数

代码语言:javascript
复制
import re
from django.db.models import Count
from interfaces.models import Interfaces
from testsuits.models import Testsuits


def get_count_by_project(datas):
    datas_list = []
    for item in datas:
        mtch = re.search(r'(.*)T(.*)\..*?', item['create_time'])
        item['create_time'] = mtch.group(1) + ' ' + mtch.group(2)

        project_id = item['id']
        interfaces_testcases_objs = Interfaces.objects.values('id').annotate(testcases=Count('testcases')). \
            filter(project_id=project_id, is_delete=False)
        interfaces_count = interfaces_testcases_objs.count()
        testcases_count = 0
        for one_dict in interfaces_testcases_objs:
            testcases_count += one_dict['testcases']

        interfaces_configures_objs = Interfaces.objects.values('id').annotate(configures=Count('configures')). \
            filter(project_id=project_id, is_delete=False)
        configures_count = 0
        for one_dict in interfaces_configures_objs:
            configures_count += one_dict['configures']

        testsuits_count = Testsuits.objects.filter(project_id=project_id, is_delete=False).count()

        item['interfaces'] = interfaces_count
        item['testsuits'] = testsuits_count
        item['testcases'] = testcases_count
        item['configures'] = configures_count

        datas_list.append(item)
    return datas_list

结果

返回分页内容

配置 setting.py

代码语言:javascript
复制
REST_FRAMEWORK = {
    'PAGE_SIZE': 10,
    'DEFAULT_PAGINATION_CLASS': 'utils.pagination.PageNumberPaginationManual',
    }

编写自定义分页操作

utils.pagination.PageNumberPaginationManual

代码语言:javascript
复制
from django.conf import settings
from rest_framework import pagination


class PageNumberPaginationManual(pagination.PageNumberPagination):
    max_page_size = 50
    page_size_query_param = 'size'
    page_query_description = '第几页'
    page_size_query_description = '每页几条'

    def get_paginated_response(self, data):
        response = super(PageNumberPaginationManual, self).get_paginated_response(data)
        response.data['total_pages'] = self.page.paginator.num_pages
        response.data['current_page_num'] = self.page.number
        return response
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试游记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导入测试数据
    • 在Pycharm中连接数据库
      • 执行sql
        • 选择执行的目标
        • 处理时间格式
        • 获取项目数据
          • 获取接口总数
            • 获取用例总数
              • 获取配置数量
                • 获取测试套件总数
                  • 整个函数
                    • 结果
                    • 返回分页内容
                    相关产品与服务
                    数据库
                    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档