金融项目实战

  • 测试流程

测试流程

  • 功能测试流程

    功能测试流程

  • 需求评审
  • 制定测试计划
  • 编写测试用例和评审
  • 用例执行
  • 缺陷管理
  • 测试报告
  • 接口测试流程

    接口测试流程

  • 需求评审
  • 制定测试计划
  • 分析api文档
  • 编写测试用例
  • 搭建测试环境
  • 编写脚本
  • 执行脚本
  • 缺陷管理
  • 测试报告
  • 测试步骤

    测试步骤

  • 需求评审

需求评审

前置:阅读需求

  • 正常情况下阅读所有需求—测试主管
  • 涉及到本项目测试人员全部参与

目标:

  • 熟悉项目功能
  • 站在不同角度对需求进行查漏补缺
  • 各部门对需求理解一致【重要】

评审人员:测试、开发、产品

  • 测试计划

    测试计划

核心:

  • 测什么(测试目标、测试范围)
  • 谁来测(人员安排)
  • 怎么测(测试策略、测试方法)
    其他:
  • 提测标准
  • 上线标准
  • ⻛险控制
  • 接口相关理论
  • ui功能测试和接口测试哪个先执行?–为什么

结论:

  • 接口测试先执行

原因:

  • ui功能测试需要等待前端页面开发完成、后台接口开发完后且前端与后端联调完成。
  • ui功能测试与接口测试的区别?

ui功能:功能调用(前端jS、服务器端)+页面布局+兼容
接口测试:完整的测试服务端功能验证。

  • ui功能测试和接口测试哪个更高效?–为什么

结论:接口测试更高
原因:接口测试只测服务端功能以及没有多页面操作因素。

  • 金融项目

    金融项目

  • 测试对象

测试对象: 投资业务接口

  • 待测接口

    待测接口

1、注册登录

  • 注册图片验证码接口
  • 注册手机验证码接口
  • 注册接口
  • 登录接口
  • 查询登录状态接口

2、认证开户充值

  • 认证接口
  • 查询认证状态
  • 请求后台开户接口
  • 三方开户接口
  • 请求充值验证码接口
  • 请求后台充值接口
  • 请求三方充值接口

3、投资

  • 请求后台投资接口
  • 三方投资接口

4、投资业务

  • 注册图片验证码接口
  • 注册手机验证码接口
  • 注册接口
  • 登录接口
  • 认证接口
  • 请求后台开户接口
  • 三方开户接口
  • 请求充值验证码接口
  • 请求后台充值接口
  • 请求三方充值接口
  • 请求后台投资接口
  • 三方投资接口
  • 接口如何测试?
    设计用例

    设计用例

在这里插入图片描述
使用工具

  • 可视化工具:postman、Jmeter
  • 代码:python+requests+unittest
  • 接口流程
  • 需求评审
  • 制定测试计划与方案
  • 分析API文档
  • 编写用例
  • 搭建环境(项目环境、项目工具环境)
  • 编写脚本
  • 执行脚本
  • 缺陷管理
  • 测试报告

需求评审

参与人员:产品、开发、测试
目的:

  • 熟悉项目有哪些动能
  • 各角色对需求的理解一致
  • 站在不同角度对需求进行 查漏补缺

测试计划和方案

核心:

  • 测什么(测试目标、测试范围)
  • 谁来测(人员安排)
  • 怎么测(测试策略、测试方法)

其他:

  • 提测标准
  • 上线标准
  • ⻛险控制

分析API文档

  • 测试接口依赖的数据是否都明确(请求、响应)
  • 分析接口之间依赖关系及关联
  • 参数规则(数据类型、必填、数据长度限制、非空、敏感信息是否加密等等)说明

项目难点:

  • 1、认证接口请求头使用multipart/form-data
  • 2、三方开户、三方充值、三方投资都需要调用Mock接口
    • 请求url:来源响应数据action的值
    • 请求参数和值:所有input标签中name属性值为参数名,value属性值为参数值。

测试点提取

测试点提取

  • 注册图片验证码、注册验证码

在这里插入图片描述

  • 注册接口
    在这里插入图片描述
    登录
    在这里插入图片描述
    开通账号
    在这里插入图片描述
    充值
    在这里插入图片描述
    投资
    在这里插入图片描述
    测试用例

    测试用例

  • 注册图片验证码、注册短信验证码
    - [ ]

  • 注册
    在这里插入图片描述

  • 登录
    - [ ]

  • 认证开户
    在这里插入图片描述

  • 充值
    在这里插入图片描述

  • 投资
    在这里插入图片描述

  • 投资业务
    在这里插入图片描述

  • 环境说明

