无自动化测试系统设计方法论

2023-05-16

灵活 敏捷 迭代。

自动化测试 辩思

测试必不可少

想想看没有充分测试的代码, 哪一次是一次过的? 哪一次不需要经历下测试的鞭挞? 不要以为软件代码容易改, 就对于质量不切实际的自信—那是自大!

不适用自动化测试的case

  • 遗留系统。
  • 太多的依赖方, 不想用过多的mock => 逻辑核心能力就是那些不容易测试的
    • 大量依赖 第三方商业服务、自己的rpc服务/http服务
    • IO 操作密集的
      • 似乎很少有IO密集型的应用具备完善测试的
    • (注意) 容易测试的一般是 无状态的(无IO状态的), 就内存中存储了状态
  • 对应的代码在线上的时间比较短, 属于实验性代码。
    • 越是早期, 自动化测试的必要性就越弱。靠手工测试就可以支持一定水平的质量。

无自动化测试系统设计方法论

这一切都需要 一点代价, 但是相对于 单元测试来说, 代价还是轻微很多。

无自动化测试, 也要关注可测试

  • 模块、组件间的边界情况
  • 使用 “谦虚对象” 设计模式来隔离可测试和不可测试的领域, 划定边界。

划分边界 注意耦合关系

需要更审慎的对对应的模块做足够的前置思考:

  • 重写的风险增大了 必不可少, 重构的能力了大大降低了!

常见的分层边界有 GUI层、 逻辑层 、网络层…

  • 如果逻辑层代码比较复杂, 那么可以将逻辑层代码单独摘离出来进行测试
  • GUI 层可以拆分 容易测试的部分和不容易测试的部分==> by “谦虚对象”

模块测试

落地到具体的测试行为上, 还是按模块测试比较好。

使用测试api

更多参考: 架构敏捷之道 P220
在自动化测试工作流里: 如果测试架构设计不好、测试代码和生产代码耦合过高的话, 可能出现脆弱的测试。修改一个api需要修改大量的测试代码。
如果使用无自动化支持, 那么测试API必不可少。类似于一个超管API,能够跳过各种权限验证、逻辑验证, 直达核心逻辑。

  • 本质上是通过修改状态来加速测试流程。

用 测试API 和 合理的mock能力 来更灵活的撬动 软件质量

  • 对于IO密集型应用 需要的测试API能力:
    • clear : 清除 所有的缓存影响
    • remove : 删除指定影响、删除指定字段
    • set(指定值) : 给指定值设置状态
    • get(查询): 查询指定值
  • 环境隔离:
    • 测试API甚至需要运行时隔离 乃至 编译器隔离,避免污染线上环境。

简短 手动测试 反馈时间

哪怕是手动测试, 也需要注意测试反馈时间。
影响程序员的效率的两大因素: 调试和验证反馈时长。

  • 足够的测试大大减少调试的次数
  • 验证反馈时长缩短, 每个小迭代反馈都更容易、效率更高。

必要情况下 使用自动化测试

自动化测试有代价, 对于不爱写测试的同学需要重视测试, 对于狂热的TDD爱好者, 也要警醒测试代码也是需要花费人力的。
对于经常出现问题的、非IO密集型的逻辑, 可以使用自动化测试来防御之后可能导致的问题。

  • 频繁出现问题的区域, 使用自动化手段防御 ROI很高
  • IO密集型的逻辑, 本质上复杂性和风险都在依赖的IO组件方—无论是文件还是数据库, 都是更为稳定、健壮的代码。

覆盖率不一定要很高, 但是验收测试要通过。一般来说冒烟测试是最基本的。

让表现结果 明显 可视化

  • 错误的路径 异常日志打出来,
  • 正确的路径 可以日志 绿色高亮
  • 可以使用 侵入式的 Assert 临时代码
  • 更为认真的撰写日志, 能够容易的阅读出 对应的流程
    • 日志可以关注下 关键字, 和 验收注释 里面的关键字对应
    • 可以用 关键字起头 => 扩展下: 越明显的单词越先出现

框架? 和框架耦合的代码要薄薄的

如果和框架过度耦合的代码很多, 那么测试就必须依赖框架的行为。
这时候想要就某个模块进行测试就比较难。例如 高度使用springboot框架的 @resource

