银行软件测试:基于互联网金融平台的测试框架设计与分析

news2024/10/7 20:36:12

目前互联网金融火的一塌糊涂,基于互联网金融平台的自动化测试的项目也是如火如荼的进行。笔者手头上负责一个p2p项目的测试框架开发,因此如何设计一套有效的测试框架也成为工作所需和互相交流测试经验的必须。进入》软件测试社群学习交流

这个网站的后台主要是php和java, 也就是说,一些基础的服务,如充值提现,投标起息还款,是采用spring mvc的框架来写的,然后php来调用java的API,java平台通过intercepter将php 传递过来的http请求映射到对应的controller,controller再通过map映射到对应的服务和实现。

简单来说网站框架就类似如下:

网站一些基本的业务如注册登录,用户中心,投资、红包等等由用户前台触发php调用,一些活动、红包、礼品券等等由后台触发php调用,充值提现投资起息还款由java平台实现。

基于这样的平台的自动化测试框架选型的时候,笔者考虑过以下几种:

一种是采用基于selenium,集成thinkphp的框架来写。主要的原理就是利用selenium的firefox插件来录制,页面上的html元素和javascript脚本,然后做2次封装将这些录取到的元素和js封装成一个个的标准对象,保存到标准对象库,然后再添加一些数据库的数据准备和数据清理函数,以及数据库增删改查语句。

然后在引擎脚本中,引用和调用这些对象的方法,类似如edit,type等等,然后就在页面跳转的时候加上驭循环和一些判断,检测页面元素的值是否存在,或者是检测一些方法返回值,或者是采用断言来处理数据库查询到的结果和页面上返回的结果做匹对,可以在以selenium为基本的框架的时候,引入thinkPHP或者YII框架加快开发脚本速度。

另外一种是采用QTP方式来使用,其基本原理也和采用selenium原理大同小异,唯一的差别就是QTP提供了一个很好和强大的基本类库,以及一个很好的对象识别机制obeject Spy,QTP的基本类库里面基本什么都有,java,.net, web,乃至于dephi……

在识别对象的时候可以直接通过java里面的类来映射,也可以直接用web相关类库里面的类,甚至是windows平台类……QTP提供了多种识别方式以帮助定位对象,这样只用修改少量的对象属性,在回放脚本和编辑核心代码的时候,就可以起到事半功倍的效果,但是QTP也有缺点,就是对于Js的处理不方便,还有就是时刻需要启动QTP,而不能和一些开源测试框架特别是java开源项目,来实现自动部署测试用例和自动打包的集成。

ruby +watir 的原理和selenium也是类似,也是一种基于WEB GUI的自动化测试框架,笔者研究甚少,也就不多言了。

但是由于p2p行业的特性,这些基于web的自动化测试框架有很多不适合的地方,跟投资充值提现相关的这些相关的功能,比较在乎的不仅仅是页面上的一些元素功能的显示,更关心的是这个数据的正确性。

如果采用基于GUI的方式做自动化测试,个人感觉针对页面元素的识别和校验往往并不能反映数据正确性,而在处理页面元素异常的时候,也往往无法针对复杂业务逻辑和数据做较强的处理和效益,而且GUI是模拟人工处理,在执行效率上面,也是效果较差,而且如果出现某个页面元素无法识别或者异常,有可能中断整个页面的处理,在分析代码覆盖率的时候,基于web的方式也不是那么容易分析。

目前的这个项目,java向PHP平台提供的主要是基于HTTP协议的restful应用,之所以采用restful,而不用webservice来处理传输数据相关,是因为webservice即便是采用json而不是xml来处理传输数据,相比较restful也显得较重,json还需要加密解密解析、序列化什么的,而在 restful 里面直接就可以通过 http 请求对资源进行操作。

因此笔者觉得还是从controller层直接进行接口测试比较直接有效,又考虑到 spring框架里面提供了mock http请求的方法,而web UI的正确性相对于后台业务数据正确性的优先级就没有那么高了,而spring的测试框架里面虽然可以通过断言controller层返回的ModleAndView对象校验controller的正确性,即通过接口测试来效益结果,但是如果controller层后面的对象 太多的话,一旦出现问题也不便于排错。

