接口自动化框架学习

文章目录

      • 1.day1基础项目搭建和夹具使用
        • [1.1 pytest在自动化中主要做了什么事情](#1.1 pytest在自动化中主要做了什么事情)
      • [2.day2 了解断言和深度理解allure报告的定制](#2.day2 了解断言和深度理解allure报告的定制)
      • [3.day3 yaml文件的使用](#3.day3 yaml文件的使用)
      • [4.day4 requests使用](#4.day4 requests使用)
      • [5.day5 统一请求封装与yaml管理session](#5.day5 统一请求封装与yaml管理session)
      • [6.day6 初步的代码封装,实现一个测试用例发送请求与yaml文件校验功能](#6.day6 初步的代码封装,实现一个测试用例发送请求与yaml文件校验功能)
      • [7.day7 采用统一的用例登录的token如何处理](#7.day7 采用统一的用例登录的token如何处理)
      • [8.day8 通过正则匹配修改yaml替换的方式,yaml可以使用函数(热加载)](#8.day8 通过正则匹配修改yaml替换的方式,yaml可以使用函数(热加载))
      • [9.day9 如何使用断言以及allure报告的定制](#9.day9 如何使用断言以及allure报告的定制)
      • [10.day10 流程用例和数据驱动实现方式](#10.day10 流程用例和数据驱动实现方式)
      • [11.day11 加密算法的使用和了解以及硬编码解决方案](#11.day11 加密算法的使用和了解以及硬编码解决方案)
      • [12.day12 定义baseurl到ini](#12.day12 定义baseurl到ini)

1.day1基础项目搭建和夹具使用

1.新建requrements.txt存放所有依赖文件

2.建立testcases文件夹存放测试文件

3.建立pytest.ini配置终端运行参数(含测试报告输出位置)

4.建立主函数,自动扫描运行pytest用例

5.学会fixture固件的使用

重点:fixture固件使用(一定放在conftest.py文件)

作用域:function,class,module,session

session范围,ini文件扫描的测试用例决定

参数化params:接收数据

1.1 pytest在自动化中主要做了什么事情

1,发现测试用例

2.执行测试用例

3.判断测试结果

4.生成测试报告

2.day2 了解断言和深度理解allure报告的定制

1.理解assert断言是啥(包含== 和 in)

2.allure报告如何使用

1.下载allure,配置全局环境变量

2.addopts配置参数 ==aluredir=temps --clean-alluredir(参数1表示生成json报告,参数2表示清空之前)

2.pytest,main后执行系统命令 # os.system("allure generate ./temps -o ./reports --clean")

3.了解allure报告的定制

class之上 allure.epic(项目名称)

class之上 allure.feature(模块名称)

测试用例之上 @allure.story(接口名称)

测试用例之上 @allure.story(接口标题)

alluire界面右边的定制

测试用例之上 @allure.serverity(allure.severity_level_BLOCKER) 定义严重程度

测试用例之上 @allure.description("说明:登录用户接口") 描述信息

测试用例之上 @allure.link("接口访问链接")

测试用例之上 @allure.issue("bug链接")

测试用例之上 @allure.testcase("测试用例链接")

测试用例内部 @allure.step定义测试用例执行步骤

allure.step内部 @allure.attach(文件地址,名称等参数信息)

测试用例内部 @allure.attach(请求凡是,路径,请求头等信息)

3.day3 yaml文件的使用

1.yaml文件理解与使用

1.pip install pyyaml

2.关键函数 yaml.safe_load(yaml文件)yaml转为字典对象

yaml.safe_dump(dict) dict字典存入yaml文件

2.参数化使用

python 复制代码
@pytest.mark.parametrize("caseinfo", ["百里", "北凡"])
def test_login()

1.上述用例执行的次数是[]内部元素的个数,这个过程称之为数据驱动

2.上述第二个参数可以通过函数读取Yaml文件

4.day4 requests使用

1.了解发送请求的的几种方式,其中,request.session.request()方法保证项目所有请求关联token

2.了解正则表达式方式提取返回的数据,提取的数据给第二个接口使用

3.了解jsonpath提取数据方式$.名称,找到对应的字段

5.day5 统一请求封装与yaml管理session

1.为什么要做接口自动化

1.每次请求都需要写很多冗余代码

2.多个py文件无法共享session

3.设置统一的异常处理,公共参数等等

2.统一请求封装

1.构建统一的request.session.request

2.传递进来的kwargs,解析参数做请求处理,如公共参数添加

3.接口关联封装

目的:统一管理如session的公共变量

方案:通过Yaml文件保存中间变量(在获取token存入yaml文件,其他Py通过读取yaml文件调用)

4.如果共享yaml文件不想一直append东西?如何做

通过夹具前置操作,用例执行前,清空yaml文件

6.day6 初步的代码封装,实现一个测试用例发送请求与yaml文件校验功能

1.实现的三层架构介绍下

1.基础封装层(基础的一些配置请求,参数处理等等)

2.用例层(执行代码)

3.数据层(yaml请求数据)

2.如何分离数据和代码?

把请求四要素等变动信息抽取到对应的Yaml文件中,通过paramrize数据驱动读取yaml文件数据

  1. 仅实现接口数据和代码分离还存在哪些问题?

1.接口的关联依然需要自己写入和读取,token

2.依旧存在很多冗余的请求代码

3.没有对yaml做文件合法性校验

4.如何设置一个通用的的可以读取测试用例的测试类

1.可以循环读取所有的yaml文件

2.写一个创建测试用例的函数,接收Yaml路径作为参数(主要用来发请求)

3.在循环读取yaml文件时,读完创建函数,函数创建完,通过反射加入到测试类中

5.如何校验yaml是否符合规范

1.通过定义一个CaseInfo类,确定必填和选填

2.写一个verify函数,接收yaml的json形式,调用CaseInfo类解包json,如果缺少了某个必填,自然会报错

6.创建测试用例的函数怎么写

1.调用校验函数,得到返回的caseinfo对象

2.调用请求函数,传递caseinfo的requets对象发送网络请求

day6阶段总结(阶段理解重点)

1.通过pytest.main启动代码

2.根据pytest.ini扫描测试类

3.先执行测试类顶格代码,读取Yaml文件

4.每个Yaml文件生成对应的测试函数(先执行校验yaml逻辑,再执行网络请求逻辑)

5.对应的测试函数通过反射加入到TestAllCase类

6.pytest框架自动执行测试,校验网络请求成功与否

7.day7 采用统一的用例登录的token如何处理

1.测试用例的先后执行顺序如何操作呢?

一般是按照文件夹名称的ascall码排序执行,文件同理,可以增加a开头的文件夹,默认优先执行

2.请求的过程中,携带的token是没有值的?自动在yaml读取到token

由于上述封装了一个统一的测试用例及网络请求代码,原本的正则提取和jsonpath提取失效,所以需要考虑其他方式,提取值,存放到yaml文件中

提取需要考虑的一些地方

提取地方:响应的body,响应的cookie,响应头

提取方式:正则,jsonpath

提取之后取值,通过下标取值

yaml设计

yaml 复制代码
extract:
	保存的变量名:[提取地方json/text,提取方式$,提取之后的下标0]

如何提取保存token呢?

1.获取中间变量的yaml文件采用extract定义

2.在发送请求的函数,请求之后提取,传递res,extract键值对到提取函数

3.判断Caseinfo选填的extract不为空,就需要提取

4.深拷贝res对象,设置json属性是res.json

5.判断提取方式,比如正则还是jsonpath,采用对应方式提取数据

6.写入到yaml中保存

如何使用已经存储到了extract.yaml的token呢?

1.接收requets参数,并转换为字符串

2.带有$字符串替换为yaml文件中的值并返回

3.在请求之前替换请求中的变量,然后再去请求数据

总结

  1. 为什么需要做接口关联?
    因为自己封装数据,采用了统一的请求方式,原本的各自写入yaml,读取yaml获得token方式失效
    2.如何做?
    1.提取返回的token数据
    网络请求之后,拿到返回的结果,根据yaml定义的规则,如:token:[json, " . t o k e n " , 0 ] 通过 j s o n p a t h ( r e q u e t s d a t a , " .token", 0] 通过jsonpath(requets_data, " .token",0]通过jsonpath(requetsdata,".token")方式获取到token值,并把结果写入Yaml
    2.如何使用yaml中的token
    yaml定义${token}为提取值
    一般在网络请求前修改替换request,拿到请求数据之后,直接对其进行替换,整体请求数据再返回即可

自动化一般需要解决的问题如下:

8.day8 通过正则匹配修改yaml替换的方式,yaml可以使用函数(热加载)

1.模板替换存在的问题, 自动把我的数值类型变了,无法使用函数,只可以替换

解决方案

1.重新定义一个函数,通过正则匹配,yaml中带有函数的需要匹配的,需要匹配函数名和参数

2.正则匹配到了,放到一个list里面,因为yaml可能存在多个需要替换的

3.循环list,定义一个类存储yaml可能存在的函数,通过反射获取方法(因为我有了字符串),然后调用处理 、、

2.如何在pytest中配置日志模块

1.pytest.ini配置文件设置

log_file= ./logs/frame.log 日志文件

log_file_level = INFO 日志级别

log_file_foramt = %s(asctime)s %(levelname)s %(filename)s %(message)s

2.对应的py文件生成日志对象

logger = logging.getLogger(name)

3.把日志写入文件

logger.info(res)

9.day9 如何使用断言以及allure报告的定制

1.如何做断言

1.yaml中定义断言的预期结果,实际结果等信息

validate

equals:

断言状态码为200(一般作为断言失败提示): [200, status_code]

contains:

断言包含access_token: [access_token, text]

2.在提取完token之后,做信息断言,如果validate不为空就需要断言

3.深拷贝res对象,避免修改原来的对象,遍历提取实际值和预期值再进行断言

2.allure报告定制

1.从yaml中读取项目模块名等信息

2.尽量抛出异常,如果是捕获异常会被认为已经处理,报告就不会显示错误信息

10.day10 流程用例和数据驱动实现方式

1.理解不同用例

单接口用例

数据驱动用例(正例和反例)通过parametrize涉及数据[["username","password"],["a","123"],["b","123"]]

流程用例(涉及多个接口执行同一个事务)[{},{},{}] 读取yaml的list 长度大于等于2

2.不同用例执行需要注意哪些

1.流程用例应该是作为一个用例执行

具体操作:yaml读取到的list,修改为[ca_list]等于说是这样[[{},{},{}]],解包之后还是一个用例执行

  • 读取yaml判断如果是一个list走新的逻辑,循环读取list,再去分别校验,再走标准化流程(循环执行相当于单接口)
    2.数据驱动用例应该是作为多个用例去执行[{}],转换为[{},{},{}]

具体操作:

1.新建一个函数传递进来一个解包后的字典、

2.循环遍历多组参数,对于 d d t u s e r n a m e 和 ddt{username}和 ddtusername和ddt{password}进行替换,生成一组用例append到结果中

3.删除parametrize

4.返回list集合

11.day11 加密算法的使用和了解以及硬编码解决方案

1.加密算法

单向加密:SHA,MD5

非对称加密:RSA,公钥加密文本,私钥解密文本

2.如何做加密?

1.debug_talk工具函数提供对应的加密方法

2.yaml文件中调用方法

3.硬编码如何解决?

1.新建setting,py

2.Key=value形式,把硬编码的数据存储到这里

12.day12 定义baseurl到ini

1.不同生产环境基础路径提取

1.将基础路径提取到ini文件中[base_url]

2.定义函数读取ini文件,返回字典对象

3.用例需要使用,debug热加载函数定义函数,调用读取ini函数

4.修改yaml文件的基础路径方式

2.logger封装

1.按照测试用例的执行顺序一步步添加日志

3.其他

目前后续还需要继续学习的

学历,功能(项目),接口自动化,web自动化,性能,持续集成

相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
金智维科技官方5 天前
智能体,重构企业自动化未来
人工智能·自动化·agent·智能体·数字员工
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习
im_AMBER5 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode