面试前临阵磨枪项目
项目一
单元测试框架
用到的知识点:
pytest 目录
conf 配置
data 测试数据excel
logs 日志
report 测试报告
scripts 测试用例脚本
start 启动文件
utils 二次封装requests封装、excel操作封装、日志操作的封装、测试报告操作的封装
allure
Python通过allure模块生成allure需要的中间数据——json数据。
在使用allure插件读取json数据,进而生成allure测试报告。
一般使用allure要经历几个步骤:
配置pytest.ini文件。
编写用例并执行。
使用allure工具生成html报告。
参数化
parametrize
@pytest.mark.parametrize(argnames,argvalues):
固件:@pytest.fixture()
类似于setup/teardown的功能,但是相对的比较灵活
@pytest.fixture(scope='function')
作用域scope:
function: 函数级,每个测试函数都会执行一次固件;
class: 类级别,每个测试类执行一次,所有方法都可以使用;
module: 模块级,每个模块执行一次,模块内函数和方法都可使用;
session: 会话级,一次测试只执行一次,所有被找到的函数和方法都可用。
预处理和后处理:
Pytest 使用 yield 关键词将固件分为两部分,
yield 之前的代码属于预处理,会在测试前执行;
yield 之后的代码属于后处理,将在测试完成后执行。
失败重跑:rerun
使用 在配置文件的addopts参数后跟 --reruns=3 可以设置次数
Excel操作,用xlrd
book = xlrd.open_workbook(settings.FILE_PATH)
sheet = book.sheet_by_index(0)
# 获取指定行
# print(sheet.row_values(1))
# 获取指定列
# print(sheet.col_values(0))
处理数据依赖问题 正则校验re
re.compile(pattern, flags=0)
# 将正则表达式编译成一个Pattern规则对象,单独使用compile 没有意义,他生成的是一个规则,
需要match ,search 等去使用这个规则
# re只能提取字符串 \${(.*?)}\$ 匹配:${neeo_001>response_json>data}$"}
pattern = re.compile('\${(.*?)}\$') # 生成一个规则
# 找到匹配好的数据据
rule_list = pattern.findall(parameter)
# 将获取的真实数据替换${neeo_001>response_json>data}$"}这个规则
re.sub(pattern, repl, string, count)
# 匹配替换为选择的文本
关于cookies处理(数据依赖有cookies的处理)
第一种:
借鉴postman的cookies管理器思路,即每个请求都监测响应结果是否有cookies返回,如果有,就保存,以域名的形式保存该cookies
如果有同域名的请求,就自动在headers中携带该cookies
urllib:取域名用
第二种:
我们在请求中,判断响应结果中是否返回了cookies,如果返回了,就保存到当前的用例对象中,该对象就是一个大的字典。将cookies和值保存为一个key value 谁要用,就来拿该参数
断言
Deepdiff模块:常用来校验两个对象是否一致,并找出其中差异之处
# get 如果能取到values_changed就返回,娶不到就返回none
assert not DeepDiff(except_date, result).get('values_changed', None)
日志操作,
对日志操作进行一个封装
在settings文件中配置好日志相关的配置
在重点位置添加日志logger().info()
邮件,
settings配置 邮件相关
第三方 SMTP 服务
文件操作,文件压缩, zipfile(有固定写法)
实现思路:
读取Excel,每一行数据都是一个用例,你在读出来之后,把这个一行用例封装成一个对象,字典,列表。
使用参数化每次将一个用例对象传进去。
使用requests获取用例对象中的相关参数进行发请求。
然后将请求结果与预期值(用例对象)做断言
此时,allure所需的json数据已经有了。
使用allure命名读取josn数据生成测试报告
将报告压缩
使用发邮件功能将压缩文件发送
在重点位置,添加日志功能
接口自动化平台
管理所有的接口(管理在数据库里):
接口的增删改查
一键执行接口,并生成测试报告
批量执行
下载报告
批量导入
从Excel表格中
定时任务
每天定时(凌晨1点)检查是否有今天要结束的测试活动,如果有,就自动的执行一遍。
可视化
echarts
开发流程
数据库设计
项目表的字段:
项目名称
项目描述
用例数据量,该字段是统计出来的
覆盖率字段,计算出来的(通过的用例数量除以项目总的用例数量)
开始时间
结束时间
用例表字段:
用例名称
用例描述
所属项目
请求的url
请求的类型
请求的参数
期望值
执行状态
已执行
未执行
通过状态,用例执行后,修改此状态
执行成功,已通过
执行失败,未通过
用例报告
日志表字段:
所属项目
执行时间
执行的报告
用例执行过程分析
页面中,勾选了一个或者多个用例,CheckBox(复选框)
点击执行按钮后,后端接收一个或者多个CheckBox的值(用例id):
前端如何往后端发送?
ajax发送,循环CheckBox的外部盒子,获取每一个CheckBox状态为选中的input框,获取input的value值(用例id),然后push到数组中,再将该数组发送到后端。
form表单提交
后端如何接收form表单提交的值
request.POST.get_list
def index(request):
if request.method == "POST":
request.POST.get("username") # username对应的是单个值
request.POST.get_list('checkbox_list') # 以列表的形式接收多个值
后端接收到了前端传过来的值:[1, 2, 3, 4]
根据获取到的用例id列表,去数据库中提取出对应记录(用例对象)
如果是多个用例对象,循环使用requests提取用例对象中的字段发请求。
结果断言
unittest生成测试报告
将测试报告保存到用例的相应字段中
修改用例的执行状态和通过状态
考虑如何获取批量执行的测试结果报告
用例批量执行完毕,将批量执行结果保存到log表中
用例执行的时间
用例报告
将执行结果给前端返回。
项目表的增删改查
modelform字段校验
templates模板:adminLTE是基于bootstrap3的前端框架
用例执行
批量执行逻辑:
1. 点击执行按钮,获取到所有选中的CheckBox的值(遍历,将所有选中的值放到数组中)
- 点击后,没有找到选中的CheckBox,要给提示信息
2. 将多个值发送到后端 ajax将 数组发送到后端
3. 后端处理完毕,返回前端状态
关于请求的一些列流程:
1. 提取case_obj中的字段,使用requests发请求
1. 对请求参数进行校验
2. 将请求结果提取出来
2. 使用unittest进行断言(DeepDiff模块)
3. 更新数据库字段的状态(执行时间 用例通过与否 )
4. 将执行结果添加到日志表中(写log表,通过多少,失败多少,共执行了多少用例)
5. 前端返回
下载用例的执行报告: FileResponse模块
数据可视化echarts的使用
用例通过/失败(饼图)
用例执行/未执行(饼图)
展示最近一年的每个月的项目创建数量(折线图),注意,提前准备数据
定时任务
APScheduler是一个轻量级的Python定时任务调度框架(Python库)
每天的凌晨1:30:20去检查it表,查看 it_end_time 是当天的,就把其关联的所有的用例执行一遍。并生成log日志
定时任务的逻辑实现
循环 it 表的 it_end_time 字段,判断该字段的值是否是当天,如果是当天的,就执行其内的所有用例
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界