pytest+yaml框架环境配置和使用教程

pytest+yaml框架使用教程

  • 一、框架功能介绍
  • 二、框架启动
    • 1、源码下载,项目打开
      • 1.1、[框架源码](https://gitee.com/jianglisha/pytest_api_yaml)
      • 1.2、[pytest+yaml设计接口自动化框架过程记录(一步一步记录如何设计,完结撒花),源码提供,视频教程](https://blog.csdn.net/aaaaaaaaanjjj/article/details/125274053)
      • 1.2、我把环境换成了一个啥用没有的初始环境
    • 2、环境配置(python3.7)
    • 3、启动mock接口服务
    • 4、配置环境信息
    • 5、配置项目信息后运行(有数据库环境)(数据库MYSQL_CONFIG)
      • 5.1数据库(2个表,库名是test,修改的话记得修改项目配置的MYSQL_CONFIG)
        • 5.1.1、case_test表
        • 5.1.2、case_data 表
      • 5.2、表配完这个就可以直接运行了
      • 5.3、未配置报错(必须要配置可以链接的数据库,用例可以不写sql,但必须得配置)
    • 6、日志储存文件路径配置(产生新日志)
    • 7、钉钉配置
  • 三、使用教程
    • 1、环境信息配置
    • 2、token信息写入环境配置里面
    • 3、执行用例目录文件配置
    • 4、用例编写(重点)
    • 5、执行入口

一、框架功能介绍

'''
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()^}]
'''

二、框架启动

1、源码下载,项目打开

1.1、框架源码

1.2、pytest+yaml设计接口自动化框架过程记录(一步一步记录如何设计,完结撒花),源码提供,视频教程

顺便点个小星星呗
pytest+yaml框架环境配置和使用教程_第1张图片
下载解压
pytest+yaml框架环境配置和使用教程_第2张图片
pycharm打开项目
pytest+yaml框架环境配置和使用教程_第3张图片

1.2、我把环境换成了一个啥用没有的初始环境

pytest+yaml框架环境配置和使用教程_第4张图片

2、环境配置(python3.7)

pip install -r requirements.txt
pytest+yaml框架环境配置和使用教程_第5张图片
安装完成
pytest+yaml框架环境配置和使用教程_第6张图片

3、启动mock接口服务

pytest+yaml框架环境配置和使用教程_第7张图片
这个就是当前你服务器的域名信息
pytest+yaml框架环境配置和使用教程_第8张图片

4、配置环境信息

使用上一步服务启动时的域名信息
pytest+yaml框架环境配置和使用教程_第9张图片

5、配置项目信息后运行(有数据库环境)(数据库MYSQL_CONFIG)

5.1数据库(2个表,库名是test,修改的话记得修改项目配置的MYSQL_CONFIG)

MYSQL_CONFIG=(“10xxx”,3306, ‘root’, ‘123456’, ‘test’)
数据库域名,端口,账号,密码,库名

5.1.1、case_test表

pytest+yaml框架环境配置和使用教程_第10张图片

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;

5.1.2、case_data 表

pytest+yaml框架环境配置和使用教程_第11张图片

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;

pytest+yaml框架环境配置和使用教程_第12张图片

5.2、表配完这个就可以直接运行了

这个文件
pytest+yaml框架环境配置和使用教程_第13张图片
pytest+yaml框架环境配置和使用教程_第14张图片

5.3、未配置报错(必须要配置可以链接的数据库,用例可以不写sql,但必须得配置)

pytest+yaml框架环境配置和使用教程_第15张图片

6、日志储存文件路径配置(产生新日志)

复制日志文件夹的绝对路径
pytest+yaml框架环境配置和使用教程_第16张图片
配置到项目配置文件里面
pytest+yaml框架环境配置和使用教程_第17张图片
再次运行就会产生日志文件

7、钉钉配置

python操作钉钉机器人推送消息
复制钉钉文件的路径 D:\python2022\pytest_api_yaml-master\tool\dd_push.py
pytest+yaml框架环境配置和使用教程_第18张图片
修改项目配置钉钉路径

pytest+yaml框架环境配置和使用教程_第19张图片
修改自己钉钉机器人的token
pytest+yaml框架环境配置和使用教程_第20张图片
报告推送
pytest+yaml框架环境配置和使用教程_第21张图片

三、使用教程

1、环境信息配置

环境名字随便取,其他格式暂时不运行自定义
pytest+yaml框架环境配置和使用教程_第22张图片
pytest+yaml框架环境配置和使用教程_第23张图片

项目信息配置自定义的环境名字
pytest+yaml框架环境配置和使用教程_第24张图片

2、token信息写入环境配置里面

token的获取大家是不一样的,只要写再token=后面就行
pytest+yaml框架环境配置和使用教程_第25张图片

3、执行用例目录文件配置

目录层级排除(只支持二级),排除test,fastapi_test目录下所有的用例文件(这里是直接写目录名就行)

exclude_dir=['test','fastapi_test']

pytest+yaml框架环境配置和使用教程_第26张图片
文件层级排除(这里的写法要case/+路径,不然找不到目录)

exclude_file=['case/fastapi_test/bill.yaml']

被排除的目录和文件(包含之前的目录排除)
pytest+yaml框架环境配置和使用教程_第27张图片

4、用例编写(重点)

#用例(名称)标题
用例标题:
  #接口地址
  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"']

5、执行入口

自行控制是否启动报告服务
pytest+yaml框架环境配置和使用教程_第28张图片

你可能感兴趣的:(自动化测试,pytest)