1、项目环境
2、测试工具环境

  • 项目环境搭建

    项目环境搭建

  • 环境部署主要步骤
    在这里插入图片描述
  • 三方接口如何解决?

三方接口如何解决

使用mock

Mock说明

  • 什么是mock?–模拟接口
  • 什么场景下会用mock?
    • 1、依赖的接口未实现
    • 2、依赖的接口响应速度慢
    • 3、针对接口模拟各种异常

如何去实现?

1、使用mock现有工具–>moco
2、自定义mock

  • ①编写一个函数 直接return 模拟的值
  • ② 使用接口开发框架编写要模拟的接口 flask

要模拟哪些内容?

  • 响应数据
  • 响应状态码

需求场景:

模拟一个:登录接口

  • 1、在API文档中说明如果登录成功,返回:状态码{“status”:200,“msg”:“登录成功!”, “token”:“xxx123123123”}
  • 2、登录失败反馈:状态码:200{“status”:100,“msg”:“用户名或密码错误!”}
    问题:开发还未实现登录接口,那么依赖登录如何解决?

实现

from flask import Flask
app = Flask(__name__)
# 定义接口 模拟返回结果
@app.route("/login", methods=["post"])
def login():
    return {"status": 200, "msg": "登录成功!", "token": "xxxx123123123"}
# 定义接口 模拟异常响应状态码
@app.route("/login/lgy", methods=["get"])
def lgy():
    return "haha",407,"xiaoxi"
# 运行
app.run()

在这里插入图片描述
在这里插入图片描述
扩展

from flask import Flask,requests
app = Flask(__name__)

"""
需求:用户名为admin 密码为:123456 返回登录成功!否则返回用户名或密码错误,请求参数格式为:form

"""

# 定义接口 模拟返回结果
@app.route("/login", methods=["post"])
def login():
    #提取数据
    username=requests.form.get("username")
    pwd=requests.form.get("possword")
    #判断
    if username=="admin" and pwd=="123456":
        return {"status": 200, "msg": "登录成功!", "token": "xxxx123123123"}
    else:
        return {"status":100,"msg":"用户名或密码错误!"}
# 运行
app.run()

  • 构造测试数据

    构造测试数据

方式

  • 通过系统页面构造
  • 通过接口构造
  • 通过数据库构造
  • 通过系统页面构造
  • 优点:可视化页面操作
  • 缺点:操作步骤较多,不适合频繁改造数据
  • 示例:参考发布借款标流程
  • 通过接口构造
  • 优点:速度快
  • 缺点:接口耦合度高(接口之间依赖性强,一个失败,后面全失败)
  • 建议:适合依赖3个以内接口就行构造
  • 通过数据库构造(推荐)
  • 优点:灵活度大,执行速度最快
  • 缺点:需要熟悉库、表、字段
  • 建议:编写SQL语句时,使用复制生成的SQL语句,修改主要字段值。
  • 构造借款业务数据
-- 清空操作
delete from `czbk_member`.`mb_member` where id=869;
delete from `czbk_member`.`mb_member_info` where id=987;
delete from `czbk_finance`.`fn_loan_amount` where id=987;
delete from `p2p_mock`.`p2p_account` where id=911;

