一、ORM设计
1)关联关系
一对多:ForeignKey
多对多:ManyToManyFiled

一对一:OneToOneFiled

2)mysql数据库(版本5.7)配置
创建数据库:
CREATE DATABASE `autotpsite` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
3)安装依赖库:
pip install mysqlclient
4)字段条件关联查询:
field_lookuptype=value
默认查找类型为exact精确匹配
常用字段条件关联查询
exact、contains、in
跨关系查询(关联查询)
字段__关联字段
sql null 和json null区别
req.data = Value('null')
req.data = None

二、djangorestframework框架
1)定义:帮助开发restful风格的增删改查接口。

2)安装:
pip install djangorestframework
3)序列化器
序列化(查询)
数据对象-----python数据类型-----json
反序列化(增删改)
数据流-----python数据类型-----数据对象

序列化器中的类属性字段

4)drf请求与响应
请求对象
request.POST 只适用于post方法
request.data 处理任意数据,适用于post、put、patch方法
响应对象
return Response(data) 渲染成客户端请求的内容类型
示例:


5)函数视图装饰器:api_view
视图类
ListCreateAPIView
RetrieveUpdateDestroyAPIView
视图集(使用路由生成器)
ModelViewSet
DefaultRouter()
format_suffix_patterns 重写url
6)自定义渲染器
定义:按照指定的格式返回响应数据。

settings.py配置:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES':(
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPlRenderer'
)
}

7)异常信息处理

'EXCEPTION_HANDLER': 'utils.exception.my_exception_handler'
error_response = exception_handler(exc, context)
8)在线API生成器 swagger
安装:
pip install drf-yasg # drf-yasg 支持最新Django
注册:
INSTALLED_APPS = ['django.contrib.staticfiles', 'drf_yasg']
配置路由:
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
schema_view = get_schema_view(
openapi.Info(
title='SQTP API DOC',
default_version='v1',
description='SQTP接口文档',
terms_of_service='https://www.365.net',
contact=openapi.Contact(email='1612@qq.com', url='http://cbblog.cn'),
license=openapi.License(name='BSD License')
),
public=True,
permission_classes=(permissions.AllowAny, )
)
urlpatterns = [
path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='redoc-ui')
]
9)配置前端文件访问路径
from django.conf.urls.static import static
urlpatterns = [
path('admin/,admin.site.urls),
path('api",include(urls))
] + static("/", document root="dist")
10)嵌套字段和choice字段展示
config = ConfigSerializer() # config字段就对应其序列化器返回的内容
req1=Request.objects.get(id=1)
req1.get_method_display()
11)项目流程
注册流程

登录流程

用例执行主流程

1)用户管理设计
"""
1、模型的继承--公共模型
抽象类
abstract = True
2、自定义用户模型--引用User模型
settings.AUTH_USER_MODEL
添加多个外键字段时,需要加反向查询名称related_name
模型抽象类的字段被多个模型继承时,反向查询related_name会提示重复,需要添加%(class)s_,类名作为前缀
"""
"""
认证、权限
user=auth.authenticate(**info) # 根据用户名和密码验证用户信息,成功则返回对应的用户对象
auth.login(request,user) # 记录登录用户信息到后台 django自带方法
auth.logout(request) # 清除用户登录信息
@login_required # django验证用户是否登录的机制
drf认证模块
drf权限机制
需求:只有当前项目的管理员才有编辑当前项目的权限
"""

2)用例执行流程设计
"""
传参报字段类型错误,注意检查传参类型是否是对象、字典、字符串(Incorrect type. Expected pk value, received Project)
序列化器中的类属性字段(图片)
1、定义的字段必须出现在fields列表
2、只需要反序列化输入:write_only=True、只需要序列化输出:read_only=True、当前字段允许不传:required=False
反序列化校验机制
if req_serializer.is_valid(raise_exception=True):
req_obj = req_serializer.save()
"""
反序列化校验机制

步骤序列化代码
用例序列化代码
"""
1、联合索引(sorted_no和belong_case)
2、用户和数据关联(views模块)
# 同步创建用户
def perform_create(self, serializer):
serializer.save(create_by=self.request.user)
# 同步更新用户
def perform_update(self, serializer):
serializer.save(update_by=self.request.user)
3、字段展示、屏蔽
在序列化器定义的字段,必须写在fields里
"""
用例文件生成
自定义入参校验器
用例文件输出过滤
单用例执行
"""
1、视图集自定义方法action
2、自定义入参校验器
过滤生成json文件中,字典和列表类型中的空值
3、hr3执行API
hrun testcase/xxx.json
httprunner.cli.main_run([case_path])
"""
测试计划(批量运行测试用例,生成测试报告)
测试计划组件更新
pip install allure-pytest
hrun testcase\测开1_case001.json --alluredir=report/tmp
allure generate report/tmp -o report/html --clean
优化
测试报告集成
上传用例
分页
# REST文件上传功能
from rest_framework.parsers import FileUploadParser
class FileUploadView(APIView):
parser_classes = [FileUploadParser, ]
分页全局配置
'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10,

总结:


被折叠的 条评论
为什么被折叠?



