接口自动化框架学习

文章目录

      • 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自动化,性能,持续集成

相关推荐
走在路上的菜鸟7 小时前
Android学Dart学习笔记第十九节 类-混入Mixins
android·笔记·学习·flutter
CodeCraft Studio7 小时前
国产化Word处理组件Spire.DOC教程:使用Python将文件自动化批量附加到 Word文档
python·自动化·word·spire.doc·文档自动化·word文档中添加附件·文档批量处理
RPA机器人就选八爪鱼7 小时前
银行业流程自动化升级:RPA 机器人赋能金融数智转型
大数据·人工智能·机器人·自动化·rpa
有为少年8 小时前
带噪学习 | Ambient Diffusion (NeurIPS 2023) 上篇
人工智能·深度学习·神经网络·学习·机器学习·计算机视觉·生成模型
啃火龙果的兔子8 小时前
Java 学习路线及学习周期
java·开发语言·学习
Thexhy8 小时前
CentOS7安装Redis全攻略
linux·经验分享·redis·学习
大白的编程日记.8 小时前
【计算网络学习笔记】TCP套接字介绍和使用
网络·笔记·学习
中科米堆8 小时前
机器人企业采用自动化三维测量方案,完成关节部件快速检测-中科米堆CASAIM
运维·机器人·自动化·3d全尺寸检测
Stark-C8 小时前
Docker清道夫?在极空间NAS上部署自动化清理助手『PruneMate』
docker·容器·自动化