-- 借款
delete from `czbk_finance`.`fn_loan` where id=642;
delete from `czbk_finance`.`fn_loan_info` where id=832;
delete from `czbk_finance`.`fn_loan_amount_log` where id=869;
INSERT INTO `czbk_member`.`mb_member` (`id`, `name`, `trust_account`, `password`,
`email`, `phone`, `paypassword`, `count`, `register_ip`, `register_time`,
`register_date`, `lastlogin_ip`, `lastlogin_time`, `lastlogin_date`,
`register_type`, `role`, `group`, `group_status`, `is_realname`, `is_email`,
`is_phone`, `is_video`, `is_id5`, `is_vip`, `credit_point`, `is_auto`,
`pwd_attach`, `status`, `lock_time`, `vip_start_time`, `vip_end_time`,
`vip_category_id`, `vip_category_ind`, `amount`, `phonestr`) VALUES ('869',
'13099775533', '6021234507160403', 'eab70f4a46c640b3dfc35040bf37c803', NULL,
'13099775533', NULL, '1', '1972826569', '1588835827', '2020-05-07', '1972826569',
'1588835827', '2020-05-07', '1', '1', '1', '2', '1', '-1', '1', '-1', '-1', '-1',
'0', '-1', '1m4U82PqPx', '1', NULL, NULL, NULL, NULL, NULL, '0.00', NULL);
INSERT INTO `czbk_member`.`mb_member_info` (`id`, `member_id`, `member_name`,
`avatar`, `nickname`, `realname`, `gender`, `birthday`, `card_id`, `qq`,
`educational_background`, `marry_status`, `graduated`, `company_industry`,
`company_scale`, `company_office`, `monthly_income`, `invite_money`,
`hometown_province`, `hometown_city`, `hometown_area`, `hometown_post`) VALUES
('987', '869', '13099775533', NULL, NULL, '小石头', NULL, '1986-11-18',
'429009118611181111', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL);
INSERT INTO `czbk_finance`.`fn_loan_amount` (`id`, `member_id`, `member_name`,
`credit_amount`, `credit_amount_freeze`, `vouch_amount`, `vouch_amount_freeze`,
`pawn_amount`, `pawn_amount_freeze`, `roam_amount`, `roam_amount_freeze`) VALUES
('987', '869', '13099775533', '200000.000000', '0.000000', '0.000000',
'0.000000', '0.000000', '0.000000', '0.000000', '0.000000');
INSERT INTO `p2p_mock`.`p2p_account` (`id`, `account`, `AvlBal`, `AcctBal`,
`FrzBal`, `create_time`) VALUES ('911', '6021234507160403', '0.00', '0.00',
'0.00', '2020-05-07 16:04:03');

