记录搭建过程
序章
第一代框架
第二代框架
一、yaml用例设计
这个模板不代表最终模板,后续可能还有改动
#用例(名称)标题,需要参数依赖的全部设置字符格式,后期解析成字典列表等格式
用例标题:
#接口地址,也支持参数依赖
path: /test/$.id
#请求方法
method: post
#有值就用这个,没用就使用默认配置的,有header里面使用参数依赖的场景
header: {
}
# 是否运行
is_run: True
# 前置sql:sql有2大类,一个是查询有返回值,一个是增删改无返回值,前置sql为无返回值类型
precondition_sql:
- UPDATE case_test SET title = '标题2', ex = '44' WHERE id = 2
- UPDATE case_test SET title = '标题3', ex = '55' WHERE id = 3
#请求参数较多,这里就使用原始字典格式,除了提取表达式,其他的都带上引号,预防出错,random_time()随机函数使用
data:
{
"id":$.id,
"projectNo": "320SF000206004",
"name":$.name,
"time": random_time(),
"str": random_str(6),
"int": random_number(5),
# 请求参数sql为有返回值查询
"sql": sql-SELECT title FROM case_test where id=2
}
#参数类型 json 或者 form表单
data_type: json
#从接口返回结果提取哪些字段和提取表达式,比如从返回数据提取用户id和name
extract_key:
id: $.id
name: $.name
#断言表达式
# 除了数字类型比较,其他的字符或者表达式全部带上引号,表达式必须要写在后面(必须按照格式来)
# 断言sql为有返回值查询
assert_expression:
#判断响应码是否和预期一致
code: 200
#判断预期值是否在返回值里面(用值是否在接口返回的内容里面判断)
body: 内容包含
#判断json提取值是否和预期一致(用键和值比较等于,大于小于或者in判断)
json:
{
"ig" : ">$.ig","rng" : "==$.rng","edg" : "<$.edg",'1':'in$.ig'}
#判断sql查询值是否和预期一致(用键和值作判断,规则和上面一致)
sql:
{
'1':">sql-SELECT title FROM case_test where id=2",'2':"==sql-SELECT title FROM case_test where id=2"}
二、配置哪些字段需要字符化
‘headers’,‘data’,'assert_expression’这三个字段是需要参数依赖的,要让它们被读取处理时先转成字符格式,方便后续使用.replace()替换方法,替换完后使用eval()方法去除字符恢复原来的格式

三、用例读出
yaml读出方法基本和第二版无改动
文件目录排除做了一些修改,增加了一个raw_case_path用例所属文件夹的配置
用例读取的方法进行了重构
增加了把用例的某些字段字符化的处理,用例的格式也变成了列表嵌套字典的格式

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
@time : 2022/9/5
@Author : LL
@File : read_file.py
'''
import os
from pathlib import Path
from config.config import exclude_file,exclude_dir,raw_case_path,str_zd
import yaml
class ReadFile:
# D:\python2022\yaml_pytest_drf_vue/
project_directory = str(Path(__file__).parent.parent) + '/'
@classmethod
def read_yaml(cls, path):
'''读取yaml文件,以字典格式返回{'用例标题':{'path':'/test','data':{'id':1}}}'''
try:
path = cls.project_directory + path
file = open(path, 'r', encoding='utf-8')
with file as doc:
content = yaml.load

本文详细介绍了从yaml用例设计到参数替换、断言处理的全过程,包括yaml格式调整、requests封装优化,以及在 pytest 中的实战应用,解决了一系列排坑问题如参数顺序、json方法使用和转义问题。


1314

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



