文章目录
-
-
- 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.接口的关联依然需要自己写入和读取,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.在请求之前替换请求中的变量,然后再去请求数据
总结
- 为什么需要做接口关联?
因为自己封装数据,采用了统一的请求方式,原本的各自写入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自动化,性能,持续集成