ERP平台的自动化测试技术实践

源宝导读:ERP是“业务密集”的大型复杂软件,而且对于业务逻辑与数据的精确度要求几乎是零容忍,其质量保障的挑战很大。本文将介绍ERP平台通过自动化测试保障质量的技术实践。


一、自动化测试概念介绍

测试金字塔原理

1.1、测试的成本

    UI自动化依赖于用户界面,用户界面发生变化,可能需要调整大量用例,用例维护成本较高;在用户界面的测试中发现缺陷,修复缺陷的成本也是远远高于通过单元测试的成本。单元测试不依赖于用户界面,维护成本较低;单元测试发现的缺陷可以尽早暴露缺陷,修复成本相对较低。

1.2、测试的效率

    UI自动化测试需要准备数据,需要可以看到系统界面,还需要预先执行一些诸如登陆账户之类的操作,才能对测试用例进行验证,所以花费时间比较长,得到的执行结果也比较慢,反馈周期长。而单元测试能很快地验证很小的功能或者方法是否运行正确。而且单元测试运行时间短,反馈也及时。

1.3、缺陷定位的难易

    单元测试如果失败了,测试人员很容易知道被测试的特定功能或者方法不正确。而如果是用户界面的缺陷,测试人员就需要花费更多的时间来进行排查,确定出现问题的功能模块,最后开发分析再进一步地发现需要修复的功能和方法。

总述:

  • 越往上,越接近QA、业务/最终用户,越往下,越接近开发;

  • 越往上,测试执行越慢,越往下,测试执行越快;

  • 越往上,测试成本越高(越耗时,失败时的信息越模糊,越难跟踪),越往下,测试成本越低。


二、自动化测试如何做

    按照测试金字塔模型,我们得知越向下回报率越高,所以应该使用大量的单元测试和全面的接口测试来覆盖产品提供的基本逻辑和功能,使用少量的集成(UI)测试来进行前端界面的功能验证。

    业内最佳实践如Google,Google的自动化分层投入占比是:单元测试(Unit):占比70%;接口测试(Service):占比20%;集成测试(UI):占比10%。

概述:

  • 单元测试:尽可能编写单元测试覆盖产品的功能逻辑,尽可能增加单元测试用例覆盖率;

  • 接口测试:首先保证所有公开接口正常场景、异常场景均覆盖,再逐步覆盖产品私有的核心接口用例;

  • UI自动化测试:减少重复操作,将固化的回归业务场景梳理,转化为UI自动化用例。


三、单元测试用例设计

3.1、基于方法说明编写单元测试用例

方法示例场景:参数省略

参数不省略:

参数取值场景:

参数类型不匹配场景:

3.2、基于测试业务角度

方法实现功能场景:

测试业务输入等价类划分:输入与之前相同值

测试业务输入等价类划分:空值

测试业务输入等价类划分:空格

测试业务输入等价类划分:首尾空格

测试业务输入等价类划分:较长内容(设置了最大长度)

