​软件测试之“支付功能”测试

news2024/12/22 16:11:06

01

测试思维

要分析测试点之前,我们先来梳理一下测试思维。总结来说,任何事物的测试思路都可以总结如下:

第一步:梳理产品的核心业务流程:明白这是个什么项目,实现了什么业务,以及是怎么实现的?

这个步骤一般是参考公司的需求文档来的,如果产品提供需求文档的同时提供了业务流程图,可以遵循流程图来梳理;如果产品没有提供流程图,就需要测试人员根据需求的理解自己画出流程图,达到梳理业务的目的。

第二步:根据流程进行模块细分,然后针对每个功能模块进行详细的测试点设计和提取。

这个单个功能的测试点提取要覆盖以下几个方面:

正常功能验证:优先覆盖正常的业务流程和功能验证,这其实也是单个功能的冒烟测试。冒烟测试先行,如果不通过,可以直接停止测试等开发修复后继续测试。


异常功能验证:为了更加贴近用户的使用产品,我们也要验证各种异常的场景,故意操作导致出错,检查系统的反馈和提示,保证用户操作失误的情况能够得到系统的友好指示。

因为有很多地方的操作都有可能会导致系统异常和报错,所以为了不漏测,我们需要找出所有可能导致异常的输入项和选项。所以就到了第三步:

第三步:针对具体功能,寻找每个输入项和步骤,从以下三个角度来分析测试点 。

  1. 长度,数据类型,必填项,重复

  2. 需求的约束条件 + 隐形需求

  3. 功能之间的交互

这其中就需要用到一些用例的具体设计方法了,比如场景法,等价类法,边界值法,错误推测法等等

第四步:考虑非功能测试点,包括界面、易用性、兼容性、安全性、性能压力

02

支付功能的测试点

基于上面的测试思路,我们可以分析得出“支付功能”测试点如下:

一、梳理支付的业务流程如下

点击支付---> 选择支付方式 ---> 确认金额---> 输入密码 ---> 成功支付

完成这个流程测试,也就是完成了项目的冒烟测试!然后需要测试针对流程中的每个阶段和步骤,具体分析可能导致异常的测试点,所以我们按阶段和输入项来进行划分如下:

非现金支付时代,非现金支付已经成为了生活不可或缺的一部分,我们只需要一台手机便可走遍全国各地(前提是支付宝,微信有钱<00>),那么作为测试人员,支付测试也是非常重要的一环,那么下面我就结合一下我的工作中遇到的一些问题,总结一下常见的支付测试:

一:支付的分类:

首先,根据不同维度,通常我们可以把支付分为如下图所示的种类:

其次,一般来讲,线上支付分为两种消费模式。一种是直接支付金额,如淘宝,京东等购物网站,或是360云盘,视频会员等这种会员服务;另一种是充值购买金豆之类的虚拟币,在网站中使用虚拟币进行消费,比如游戏平台、花椒等产品!

二:功能测试

接下来就是测试方面的工作了,首先进行的是功能测试,那么我将边界值、等类划分、错误推测,因果图等各种测试方法相结合,整理出来了一套相对全面的测试案例,对支付功能进行测试,从而确保整个支付流程和涉及到的支付流程在任何情况下都能使用。

三:接口测试

明确整个支付流程所需要调用的接口,分清楚商家和第三方平台的接口以及参数的请求方式,包括对接口特定参数的加密,使用异常单号模拟支付,对服务端的检验等等

四:安全测试

支付都会涉及到金额,那么就需要考虑安全测试这个方面,支付请求的伪造,金额的恶意篡改,恶意模拟第三方接口来调用商家接口等,均是我们需要考虑清楚的问题

五:支付流程:如下图

六:测试点

支付流程测试点

1、付款金额和应付金额是否一致,(比如:扫描的支付二维码,和显示的应支付金额是否一致)。支付还是要走整个支付流程才行,从确认订单到最后的支付成功,任何一步都有可能有问题。