因此基本的测试框架思路就是采用spring mvc提供的mock restful的工具类,然后引入断言机制和数据库处理,来逐个controller分析业务逻辑的正确性和数据正确性。而sping MVC本身也提供了一套测试框架,可以通过服务端测试和客户端测试分别来测试。

服务端测试在使用spring mvc测试框架之前,可能采取类似如下代码:

@Test

public void serverSample() {

MockHttpServletRequest request = new MockHttpServletRequest();

ModelAndView mav = new sampleController.function(parameters);

ModelAndViewAssert.assertViewName(mav, user/view);

ModelAndViewAssert.assertModelAttributeAvailable(mv, user);

}

}

采用服务器端测试后,可以采用如下两种方法:

standalone:

public class ServerTest {

@Autowired

private MockMvc mockMvc;

@Before

public void init() {

SampleController sample = new SampleController();

mockMvc = MockMvcBuilders.standaloneSetup(SampleController).build();

}

}

 集成:

public class ServerTest {

@Autowired

private WebApplicationContext wac;

private MockMvc mockMvc;

@Before

public void init() {

mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();

}

}

 测试:

@Test

public void testSample() throws Exception {

MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get(/user/1))

.andExpect(MockMvcResultMatchers.view().name(user/view))

.andExpect(MockMvcResultMatchers.model().attributeExists(user))

.andDo(MockMvcResultHandlers.print())

.andReturn();

Assert.assertNotNull(result.getModelAndView().getModel().get(user));

}

以上是采用spring MVC的服务端测试方法,至于客户端则有几种方法,

1.通过jetty启动容器,真实映射到controller层实现;

2.使用spring boot测试

3.使用mock service server测试,第三种方式基本上属于使用resttemplate来测试客户端比较好的方法;

即先通过MockRestServiceServer创建RestTemplate的Mock Server,然后添加客户端请求断言,判断客户端请求的断言是否正确,3、添加服务端响应,检查服务器端相应是否正确。

客户端相关代码在网络上也有很多资源,因此也就不再赘叙,这里主要是提供一种基于spring mvc框架和基于restful应用如何测试controller层的思想。

最后:

可以到我的个人号:atstudy-js,免费领取一份10G软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!其中包括了有基础知识、Linux必备、Mysql数据库、抓包工具、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试等。

这些测试资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

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

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

相关文章

科研绘图配色方案

科研绘图配色方案 在撰写论文的时候,美观,大气,上档次的图表能够很好地给自己的论文加分。但是在绘制图表的时候往往会面临色彩搭配的问题,选择合适的色彩搭配能够有效地展示自己的方法,但是色彩搭配选择不当的话往往…

Go学习之路:并发(DAY 3)

文章目录前引并发1、Go协程/简单创建2.1、信道/简单创建信道2.2、信道/限制了大小的信道2.3、信道/range close信道3.1、Select语句前引 听了会歌 一看了下今天已经下午2:50了 我们学校也好像开始放学生们回家了 那今天最后就愉快愉快的把我们的 A Tour Of Go 最后…

申报高新技术企业需要哪些条件?

高新技术企业是在国家重点支持的高新技术领域中持续进行科研开发和技术成果转化,形成企业核心自主知识产权,并以此为基础开展生产经营活动的企业。成为高新技术企业以后会减免40%的所得税。 申报高新技术企业需要哪些条件? 第一点&#xff…

回收站不见了怎么恢复?一招把回收站的图标找回来!

有时我们会有这样的烦恼,明明回收站里面的东西还没被删除或者是还在回收站里面,但是回收站的图标就是看不到了。其实,这正是我们所说的电脑回收站不显示图标导致。因为我们关闭回收站位置以后,电脑系统都会自动把回收站置为“已删…

TPM零知识学习四 —— tpm2-tss源码安装

tpm2-tss包的的安装方法参考: tpm2-tss/INSTALL.md at master tpm2-software/tpm2-tss GitHub 1. 源码下载 $ git clone https://github.com/tpm2-software/tpm2-tss.git 下载完成后,源码内容如下所示: $ ls afl-fuzzing CHANGELOG.m…

基于ssm的小区物业管理系统

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

mac下安装nodejs跟vscode

