'''
1、每条用例前置sql,请求参数sql,断言sql
2、requests二次封装,自动获取ip和header信息
3、allure动态方法封装(标题、描述、步骤)
4、钉钉机器人发生allure报告公司局域网内可以访问
5、log日志记录每个重要参数
6、多接口参数依赖(接口返回提取,请求使用)
7、token信息全局前置写入配置文件
8、用例文件支持多目录多文件运行,支持排除目录或者文件
9、定位运行的用例属于哪个文件
10、支持随机几位数字或者字符串
11、提供mock接口
12、多环境测试(需要配置要测试的环境名和不同环境token)
13、用例标题重复停止测试
14、支持多个断言条件
15、接口请求参数替换支持list: [$.waybillid] ,一层json: {'c':$.c} ,多层json: {'a':'a','c':[{'c1':^$.c1^},{'time':^random_time()^}]
'''
pip install -r requirements.txt
安装完成
MYSQL_CONFIG=(“10xxx”,3306, ‘root’, ‘123456’, ‘test’)
数据库域名,端口,账号,密码,库名
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for case_test
-- ----------------------------
DROP TABLE IF EXISTS `case_test`;
CREATE TABLE `case_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`ex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of case_test
-- ----------------------------
INSERT INTO `case_test` VALUES (2, '标题2', '44');
INSERT INTO `case_test` VALUES (3, '标题3', '55');
INSERT INTO `case_test` VALUES (4, '1', '1');
INSERT INTO `case_test` VALUES (5, '1', '1');
INSERT INTO `case_test` VALUES (6, '1', '1');
INSERT INTO `case_test` VALUES (7, '1', '1');
INSERT INTO `case_test` VALUES (8, '1', '1');
INSERT INTO `case_test` VALUES (9, '1', '1');
INSERT INTO `case_test` VALUES (10, '1', '1');
INSERT INTO `case_test` VALUES (11, '1', '1');
INSERT INTO `case_test` VALUES (12, '1', '1');
INSERT INTO `case_test` VALUES (13, '1', '1');
INSERT INTO `case_test` VALUES (14, '1', '1');
INSERT INTO `case_test` VALUES (15, '1', '1');
SET FOREIGN_KEY_CHECKS = 1;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for case_data
-- ----------------------------
DROP TABLE IF EXISTS `case_data`;
CREATE TABLE `case_data` (
`case_id` int(11) NOT NULL,
`id` int(11) NULL DEFAULT NULL,
`test_data` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`case_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of case_data
-- ----------------------------
INSERT INTO `case_data` VALUES (2, 1, '{\'path\':\'/ufo\'}');
SET FOREIGN_KEY_CHECKS = 1;
复制日志文件夹的绝对路径
配置到项目配置文件里面
再次运行就会产生日志文件
python操作钉钉机器人推送消息
复制钉钉文件的路径 D:\python2022\pytest_api_yaml-master\tool\dd_push.py
修改项目配置钉钉路径
token的获取大家是不一样的,只要写再token=后面就行
目录层级排除(只支持二级),排除test,fastapi_test目录下所有的用例文件(这里是直接写目录名就行)
exclude_dir=['test','fastapi_test']
文件层级排除(这里的写法要case/+路径,不然找不到目录)
exclude_file=['case/fastapi_test/bill.yaml']
#用例(名称)标题
用例标题:
#接口地址
path: /test
#请求方法
method: get
# 备注信息
remark: 这个是使用模板
# 是否运行
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":$.tq_data.id,
"projectNo": "320SF000206004",
"name":$.tq_data.name,
"time": random_time(),
"str": random_str(6),
"int": random_number(5),
# 请求参数sql为有返回值查询
"sql": sql-SELECT title FROM case_test where id=2
}
#从接口返回结果提取哪些字段和提取表达式,比如从返回数据提取用户id和name
extract_key:
id: $.id
name: $.name
#断言表达式
# 除了数字类型比较,其他的字符或者表达式全部带上引号,表达式必须要写在后面(必须按照格式来)
assert_expression:
# 断言sql为有返回值查询
["'12' in '123'", '"ig" == "$.ig"', '1=="sql-SELECT title FROM case_test where id=2"']
参数list:
path: /list
method: post
remark: 参数list的参数替换模板
is_run: True
precondition_sql:
data:
#list请求参数使用和json的无区别
[$.waybillid,random_number(5)]
extract_key:
assert_expression:
['"成功"=="$.msg"']
参数嵌套替换:
path: /ccsstthh
method: post
remark: ctms发车
is_run: True
precondition_sql:
data:
{
#参数嵌套的不影响之前的参数替换使用
"a":$.a,
"b":"bba",
"shiftIdList":[
{
#参数嵌套这种格式暂时只支持[{},{},{}],在参数嵌套里面使用需要加上^^
"id":^$.shiftid^,
"sendTime":^random_time()^
},
{
"waybillId":^$.waybillid^
}
]
}
extract_key:
assert_expression:
['"成功"=="$.msg"']