分层测试是一种软件测试方法,将测试活动按照层次结构进行组织和执行。每个层级都有其特定的测试目标和关注点。分层测试的主要目的是确保软件在不同层次上的功能和性能都符合预期,初衷是为了效率提升和质量保证。
提高测试效率和质量:分层测试将测试任务分解为多个阶段,使得测试人员可以更有针对性地进行测试,并在每个层级上发现和解决对应问题,降低修复问题成本,提高测试的效率和质量。
可以降低风险:通过分层测试,可以在早期阶段发现和解决问题,减少缺陷在后续阶段被发现的概率。这有助于降低项目风险,并提高软件的可靠性。
保证系统的稳定性:分层测试可以保证软件在不同层次上的功能和性能都能够正常工作。通过集成测试和系统测试,可以验证各个组件之间的交互和整体系统的稳定性。
支持持续集成和持续交付:分层测试可以与持续集成和持续交付流程结合,确保每个层级的测试都得到适当的覆盖和执行。这有助于确保软件在不断迭代和发布的过程中保持稳定和可靠。
从测试模型来说可以分为:单元测试、集成测试、系统测试
从测试手段方面来说说可以分为:手工测试、自动化测试
下面主要从公司目前正在进行的分层测试里面几个测试实现:单元测试、接口自动化、 UI 自动化、流量录制回放
定义和特点
单元测试是软件开发中的一种测试方法,用于验证单个模块(函数、方法、类)的正确性。
目前公司要求 Java 后端代码的单元测试覆盖率不低于80%,这个数据与公司、团队都有关系,但是我们既然要求了这个数据,怎么来衡量才是我们要做的,目前 Java 单元测试覆盖率有个很好的工具 Jacoco,下面为Jacoco主要介绍:
Jacoco有两种插桩方式,分别为 在线(on the fly)和离线(off line) 两种模式。两种方式比较中,on the fly模式在使用中更方便,所以一般使用on the fly模式。
• on the fly插桩:jvm通过 -javaagent参数指定特定的jar文件启动Instrumentation的代理程序,代理程序通过ClassLoader装载一个class前判断是否转换修改class文件,将统计代码插入class 测试覆盖率可以在JVM执行测试代码的过程中完成。
• off line插桩: 在测试前先对文件进行插桩,然后生成插桩的class或jar包 测试插过桩的class和jar包后,会生成动态覆盖信息到文件,最后统一对覆盖信息进行处理 并生成报告
Jacoco 主要的覆盖率统计指标:
• 行覆盖率:度量被测程序的每行代码是否被执行,判断标准行中是否至少有一个指令被执行。
• 类覆盖率:度量计算class类文件是否被执行。
• 分支覆盖率:度量if和switch语句的分支覆盖情况,计算一个方法里面的总分支数,确定执行和不执行的 分支数量。
• 方法覆盖率:度量被测程序的方法执行情况,是否执行取决于方法中是否有至少一个指令被执行。
• 指令覆盖:计数单元是单个java二进制代码指令,指令覆盖率提供了代码是否被执行的信息,度量完全 独立源码格式。
• 圈复杂度:在线性组合中,计算在一个方法里面所有可能路径的最小数目,缺失的复杂度同样表示测 试案例没有完全覆盖到这个模块。
Jacoco 的工作原理是通过在编译期间修改字节码,插入用于统计覆盖率的监控代码。在测试运行期间,Jacoco 会记录代码的执行情况,并生成覆盖率报告。
使用 Jacoco 进行覆盖率统计的步骤通常如下:
1. 集成 Jacoco 插件:将 Jacoco 插件集成到构建工具(如 Maven 、 Gradle、 Jenkins 、 Devops流水线中)中。
2. 配置 Jacoco 插件:在构建配置文件中配置 Jacoco 插件,指定要统计覆盖率的代码路径和报告输出路径。
3. 运行测试:执行测试用例,Jacoco 会记录代码的覆盖情况。
4. 生成报告:根据收集到的覆盖数据,Jacoco 会生成各种格式的报告,包括 HTML、XML 和 CSV 等。
公司一般都是将这些流程加到 Devops流程里面,开发提测到测试之前,会自动执行单元测试代码、代码扫描等步骤,生成单元测试覆盖率报告和代码扫描报告,有些项目还会作为提测卡点流程
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】
公司稍微测试团队规模 20+以上,都会开发各种测试平台化,尤其接口自动化平台,开发成本不高、收益高的。接口自动化主要有如下的优势:
• 提高效率:接口自动化相比手动测试可以节省大量的时间和人力资源。同时,自动化测试可以并行运行,提高测试的效率。
• 提高准确性:程序执行可以减少人为因素的干扰,避免了手动测试中的人为错误。自动化测试可以准确地执行测试用例,并且可以在每次执行时保持一致性。
• 提高测试覆盖率:可以快速执行大量的测试用例,覆盖更多的功能和场景。
• 提高可重复性:可以重复执行用例,用来保证软件在不同的环境和配置下的稳定性。这对于持续集成和持续交付非常重要。
• 提高反馈和修复效率:接口自动化测试可以在每次代码提交后立即运行,快速给出测试结果和反馈。这样开发团队可以及时发现和修复问题,提高软件交付的速度。
目前接口大部分用来冒烟测试、回归测试、线上接口监控等场景,冒烟测试可以快速反馈提测功能的可测性,提高测试效率;回归测试主要用来保证老功能的稳定性,是否被新版本影响到;线上监控尤其重要,及时发现线上服务、接口可用性、正确性,降低公司损失,提高用户满意度。下面是最近一次线上监控第一时间发现了问题,这就是我们测试价值的最好体现。
有了接口自动化,那为啥还需要 UI 自动化,而且接口自动化投入成本比较接口自动化大很多,因为UI自动化测试可以完全模拟用户的实际操作,全面测试应用程序的功能和用户界面,这也是分层测试的原因,这些我们可以看一下开发里面的 MVC 模型就更加清楚了,每一层都有各自存在的意思。下面是 UI 自动化相对接口自动化的优势:
• 完整性测试:UI自动化可以模拟用户的实际操作,全面地测试应用程序的各个功能模块和用户界面。它可以检查整个应用程序的流程和交互,保证用户界面的正确性和一致性。
• 兼容性测试:UI自动化可以在不同的操作系统、浏览器和设备上运行,测试应用程序在各种环境下的兼容性。这对于跨平台应用程序或移动应用程序非常重要。
目前这个我们就应用在接口自动化场景里面,主要是提高用例效率和测试覆盖率。目前主要落地下面方案:
• 通过nginx 日志、服务日志信息提取接口相关信息:主要在生产环境获取流量数据,在预发环境或者测试环境进行回放,目前实现的是 GET 请求
• 通过python 的 Mitmproxy 库进行代理拦截数据解析:这个主要和测试平台对接,一键生成自动化接口用例,提高编写用例效率
上述方案有明显的缺点,依赖日志记录、 http 协议,单服务,对于分布式的系统,长链路的不支持,目前市场上有JVM-Sandbox-Repeater、Goreplay等常用工具,但是这些工具也有各自的优缺点,对于工具来说,选择适合业务的工具才是好工具,对于业务能够提供价值,不要看谁热门,就选哪个。
有了分层测试,我们需要投入的成本肯定需要发生改变,做的事情前期会变多,对于团队、个人来说,要求都会提高,这样对于有些人来说是一个负担,比如我原来只需要最后通过业务进行测试,现在添加了接口测试、服务端测试、自动化测试等等,增加了他们的任务量,肯定不愿意。所以我们在做这之前,需要思考清楚一些事情。
• 团队成员质量意识:明确团队质量目标、建立质量导向的工具和流程、持续沟通和反馈、建立质量标杆并进行激励、质量文化建设
• 分层测试价值和意义:初衷是为了效率提升和质量保证,我们从这些方面去宣讲
• 对他们的好处:进行换位思考、提高自身能力、晋级加薪
持续学习和不断改进是团队成长和提高质量水平的关键。在软件测试领域,技术和工具的更新迭代非常快,团队成员需要持续学习新的测试技术、方法和工具,以跟上行业的发展。
同时,团队应该建立一种持续改进的文化,通过总结经验教训、回顾测试结果和反馈等方式,不断改进测试流程和方法。这样可以不断提高团队的质量意识和能力,进一步提升软件的质量。
在持续学习和不断改进的过程中,团队成员应该积极参与培训和知识分享,与同行交流经验,关注行业的最佳实践和新技术,以便不断提升自己的能力和水平。
总之,分层测试对于提高软件质量至关重要,而持续学习和不断改进则是保持团队竞争力和质量水平的关键。通过不断学习和改进,团队可以不断优化测试策略和方法,提高测试效果。
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。