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

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

一、框架功能介绍

'''
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设计接口自动化框架过程记录(一步一步记录如何设计,完结撒花),源码提供,视频教程

顺便点个小星星呗

下载解压

pycharm打开项目

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

2、环境配置(python3.7)

pip install -r requirements.txt

安装完成

3、启动mock接口服务

这个就是当前你服务器的域名信息

4、配置环境信息

使用上一步服务启动时的域名信息

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

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

MYSQL_CONFIG=(“10xxx”,3306, ‘root’, ‘123456’, ‘test’)

数据库域名,端口,账号,密码,库名

5.1.1、case_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;

5.1.2、case_data 表

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;

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

这个文件

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

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

复制日志文件夹的绝对路径

配置到项目配置文件里面

再次运行就会产生日志文件

7、钉钉配置

python操作钉钉机器人推送消息

复制钉钉文件的路径 D:\python2022\pytest_api_yaml-master\tool\dd_push.py

修改项目配置钉钉路径

修改自己钉钉机器人的token

报告推送

三、使用教程

1、环境信息配置

环境名字随便取,其他格式暂时不运行自定义

项目信息配置自定义的环境名字

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

token的获取大家是不一样的,只要写再token=后面就行

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

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

exclude_dir=['test','fastapi_test']

文件层级排除(这里的写法要case/+路径,不然找不到目录)

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

被排除的目录和文件(包含之前的目录排除)

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、执行入口

自行控制是否启动报告服务


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
存储 测试技术 Python
软件测试/测试开发全日制|Pytest结合yaml实现数据驱动
软件测试/测试开发全日制|Pytest结合yaml实现数据驱动
47 0
|
1月前
|
机器学习/深度学习 数据可视化 计算机视觉
YOLOv5改进 | 2023Neck篇 | 轻量级跨尺度特征融合模块CCFM(附yaml文件+添加教程)
YOLOv5改进 | 2023Neck篇 | 轻量级跨尺度特征融合模块CCFM(附yaml文件+添加教程)
414 1
|
SQL JSON 机器人
pytest+yaml设计接口自动化框架过程记录(一步一步记录如何设计,完结撒花),源码提供,视频教程
pytest+yaml设计接口自动化框架过程记录(一步一步记录如何设计,完结撒花),源码提供,视频教程
|
11月前
|
XML 存储 JSON
YAML教程:5分钟内开始使用YAML
YAML教程:5分钟内开始使用YAML
744 0
|
SQL JSON 测试技术
第三代api自动化测试框架使用教程(pytest+allure+sql+yaml)
第三代api自动化测试框架使用教程(pytest+allure+sql+yaml)
|
JSON 测试技术 数据格式
2022/9/5开始第三版接口自动化(yaml用例)测试框架(记录搭建过程)(这个废弃了)
2022/9/5开始第三版接口自动化(yaml用例)测试框架(记录搭建过程)(这个废弃了)
|
存储 JSON 测试技术
16个实例带你玩转yaml数据格式——自动化测试工程师必备yaml教程
yaml数据格式可谓是自动化测试领域一颗璀璨的明星,笔者最近正好要用到yaml数据格式,可是笔者始终找不到一个想要的yaml格式教程,于是便奋发图强,攻上yaml官网,钻研苦读最新版本的yaml,写下此篇教程,以供大家更加方便、快速、深入地了解yaml数据格式。
384 0
16个实例带你玩转yaml数据格式——自动化测试工程师必备yaml教程
|
JavaScript 前端开发 数据库
|
XML 数据格式 计算机视觉
OpenCV教程(42) xml/yaml文件的读写
参考资料: http://docs.opencv.org/modules/core/doc/xml_yaml_persistence.html #include "opencv2/opencv.
1174 0