还有其他场景划分的方法:

  • 测试业务输入等价类划分:较长内容(未设置最大长度);

  • 测试业务输入等价类划分:特殊符号测试;

  • 测试业务输入边界值分析:输入内容刚好等于最大长度;

  • (测试业务输入边界值分析:输入内容比最大长度小1;

  • 测试业务输入边界值分析:输入内容比最大长度大1;

  • 测试业务分析:只读模式赋值。

3.3、基于开发代码编写单元测试用例

    单元测试关注的是代码的实现与逻辑。单元测试是最基本的测试,也是测试中的最小单元,它的对象是函数对象,也可以包含输入输出,针对的是函数功能或者函数内部的代码逻辑。

单元测试的覆盖种类:

  • 语句覆盖:语句覆盖就是设计若干个测试用例,运行被测试程序,使得每一条可执行语句至少执行一次;

  • 判定覆盖(也叫分支覆盖):设计若干个测试用例,运行所测程序,使程序中每个判断的取真分支和取假分支至少执行一次;

  • 条件覆盖:设计足够的测试用例,运行所测程序,使程序中每个判断的每个条件的每个可能取值至少执行一次;

  • 判定——条件覆盖:设计足够的测试用例,运行所测程序,使程序中每个判断的每个条件的每个可能取值至少执行一次,并且每个可能的判断结果也至少执行一次;

  • 条件组合测试:设计足够的测试用例,运行所测程序,使程序中每个判断的所有条件取值组合至少执行一次;

  • 路径测试:设计足够的测试用例,运行所测程序,要覆盖程序中所有可能的路径。

代码示例:

null值测试:

undefined值测试:

tooltip测试:

四、UI自动化测试实践

4.1、测试数据准备

  1. 测试数据库准备;

  2. 数据脚本准备(如用户登录初始化脚本 );

  3. 自动化环境初始化配置。

基本信息配置:

数据库信息配置:

登录用户配置 :

4.2、测试用例页面规划

  1. 规划要做UI自动化的页面:

    1. 梳理固化的回归业务场景;

    2. 规划纳入UI自动化的用例页面(对于平台 ,沉淀平台组件、控件、平台特性的用例页面);

  2. 根据选择页面录制自动化脚本。

4.3、编写测试用例

1、规划设置公共片段;

2、基于业务场景操作组合片断设计测试用例:

4.4、测试计划配置及执行

1、选择用例添加标签;

2、配置定时执行计划;

3、配置执行标签、不执行标签;

4、设置通知邮箱:

4.5、UI自动化与研发协同平台打通

  • jenkins与云测平台关联:

    • jenkins配置HashCode、应用、项目名称、分支名称参数;

  • 云测平台与Rdc关联:

    • 云测平台设置与Rdc项目、应用、分支名称一致(必须保证:云测平台、jenkins接口、RDC上三者一致)  ;

  • Rdc触发自动化阈值控制:

    • 分支流水线测试通过时自动收集自动化结果,并判断自动化质量阈值。

五、关于TDD的学习与思考

5.1、什么是TDD

    测试驱动开发(TDD)是敏捷中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。
    TDD的基本思路就是通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。

5.2、TDD的目的

    TDD的目的不仅仅是测试软件产品,保证代码质量仅仅是其中一部分,而且是在开发过程中帮助客户和程序员去除模棱两可的需求。TDD首先考虑使用需求(对象、功能、过程、接口等),主要是编写测试用例框架对功能的过程和接口进行设计,而测试框架可以持续进行验证。

5.3、哪些可以做TDD

    单元测试、接口测试可以使用TDD。

5.4、实施TDD需要什么

  1. 接口、事件、方法文档输出(包括方法使用说明、方法参数、方法调用示例、方法返回结果);

  2. TDD流程规范;

  3. 测试人员具备编码能力,可以分析功能逻辑编写测试代码;

  4. 足够的时间。

5.5、TDD可用于目前项目么

  1. 每次需求新增接口不多,接口文档输出较容易;

  2. 接口测试相较于单元测试,对测试人员编码能力要求较低;

  3. 设计接口测试用例时间上不会额外占据太多时间。

5.6、结论

    综合考虑成本、人员能力等因素,接口测试TDD可优先考虑在迭代中执行。

------ END ------

作者简介

邱同学: 测试工程师,目前负责ERP建模平台的测试工作。

也许您还想看

接口测试用例设计思路

使用MiddleMan进行接口自动化实践

研发协同平台持续集成实践

链路追踪在ERP系统中的应用实践

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Spring5]IOC容器_Bean管理XML方式_注入集合类型属性

xml注入集合属性 1.注入数组类型属性 2.注入List集合类型属性 3.注入Map集合类型属性 (1)创建类,定义数组,list,map,set类型属性,生成对应set方法 package com.atguigu.collectiontype;imp…

Logging with ElasticSearch, Kibana, ASP.NET Core and Docker

“好久不见,前两周经历了人生第一次"伪牛市",基金和股市大起大落,更加坚信“你永远赚不到超出你认知范围之外的钱,除非靠着运气”,老韭菜诚不欺我也。当能力与野心不匹配,只能多看书,收割那些不求…

[Spring5]IOC容器_Bean管理_工厂Bean

IOC操作Bean管理(FactoryBean) 1.Spring有两种类型bean,一种普通bean,另外一种工厂bean(FactoryBean) 2.普通bean:在配置文件中定义bean类型就是返回类型 3.工厂bean:在配置文件定…

Redis 6.0 新特性 ACL 介绍

Redis 6.0 新特性 ACL 介绍Intro在 Redis 6.0 中引入了 ACL(Access Control List) 的支持,在此前的版本中 Redis 中是没有用户的概念的,其实没有办法很好的控制权限,redis 6.0 开始支持用户,可以给每个用户分配不同的权…

[Spring5]IOC容器_Bean管理_bean的作用域和bean的生命周期

IOC操作Bean管理(bean作用域) 1.在Spring里面,设置创建bean实例是单实例还是多实例 2.在Spring里面,默认情况下,bean是单实例对象 package com.atguigu.spring.test;import com.atguigu.spring.collectiontype.Book…

手动造轮子——为Ocelot集成Nacos注册中心

