当前位置: 首页 > news >正文

前台自动化测试:基于敏捷测试驱动开发(TDD)的自动化测试原理

一、自动化测试概述

自动化测试主要应用到查询结果的自动化比较,把借助自动化把相同的数据库数据的相同查询条件查询到的结果同理想的数据进行自动化比较或者同已经保障的数据进行不同版本的自动化比较,减轻人为的重复验证测试。多用户并发操作需要自动化模拟来保障大量用户的执行操作,减少对影响资源的依赖。自动化在迭代1开始进行搭建,在迭代2能够具备自动化能力。

二、测试目的

本文档主要描述NPB的自动化测试粒度、原理及操作流程等。为以后开发人员开发测试用例提供指导。基于敏捷测试驱动开发(TDD)的原理,自动化测试主要达到以下三个主要目的:

1、测试驱动开发。先写出针对测试用例,然后进行功能模块开发。该方式可能加大了开发人员在开发前期的工作量,但是就总体来说,此方式会驱动开发人员更进一步熟悉业务需求,提早预知开发过程中可能出现的各种情况,为后期进入编码测试提供便利。

2、减少或者避免由于模块代码更改,功能扩展等因素带来的重复测试工作。

3、指导开发人员能够更好的对代码进行架构设计,为以后的测试用例的书写,功能的扩展提供方便。

三、测试对象

NPB项目前台部分的测试对象是业务层(service层),测试粒度为service层类的所有的或者主要的核心方法,铺盖粒度为:语句覆盖(即开发人员提供的测试用例要能够走通每一行代码)。

四、测试环境

4.1外部环境

测试环境指的是测试用例的运行环境。测试环境与开发环境共用一个平台。开发代码和测试用例代码分属于不同的source file中,测试类与被测试类的包名称相同,类名称不同,这样使得测试类和被测试类的.class文件位于相同的目录中,测试类可以任意调用与测试相关的开发代码而不会产生耦合或者依赖关系。借助测试工具(如Junit)进行自动化测试。

4.2 测试工具

NPB 拟采用 Junit 工具进行测试。Junit 是一种单元测试工具,能够实现自动测试,对于一个要测试的方法,我们输入其所需要的参数(自己构造),然后查看其返回是否符合我们的要求,用 Assert 的方法来比较返回的结果是否正确。

五、测试操作

测试操作主要包括流程图和操作描述两部分。以图文的方式介绍一个测试流程。

5.1流程图
在这里插入图片描述

5.2 操作描述

目录结构:

首先针对 service 层的每个类,写一个 Junit 测试类,测试类要继承 Junit 的 TestCase类,测试类位于独立的测试包中。目录结构如下图所示:

在这里插入图片描述

针对 service 层指定类的每一个方法写一个测试方法或者多个方法对应一个测试方法。此方法要提供能够覆盖所有方法语句的入口参数,同时针对每一组入口参数要列出理想输出,然后用断言的方法来比较输入是否与预想相符。

测试模块:

NPB 项目会基于系统的核心模块及实际开发情况进行测试,如系统维护(system management)等。

六、测试原理用例示例

下面以简单示例的形式展现自动测试的原理:

现有一 service 层类 UserService,其包含多个方法如:insertUser()、updateUser()和QueryUserList()等 。

首先我们先了解下基于 iBATIS 持久层开发此方法的返回值问题,insert 操作会放回插入对象的 ID。而 update 操作和 delete 操作会返回更新或者删除操作的条数。

测试用例的命名原则:

测试类的命名以被测试类名后添加 Test 命名。

基于 junit3.8 的测试方法要求是 public 的,无返回值(void),并且每个测试方法的名字以 test 开头。


              【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通

二、接口自动化项目实战

三、Web自动化项目实战


四、App自动化项目实战

五、一线大厂简历


六、测试开发DevOps体系

七、常用自动化测试工具


八、JMeter性能测试

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!

 

http://www.lryc.cn/news/120281.html

相关文章:

  • 基于SLAM的规划算法仿真复现|SLAM|智能规划
  • sqlite3多线程操作问题
  • ACCESS数据库增删改查
  • 动捕系统mockup_optitrack替换为VRPN传递信息
  • 【服务平台】Rancher运行和管理Docker和Kubernetes,提供管理生产中的容器所需的整个软件堆栈
  • 二叉树的完全性检验
  • 激活函数总结(六):ReLU系列激活函数补充(RReLU、CELU、ReLU6)
  • tp5中的事务处理
  • 论文总结《Towards Evaluating the Robustness of Neural Networks(CW)》
  • 2024重庆邮电大学软件工程809题库(带答案)
  • 三种目标检测方法(基于传统数字图像处理的识别方法、基于传统机器学习的识别方法和基于深度学习的识别方法)的区别
  • 制造业为什么要建设数字化供应链
  • webrtc Thread 和 TaskQueue 的 应用和思考
  • 无涯教程-Perl - pos函数
  • 【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio构建Java、Python项目
  • Java的Class类:每一个类都对应着一个Class对象
  • JavaScript预编译机制
  • 【ARM 嵌入式 编译系列 4.1 -- GCC 编译属性 likely与unlikely 学习】
  • 《算法竞赛·快冲300题》每日一题:“造电梯”
  • NSS [MoeCTF 2022]baby_file
  • 喜报!诚恒科技与赛时达科技达成BI金蝶云星空项目合作
  • Vscode python调试和运行环境设置
  • lua中执行luci.sys.call、luci.sys.exec、os.execute的区别
  • Python-OpenCV中的图像处理-模板匹配
  • 模拟队列(c++题解)
  • Redis_哨兵模式
  • Mysql中如果建立了索引,索引所占的空间随着数据量增长而变大,这样无论写入还是查询,性能都会有所下降,怎么处理?
  • MySQL 约束
  • unity实现角色体力功能【体力条+体力计算】
  • 【深度学习所有损失函数】在 NumPy、TensorFlow 和 PyTorch 中实现(1/2)