-- 借款
INSERT INTO `czbk_finance`.`fn_loan` (`id`, `ind`, `serialno`, `name`,
`member_id`, `member_name`, `amount`, `credited_amount`, `progress`,
`tender_count`, `category_id`, `category_type`, `repay_type`, `period`, `apr`,
`sort_index`, `sort_top`, `status`, `hidden_status`, `additional_status`,
`deposit_certificate`, `certificate_file_id`, `loan_repay_status`,
`loan_repay_time`, `overdue_time`, `add_date`, `add_time`, `verify_time`,
`reverify_time`, `add_ip`, `vouch_company_id`, `op_status`, `marker_type`) VALUES
('642', 'f5380d59791773a8abad4141ff90a5a4', '202008231111', '数据库构造借款1',
'869', '13099775533', '100000.00', '0.00', '0.00', '0', '1', '1', '1', '60',
'7.55', '1', NULL, '3', '1', '-1', '-1', NULL, NULL, NULL, '1609501013', '2020-
05-07', '1588847800', '1588851413', NULL, '1972826569', '0', '-1', '数据库');

INSERT INTO `czbk_finance`.`fn_loan_info` (`id`, `loan_id`, `thumbs`, `contents`,
`attachment_ids`, `password`, `use`, `tender_amount_min`, `tender_amount_max`,
`freeze_amount`, `freeze_amount_proportion`, `freeze_period`, `award_status`,
`fail_award_status`, `award_amount`, `award_proportion`, `award_amount_total`,
`validate`, `part_status`, `tender_count`, `comment_status`, `comment_count`,
`is_company`, `company_name`, `vouch_company_info`, `vouch_company_pic`,
`vouch_company_guaranty`, `amount_category_id`, `hits`, `cancel_admin_id`,
`cancel_remark`, `cancel_time`, `verify_admin_id`, `verify_admin_name`,
`verify_remark`, `verify_time`, `verify_ip`, `reverify_admin_id`,
`reverify_admin_name`, `reverify_remark`, `reverify_time`, `reverify_ip`,
`auto_scale`, `is_auto`, `additional_status`, `additional_apr`,
`additional_name`, `additional_amount_max`, `additional_pic`, `product_process`,
`information`) VALUES ('832', '642', NULL, '数据库构造借款1', 'a:0:{}', NULL,
'10102', '100.00', '1000.00', NULL, '10.00', NULL, '-1', '-1', NULL, NULL, NULL,
'239', NULL, '0', '-1', '0', '-1', NULL, NULL, NULL, NULL, '1', '1', NULL, NULL,
NULL, '4', 'admin', '数据库构造借款1 通过', '1588851413', '1972826569', NULL, NULL,
NULL, NULL, NULL, NULL, '1', '-1', '0.000000', NULL, '0.000000', NULL, NULL,
NULL);
UPDATE `czbk_finance`.`fn_loan_amount` SET `credit_amount_freeze`='100000.000000'
WHERE `member_id`='869';
INSERT INTO `czbk_finance`.`fn_loan_amount_log` (`member_id`, `member_name`,
`category_id`, `type`, `amount`, `remark`,
`add_time`) VALUES ('869','13099775533', 1, 4, '100000', '借款冻结',
'1972826569');

  • 脚本编写

    脚本编写

获取图片验证码、获取短信验证码

获取图片验证码、获取短信验证码

在这里插入图片描述

注意:

  • 1、随机数为空、随机数为字符串,响应状态码为400,404,如果需要变绿,就需要加断言且勾选"忽略状态"
  • 2、获取短信验证码依赖图片验证码,需要先请求图片验证码,添加cookie管理器进行关联。

在这里插入图片描述
在这里插入图片描述

注册脚本

注册脚本

在这里插入图片描述

提示:

  • 1、密码为空、未同意条款为缺陷
  • 2、注册接口中手机号必须和获取短信验证码接口手机号一致。

登录脚本

登录脚本

在这里插入图片描述

提示:

  • 1、解锁需要使用固定定时器登录60秒(60000毫秒)
  • 2、查询登录状态(未登录)需要把登录请求删除

multipart/from-data

在这里插入图片描述
普通form
在这里插入图片描述
认证

认证脚本

在这里插入图片描述
三方开户

三方开户-正则表达式提取

在这里插入图片描述
难点:分析正则提取公式
在这里插入图片描述

结论:提取的数据不一样,其他都一样

表达式编写
在这里插入图片描述

input name\u003d\u0027(.?)\u0027 type\u003d\u0027hidden\u0027 value\u003d\u0027(.?)\u0027

在这里插入图片描述
在这里插入图片描述

请求引用
在这里插入图片描述

  • 扩展unicode编码

https://tool.chinaz.com/tools/Unicode.aspx
在这里插入图片描述

充值

充值

在这里插入图片描述

提示:
1、后台充值必须先登录在请求图片验证码,最后调用后台充值
2、三方充值和三方开户一模一样,直接复制即可。

投资

投资

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

期权学习与期权异动

期权异动网站 https://www.barchart.com/options/unusual-activity/stocks Delta 衡量期权价格对标的资产价格变动的敏感度的指标。它表示标的资产价格每变动一个单位,期权价格预期会变动多少。 取值范围: 看涨期权(Call Option&#xff…

一次有趣的前后端跨越排查

进行前后端代码联调的时候,使用axios调用后端请求,因为都是本地进行联调,所以没有考虑跨域的问题,写了一个get的请求接口,请求后端时,突然跳出下面的问题: 错误的信息一看很像就是跨域的问题&…

创建一个简单的spring boot+vue前后端分离项目

一、环境准备 此次实验需要的环境: jdk、maven、nvm和node.js 开发工具:idea或者Spring Tool Suite 4,前端可使用HBuilder X,数据库Mysql 下面提供maven安装与配置步骤和nvm安装与配置步骤: 1、maven安装与配置 1…

【0011】HTML其他文本格式化标签详解(em标签、strong标签、b标签、i标签、sup标签、sub标签......)

如果你觉得我的文章写的不错&#xff0c;请关注我哟&#xff0c;请点赞、评论&#xff0c;收藏此文章&#xff0c;谢谢&#xff01; 本文内容体系结构如下&#xff1a; 本文旨在深入探讨HTML中其他的文本格式化标签&#xff0c;主要有<em> 标签、<strong> 标签、…

从零开始:H20服务器上DeepSeek R1 671B大模型部署与压力测试全攻略

前言 最近&#xff0c;我有幸在工作中接触到了DeepSeek R1 671B模型&#xff0c;这是目前中文开源领域参数量最大的高质量模型之一。DeepSeek团队在2024年推出的这款模型&#xff0c;以其惊人的6710亿参数量和出色的推理性能&#xff0c;引起了业界广泛关注。 作为一名AI基础…

mySQL复习

目录 一.写在前面 二.介绍 三.选择语句 四.内连接 五.列属性 一.写在前面 课程视频&#xff1a;【中字】SQL进阶教程 | 史上最易懂SQL教程&#xff01;10小时零基础成长SQL大师&#xff01;&#xff01;_哔哩哔哩_bilibili 课程所需资料&#xff1a; 链接&#xff1a;h…

基于SpringBoot+Vue的医院挂号管理系统+LW示例参考

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

golang介绍,特点,项目结构,基本变量类型与声明介绍(数组,切片,映射),控制流语句介绍(条件,循环,switch case)

目录 golang 介绍 面向并发 面向组合 特点 项目结构 图示 入口文件 main.go 基本变量类型与声明 介绍 声明变量 常量 字符串(string) 字符串格式化 空接口类型 数组 切片 创建对象 追加元素 复制切片 map(映射) 创建对象 使用 多重赋值 控制流语句…

3.2-A-L1-2-第15讲-冒泡排序 mochen @denglexi

博观而约取 厚积而薄发 Observe extensively but select wisely; accumulate deeply but release sparingly. 每次比较两个相邻的元素&#xff0c;如果它们的顺序错误就把它 们交换过来。 每一轮进行两两比较&#xff0c;将该轮中最大/最小的值冒出来。 冒泡程序核心代码&#…

25、泛型

十二章、泛型 12-1 为何要有泛型 1、泛型&#xff1a;是一种标签。把元素的类型设计成一个参数&#xff0c;这个类型参数就叫做泛型 2、所谓泛型&#xff0c;就是允许在定义类、接口时通过一个标识表示类中 某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在…

[KEIL]单片机技巧 01

1、查看外设寄存器的值 配合对应的芯片开发手册以查看寄存器及其每一位的意义&#xff0c;可以解决90%以上的单纯的片内外设bug&#xff0c;学会如何通过寄存器的值来排外设上的蛊是嵌入式开发从小白到入门的重要一步&#xff0c;一定要善于使用这个工具&#xff0c;而不是外设…

TCP/IP 5层协议簇:网络层(IP数据包的格式、路由器原理)

目录 1. TCP/IP 5层协议簇 2. IP 三层包头协议 3. 路由器原理 4. 交换机和路由的对比 1. TCP/IP 5层协议簇 如下&#xff1a; 2. IP 三层包头协议 数据包如下&#xff1a;IP包头不是固定的&#xff0c;每一个数字是一个bit 其中数据部分是上层的内容&#xff0c;IP包头最…

免费轻巧多功能 PDF 处理工具:转换、压缩、提取一应俱全

软件技术 今天要给大家分享一款超实用的 PDF 处理工具&#xff0c;它免费又轻巧&#xff0c;如同随时待命的得力小帮手&#xff0c;功能之强大超乎想象&#xff0c;真的值得大家收藏。 这款工具是绿色版软件&#xff0c;解压后开启&#xff0c;满满的 PDF 处理功能便映入眼帘…

基于微信小程序的疫情互助平台(源码+lw+部署文档+讲解),源码可白嫖!

摘要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;从2019年底新型冠状肺炎疫情的爆发以来&#xff0c;使很多工作的管理工作难度再上一层楼。为了在疫情期间能更好的维护信息管理&#xff0…

飞致云开源社区月度动态报告(2025年2月)

自2023年6月起&#xff0c;中国领先的开源软件公司飞致云以月度为单位发布《飞致云开源社区月度动态报告》&#xff0c;旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况&#xff0c;以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源运营数据概览&…

数据库拓展操作

目录 一、截断表&#xff1a; 操作目的&#xff1a; 操作内容&#xff1a; 性能影响&#xff1a; 基本语法&#xff1a; 例子&#xff1a; 二、插入查询结果&#xff1a; 基本语法&#xff1a; 例子&#xff1a; 三、聚合函数&#xff1a; 常用函数&#xff1a; 基…

在 Mac 上使用 Docker 安装宝塔并部署 LNMP 环境

前言 只因为在mac上没有找到合适的PHP开发集成环境&#xff0c;之前有安装了Eserver&#xff0c;但是安装一些常用PHP扩展有时候还是需要手动去编译添加。phpStudy也没有找到适合Mac的版本&#xff0c;在后面安装了Parallels Desktop虚拟机 来运行Ubuntu系统搭建了一套LNMP环境…

Node.js二:第一个Node.js应用

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 创建的时候我们需要用到VS code编写代码 我们先了解下 Node.js 应用是由哪几部分组成的&#xff1a; 1.引入 required 模块&#xff1a;我们可以使用 requi…

Excel基础(详细篇):总结易忽视的知识点,有用的细节操作

目录 基础篇Excel主要功能必会快捷键LotusExcel的文件类型工作表基本操作表项操作选中与缩放边框线 自动添加边框线格式刷设置斜线表头双/多斜线表头不变形的:双/多斜线表头插入多行、多列单元格/行列的移动冻结窗口 方便查看数据打印的常见问题Excel格式数字格式日期格式文本…

vue3:四嵌套路由的实现

一、前言 1、嵌套路由的含义 嵌套路由的核心思想是&#xff1a;在某个路由的组件内部&#xff0c;可以定义子路由&#xff0c;这些子路由会渲染在父路由组件的特定位置&#xff08;通常是 <router-view> 标签所在的位置&#xff09;。通过嵌套路由&#xff0c;你可以实…