面试前临阵磨枪项目

项目一

单元测试框架

用到的知识点:
  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 字段,判断该字段的值是否是当天,如果是当天的,就执行其内的所有用例

posted @   贰号猿  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示