1.打开官网 Node.js 2.点击下载 3.下载完成,根据提示下一步安装,安装完成后,在vscode中新建一个js文件,执行node test.js

[附源码]计算机毕业设计ssm新能源电动汽车充电桩服务APPSpringboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

opencv c++ 图像噪声及去噪

1、噪声类型及生成 1.1、类型 高斯噪声、椒盐噪声、泊松噪声、乘性噪声,等。 具体解释参考:(31条消息) 图像噪声简介_yeler082的博客-CSDN博客_图像噪声 高斯噪声 泊松噪声 乘性噪声 …

AWS SAP-C02 考试指南

Hello大家好,欢迎来到AWS解决方案架构师professional中文视频培训课程,我是讲师沉默恶魔。 本课时的内容是SAP-C02考试指南,我将介绍有关SAP-C02考试的详细信息。 SAP-C02是解决方案架构师专业级认证的最新版本的考试,目前也只能…

空域图像增强-图像滤波处理

3.图像滤波处理。自选一张图片,完成以下图像处理:①给图像分别添加随机噪声和椒盐噪声;②采用不同的平滑滤波模板进行滤波对比(不同模板、不同尺寸);③采用中值滤波对图像进行滤波对比;④对添加…

GEE开发之Modis_NPP数据分析和获取

GEE开发之Modis_NPP数据分析和获取1.NPP2.MOD系列和MYD系列区别3.MOD17A3H_v006(500m/1年)4.MOD17A3HGF_v006(500m/1年)5.MOD17A3HGF_v061(500m/1年)6.MYD17A3H_v006(500m/1年)6.1 MYD17A3H下的指数6.2 遥感影像查看7.MYD17A3HGF_v061(500m/1年)8.MYD17A3HGF_v006(500m/1年)9.N…

行业应用之无限可能,就在亚马逊云科技re:Invent

在2022亚马逊云科技re:Invent全球大会Adam Selipsky“如何借助云的力量,在未知领域抓住机遇并茁壮成长”的主题演讲中,除了阐述主要的产品升级以外,亚马逊云科技还致力于打造面向特定行业或者特定应用场景的解决方案,以帮助客户快…

【Mongoose应用和文件上传】一.Express框架访问MongDB数据库;二.node实现文件上传

目录 一.Express框架访问MongDB数据库 1.目的: (1)mongoose模块的使用 (2)学会代码的封装:dao层、service层、接口层 (3)MVC设计思想:M(Model&#xff0…

5.RabbitMQ高级特性

5.RabbitMQ高级特性 为什么不是RabbitMQ的事务? 这是从官网直接翻译过来的:网络可能以不太明显的方式出现故障,而且检测某些故障需要时间。因此,向套接字编写协议帧或一组帧(例如发布的消息)的客户端不能假定消息已经到达服务器…

【库存控制】基于蜜蜂算法优化库存控制附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

如何将dwg文件转成kml文件

第一步: 在CAD中将DWG另存为 DXF,如下: 注意:(中文乱码)为了打开的中文不出现乱码,保存DXF文件请选择如下的选项 第二步: 下载安装Bigemap GIS Office download.bigemap.com/bmset…

12.01 M4-UART-IT实验

1.使用CORTEX-M4核,实验中断实验和串口实验结合--->上传到CSDN 按键触发时,LED灯状态取反,并且在串口工具打印一句话 KEY1按键按下,LED1状态取反,串口工具打印key1 down!!!! 主要代码gpio.c void HAL_GPI…

C++ 语言学习 day14 复习 (6)

1.stack / queue(栈&#xff0c;队列) stack 构造函数 stack<int> v; 入栈 v.push(i); 出栈 v.pop(); 是否为空 v.empty() queue 构造函数 queue<int> v; 入队 v.push(i); 出队 v.…

下载axios时出现很多npm ERR错误:npm ERR! code ERESOLVEnpm ERR! ERESOLVE could not resolve

出现的下载错误&#xff1a; npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolvenpm ERR! npm ERR! while resolving: vue/eslint-config-standard6.1.0npm ERR! Found: eslint-plugin-vue8.7.1 npm ERR! node_modules/eslint-plugin-vue npm ERR!dev eslint-plugin-…