编码工作步骤

  • 主要逻辑 用 日志填充。
  • 逐步更换为 具体的 IO调用。
  • 集成测试
  • 增加埋点
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无自动化测试系统设计方法论 的相关文章

  • 佛系解决 DataBinding 无法生成 Activity****Binding 类

    起初呢 xff0c ActivityMainBinding 该类始终无法生成 于是确定一下几个地方 build gradle android dataBinding enabled 61 true 布局文件名称 lt layout gt l
  • 宇宙最强pyqt5的安装(一)!!!

    前期准备工作 xff1a pythonIDE3 5以上版本开发环境pycharm编程知识熟悉python基本语法 在线安装pyqt5 安装sip C Users xxx gt pip install sip Collecting sip D
  • Win10下部署TensorFlow以及一些避坑小指南

    第一步 xff0c 下载Anaconda3 Anaconda官网目前最新的版本是Python3 6的 xff0c 想要历史版本的 xff0c 去下面的网站下载 xff1a https repo continuum io archive 我们
  • SpringBoot如何整合邮箱服务实现登录验证功能

    写在前面 这里主要讲解大致思路 详细代码 xff08 目前部分功能还在开发完善中 xff09 请见这里 如果个人用户还是想白嫖短信服务的话 xff0c 可以看看我的这篇博客 一 开启 POP3 SMTP服务 获得的授权码 这里以qq邮箱为例
  • 手动创建和挂载SWAP分区

    手动创建和挂载SWAP分区 在安装系统的时候很难决定多大的交换空间 xff0c 往往需要根据服务器实际负载 运行情况 以及未来可能应用来综合考虑 swap 分区的大小 xff0c 所以这里参考推荐最小 swap 大小更实际一些 xff1a
  • python中处理字符编码问题

    NO 1认识字符编码 GBK win默认中文字符编码是 xff1a GBK Unicode xff08 统一码 万国码 单一码 xff09 是计算机科学领域里的一项业界标准 xff0c 包括字符集 编码方案等 Unicode 是为了解决传统
  • python中if not的用法

    python中空的概念 xff1a 在python中 xff1a None False 0 空列表 空字典 空元祖 都相当于false coding utf 8 x 61 39 39 0 False None 1 x为真 故not x 为假
  • python实现文件上传下载的功能socket编程(基础版)

    环境介绍 xff1a 项目路径 xff1a 服务端执行过程 xff1a 客户端执行过程 xff1a 上传成功截图 xff1a 服务端代码 xff1a import socket file server 61 socket socket fi
  • -bash: java: command not found (Linux)

    原因 xff1a 安装jdk后没有配置环境变量 1 编辑配置文件 xff0c 配置环境变更 vim etc profile 在最下面添加 export JAVA HOME 61 usr local jdk8 export PATH 61 P
  • idea使用本地代码远程调试线上运行代码---windows环境

    场景 xff1a 今天在书上看了一个代码远程调试的方法 xff0c 自己本地验证了一下感觉十分不错 xff01 xff01 windows环境 xff1a 启动测试jar包 xff1a platform multiappcenter bas
  • anaconda:安装cuda和对应版本的cudnn

    复现别人论文的时候经常遇到不同的cuda版本 xff0c 可以使用anaconda创建虚拟环境 xff0c 并在不同的虚拟环境中配置对应的cuda版本 1 安装anaconda及虚拟环境使用 Anaconda多个python版本 xff08
  • Linux Server 种脚本自动执行

    在我们用python编写完脚本后 xff0c 时常需要定时运行我们的脚本 在这里 xff0c 我为大家介绍两种常用定时执行python脚本文件的方式 xff1a 第一种 xff1a crontab job 在Linux系统中可以通过设置cr
  • Tomcat9配置HTTP/2

    1 概述 Tomcat从Tomcat8的一些较新版本就支持HTTP 2了 xff0c Tomcat9直接支持 xff0c 本文首先讲述了相关HTTP 2的特性 xff0c 接着利用一个简单的开源工具mkcert生成证书并利用该证书配置HTT
  • SVN提交代码报错,怎么破?

    目录 SVN提交代码报错1 SVN提交被锁定 xff08 locked xff09 2 SVN提交已存在版本控制信息 xff08 is already under version control xff09 SVN提交代码报错 1 SVN提
  • Hive隐藏分割字符\001替换为可见字符

    Hive默认的分隔符是 001 xff0c 属于不可见字符 xff0c 这个字符在vi里是 A 一个文本0000 0 xff0c 直接cat内容如下 xff1a 320643204N2559613979 320828796N446323 3
  • 计算机毕业设计 HTML+CSS+JavaScript食品餐饮行业网站(10页)

    x1f380 精彩专栏推荐 x1f447 x1f3fb x1f447 x1f3fb x1f447 x1f3fb 作者简介 一个热爱把逻辑思维转变为代码的技术博主 x1f482 作者主页 主页 x1f680 获取更多优质源码 x1f393 w
  • 基于Redis实现的布隆过滤器

    一 RedisTemplate 1 首先将guava实现的本地的布隆过滤器的算法代码拿过来 span class token comment 算法过程 xff1a 1 首先需要k个hash函数 xff0c 每个函数可以把key散列成为1个整
  • Canal和Kafka整合方案——解决Canal写入Kafka并发消费问题

    文章目录 一 问题描述二 引入Kafka1 Canal整合Kafka及项目初步搭建2 整合Kafka后引出新问题 三 最终方案1 修改Canal配置文件2 修改项目代码3 整体架构4 结果验证 四 总结思考五 参考 一 问题描述 在使用Ca
  • 解决项目版本冲突——maven-shade插件使用

    文章目录 背景maven shade plugin介绍解决问题1 环境准备2 解决方案3 引入依赖 一些需要注意的坑maven shade plugins的其他使用 背景 当我们在maven项目中引入第三方组件时 xff0c 三方组件中的依

随机推荐