前言近期在看博客的时候或者在群里看聊天的时候,发现很多都提到了Ocelot网关的问题。我之前也研究过一点,网关本身是一种通用的解决方案,主要的工作就是拦截请求统一处理,比如认证、授权、熔断、限流、注册发现、负载均衡等等。随…

程序员修神之路--简约而不简单的分布式通信基石

点击“蓝字”关注,领取架构书籍菜菜哥,请教一个问题呗面试又被卡住了?还是你了解我呀,tcp协议面向连接是怎么回事呢?这个说详细起来,那本好几百页的tcp协议的书籍你倒是可以看看分布式系统可以总结为是处于…

[Spring5]IOC容器_Bean管理注解方式_创建对象

IOC操心Bean管理(基于注解方式) 1.什么是注解 (1)注解是代码特殊标记,格式:注解名称(属性名称属性值,属性名称属性值…) (2)使用注解,注解作用在类上面,方…

一个有趣的问题, 你知道SqlDataAdapter中的Fill是怎么实现的吗

一:背景1. 讲故事最近因为各方面原因换了一份工作,去了一家主营物联柜的公司,有意思的是物联柜上的终端是用 wpf 写的,代码也算是年久失修,感觉技术债还是蛮重的,前几天在调试一个bug的时候,看到…

.Net Core in Docker极简入门(上篇)

点击上方蓝字"小黑在哪里"关注我吧环境准备Docker基础概念Docker基础命令Docker命令实践构建Docker镜像Dockerfilebulid & run前言Docker 是一个开源的应用容器引擎,它十分火热,如今几乎成为了后端开发人员必须掌握的一项技能。即使你在生…

[Spring5]AOP底层原理

AOP底层原理 1.AOP底层使用动态代理 (1)有两种情况动态代理 第一种 有接口的情况,使用JDK动态代理 a.创建接口实现类代理对象,增强类的方法 第二种 没有接口的情况,使用CGLIB动态代理 a.创建子类的代理对象&#…

Hangfire定时触发作业,好像很简单?

【导读】本节我们继续稍微详细讲讲在我没有详细了解源码的前提下来探讨通过Hangfire定时触发作业有哪些需要注意的事项间隔时间内执行作业举个栗子,每隔10秒监控系统CPU,若CPU飙高(根据实际业务定义百分比)则在控制台打印输出&…

五分钟快速搭建Serverless免费邮件服务

1. 引言本文将带你快速基于 Azure Function 和 SendGrid 构建一个免费的Serverless(无服务器)的邮件发送服务,让你感受下Serverless的强大之处。该服务可以每月免费发送2,5000封,这是完全白嫖啊,感兴趣的,赶…

[Swagger2]SpringBoot集成Swagger

SpringBoot集成Swagger 引入依赖 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</…

IdentityServer4 4.x版本 配置Scope的正确姿势

点击上方蓝字"小黑在哪里"关注我吧前言IdentityServer4 是为ASP.NET Core系列量身打造的一款基于 OpenID Connect 和 OAuth 2.0 认证的框架IdentityServer4官方文档&#xff1a;https://identityserver4.readthedocs.io/看这篇文章前默认你对IdentityServer4 已经有一…

[Swagger2]配置Swagger

配置Swaggr 1、Swagger实例Bean是Docket&#xff0c;所以通过配置Docket实例来配置Swaggger。 package com.xxxx.swagger2.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.doc…

.Net Core微服务入门全纪录(完结)——Ocelot与Swagger

点击上方蓝字"小黑在哪里"关注我吧前言上一篇【.Net Core微服务入门全纪录&#xff08;八&#xff09;——Docker Compose与容器网络】完成了docker-compose.yml文件的编写&#xff0c;最后使用docker compose的一个up指令即可在docker中运行整个复杂的环境。本篇简单…

[Swagger2]Swaggr配置扫描接口配置Swagger开关

Swagger配置扫描接口 1、构建Docket时通过select()方法配置怎么扫描接口。 Bean public Docket docket() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()// 通过.select()方法&#xff0c;去配置扫描接口,RequestHandlerSelectors配置如何扫描…

最全.Net学习资料库上线,今日可免费下载各类资源!(附百度云链接)

送资料送资料1 适合学习者&#xff1a;0-10年.Net开发人员2 更新时间&#xff1a;2020年7月24日3 在哪领取&#xff1a;文末扫码免费领取4 包含课程&#xff1a;零基础就业必修/高级开发必修/架构师必修5 配套资料&#xff1a;视频配套源码/最新面试题合集/最新技术书/安装包你…

[Swagger2]拓展:其他皮肤

拓展&#xff1a;其他皮肤 我们可以导入不同的包实现不同的皮肤定义&#xff1a; 1、默认的 访问 http://localhost:8080/swagger-ui.html <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><ve…