2、同一种支付方式,不同的支付入口(比如:如下图所示,支付宝有两个支付入口。即可通过扫描二维码支付,也可以通过支付宝网页支付。在测试过程中,两个入口都要覆盖到。

3、支付成功后,产品购买是否成功

  (比如会员服务产品,购买后会员到期时间是否正常延迟;比如购买商品,支付成功后,订单状态是否更改,商品种类和数量是否正确等等)

4、支付成功后,用户的金额是否扣除成功

支付金额测试点

1.正常金额支付

2.金额的最小值:0.01

3.无意义的值:0元

4.最大金额:设置支付的最大金额

5.银行卡或微信等,设置每日最大消费金额或者单笔最大消费金额

6.银行卡或微信余额不足时支付

支付流程测试点

1.正常完成支付流程

2.调起订单后,取消订单

3.支付中断后,继续支付

4.支付中断后结束支付

5.单笔订单单笔支付

6.多订单合并支付

7.持续点击支付,是否会出现多次购买

支付方式测试点

1.支付宝支付

2.支付宝网页支付

3.微信支付

4.银行卡支付

优惠券或折扣(有一定的优惠)

支付中使用优惠券/折扣,应付金额和实际支付金额是否正确

优惠券/折扣是否是必选,是否可以不选择折扣

支付订单退款完成后,优惠券/折扣是否还能使用

坑一:页面显示的应付金额通过接口vip.product返回了,前端显示出来应付金额。但是,支付的二维码是通过接口vip.getPayUrl这个接口返回的,结果二维码扫出来的值和显示的应付金额不一样呀!!!最后问题是在于,vip.getPayUrl中取的是服务器缓存,导致二维码显示的金额跟前端展示的应付金额不一致。所以测试支付还是要走整个支付流程才行,从确认订单到最后的支付成功,任何一步都有可能有问题。

坑二:通过支付宝网站支付,支付成功后,页面没有跳转回原服务套餐网页。最后的原因是服务配置的return_url不正确,导致支付后,没有跳回原页面。如果测试用例覆盖不到这种场景,那么将会造成非常严重的线上事故。

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

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

相关文章

电动汽车电池换电站选址与定容(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f389;作者研究&#xff1a;&#x1f3c5;&#x1f3c5;&#x1f3c5;主要研究方向是电力系统和智能算法、机器学…

python学习笔记(13)---(IO对象序列化)面向对象

目录 面向对象---第十一章 IO对象序列化 1.IO流&#xff08;IO stream&#xff09; 2.open&#xff08;&#xff09;方法 3.写入方法&#xff1a;write() 4.对象序列化 面向对象---第十一章 IO对象序列化 1.IO流&#xff08;IO stream&#xff09; &#xff08;1&…

编译原理实验三:算符优先分析算法的设计与实现

实验三 算符优先分析算法的设计与实现 一、 实验目的 根据算符优先分析法&#xff0c;对表达式进行语法分析&#xff0c;使其能够判断一个表达式是否正确。通过算符优先分析方法的实现&#xff0c;加深对自下而上语法分析方法的理解。 二、 实验要求 1、输入文法。可以是如下…

Java 图片上传后为什么会自动旋转90度?

问题&#xff1a; 用户反馈上传后的图片方向不对&#xff0c;起初怀疑是本身图片方向有问题&#xff0c;但是用windows图片查看器打开图片方向是"正常"显示的? 分析&#xff1a; windows默认的图片查看器已经帮我们自动旋转展示了&#xff0c;我们在手机横拍或者扫…

【Vue核心】7.事件处理

事件处理的基本使用 绑定监听 v-on:xxx“fun” xxx“fun” xxx“fun(参数)” 默认事件形参: event 隐含属性对象: $event 绑定方法说明 使用v-on:xxx 或xxx绑定事件,其中xxx是事件名;事件的回调需要配置在methods对象中,最终公在vm上;methods中配置的函数,不要用箭头函…

python 调试IGH库

如何通过python来调试IGH的库呢&#xff1f; 可以使用如下的代码&#xff0c;测试请求主站&#xff0c;把主站变成激活状态。其他的函数也可以类似的一步一步调用。 结果如下&#xff1a; from ctypes import * ighCDLL("/home/cheni/lichuan_bujin/libethercat.so&quo…

开传奇大概需要什么条件

《热血传奇》是盛趣游戏2001年推出的一款大型多人在线角色扮演游戏&#xff08;MMORPG&#xff09;。 该游戏具有战士、魔法师和道士三种职业&#xff0c;所有情节的发生、经验值取得以及各种打猎、采矿等活动都是在网络上即时发生。 《热血传奇》包括白天、黑夜、贸易、物品等…

c++多模块化划分算法MMM(单链接、全链接、均链接)

文章目录题目1c代码一、实验目的二、实验描述3.1 题目13.1.1 单链接3.1.2 全链接3.1.3 均值链接3.1.4 划分结果统计&#xff1a;3.2 题目23.2.1 单链接3.2.2 全链接3.2.3 均值链接3.2.4 划分结果统计&#xff1a;题目2c代码github地址 代码地址 题目1c代码 #include<cstdi…

关于Servlet编程(2)

1.常用类的关键API介绍 Servlet中常见的类有三个.介绍过了HttpServlet类.我们再来看看另外两个. HttpServletRequest 这个类对应到发送的HTTP请求. 方法描述String getProtocol()返回请求协议的名称和版本String getMethod()返回请求的 HTTP 方法的名称 (GET,POST 或 PUT)S…

java计算机毕业设计ssm医院病人信息管理系统60k18(附源码、数据库)

java计算机毕业设计ssm医院病人信息管理系统60k18&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#…

summernote富文本编辑器和jquery.validate冲突报错的解决方案

先看问题: 当我在富文本输入并移出鼠标焦点的时候, 控制台抛出错误Cannot read properties of undefined (reading replace), 而导致jquery.validate无法对其他表单组件进行校验 1.定位问题: jquery.validate的初始化是监听了表单$("#addOrEditForm").validate(),…

Nacos的服务注册之服务端

上节讲到了nacos的客户端,通过把实例信息封装成instance,调用服务端的接口:/instance,进行注册. 接下来,我们一起看看服务端是怎么处理客户端发来的请求的. 服务端 在nacos-naming这个模块中,在这个模块里边有一个InstanceController 其中在com.alibaba.nacos.naming.contro…

Netty_03_ByteBuf和网络中拆包粘包问题及其解决

文章目录一、前言二、ByteBuf&#xff08;Netty API中定义的数据类型&#xff09;2.1 ByteBuf2.1.1 ByteBuf创建的方法有两种2.1.2 ByteBuf的存储结构2.1.3 ByteBuf中常用的方法APIReader相关方法Write相关方法Write可能导致扩容2.2 ByteBuf代码(演示读写指针移动和扩容)2.2.1 …

RabbitMQ:基础概述

RabbitMQ 是一个消息中间件&#xff0c;它接收消息并且转发&#xff0c;是“消费-生产者模型”的一个典型的代表&#xff0c;一端往消息队列中不断的写入消息&#xff0c;而另一端则可以读取或者订阅队列中的消息。 RabbitMQ 于 2007 年发布&#xff0c;由 erlang 语言进行开源…

37_软件I2C通信实验

目录 I2C通信协议 多主机I2C总线系统结构 I2C协议 应答信号ACK 数据有效性 数据传输 I2C设备地址 I2C通讯整个过程 硬件连接 EEPROM(24C02) 24C02字节写时序 24C02字节读时序 实验源码 I2C通信协议 I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公…

ATtiny13与Proteus仿真-ADC仿真

ADC仿真 1、ADC介绍 ATtiny13的ADC有如下特点: 10位分辨率0.5 LSB 积分非线性 2 LSB 绝对精度13 - 260 μs 转换时间在最高分辨率下高达 15 kSPS四个多路复用单端输入通道ADC 结果读数的可选左调整0 - VCC ADC 输入电压范围可选择的 1.1V ADC 参考电压自由运行或单一转换模式…

[附源码]计算机毕业设计家庭医生签约服务管理系统Springboot程序

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

dmb ish osh

转自&#xff1a;原理和实战解析Linux中如何正确地使用内存屏障 圈里流传着一句话“珍爱生命&#xff0c;远离屏障”&#xff0c;这足以说明内存屏障是一个相当晦涩和难以准确把握的东西。使用过弱的屏障&#xff0c;会导致软件不稳定。使用过强的屏障&#xff0c;会引起性能问…

c语言篇(动态内存管理)

前言&#xff1a; 对于数据的存储我们可以静态存储&#xff0c;也可以动态存储&#xff0c;两种方式都有自己特有的好处&#xff0c;这篇文章教我们如和进行动态的数据存储&#xff01;&#xff01;&#xff01;&#xff01; &#x1f49e; &#x1f49e; 欢迎来到小马学习代码…