金融項目實戰

  • 測試流程

測試流程

  • 功能測試流程

    功能測試流程

  • 需求評審
  • 制定測試計劃
  • 編寫測試用例和評審
  • 用例執行
  • 缺陷管理
  • 測試報告
  • 接口測試流程

    接口測試流程

  • 需求評審
  • 制定測試計劃
  • 分析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、三方充值和三方開戶一模一樣,直接復制即可。

投資

投資

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71261.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71261.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71261.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode 25 - K 個一組翻轉鏈表

LeetCode 25 - K 個一組翻轉鏈表 這道題是一個典型的鏈表操作題,考察我們對鏈表的精確操作,包括反轉鏈表、分組處理、遞歸和迭代的結合應用等。還可以通過變體問題延伸到優先隊列操作、歸并、分塊等,這使得它成為面試中的高頻考題之一。 題目…

Leetcode 54: 螺旋矩陣

Leetcode 54: 螺旋矩陣 是一道經典的矩陣遍歷模擬題目,要求我們以螺旋順序遍歷一個二維數組。這個問題在面試中非常經典,考察模擬、數組操作以及邏輯清晰度。掌握本題的高效解法可以迅速給面試官留下好印象。 適合面試的解法:邊界法&#xff…

abseil-cpp:環境搭建

參考: https://abseil.io/docs/cpp/quickstart-cmake abseil-cpp.git/dd4c89b abseil-cpp.git/20240722.1 1. clone代碼倉庫、編譯 git clone https://github.com/abseil/abseil-cpp.git /app/abseil-cpp/ #/app/abseil-cpp/.git/config git checkout 20240722.1git rev-pa…

Storm實時流式計算系統(全解)——下

storm編程案例-網站訪問來源實時統計-需求 storm編程-網站訪問來源實時統計-代碼實現 根據以上條件可以只寫一個類,我們只需要寫2個方法和一個main(),一個讀取/發射(spout)。 一個拿到數據統計后發到redis…

什么是SYN洪范攻擊?

文章目錄 一、什么是SYN洪范攻擊?二、SYN泛洪攻擊原理2.1 TCP 三次握手過程2.2 SYN攻擊過程 三、防御措施 一、什么是SYN洪范攻擊? SYN洪泛攻擊(SYN Flood)發生在OSI第四層,是一種基于?TCP協議三次握手漏洞?的DoS&a…

【嵌入式】MQTT

MQTT 文章目錄 MQTT安裝簡介MQTT客戶端代碼 安裝 安裝Paho MQTT C庫: sudo apt-get install libpaho-mqtt3-dev頭文件包含: #include "MQTTClient.h"編譯選項: gcc -o $ $^ -lpaho-mqtt3c簡介 MQTT協議全稱是(Message Queuing…

ubuntu離線安裝nvidia-container-runtime

參考文章 ubuntu系統docker20.4版本安裝nvidia-container-runtime3.11.0-1版本(離線安裝nvidia-docker) - jokerMM - 博客園 https://zhuanlan.zhihu.com/p/15194336245 一、軟件地址 Index of /nvidia-docker/libnvidia-container/stable/ 從上述地地址——進入對應系統—…

用Python+Flask打造可視化武俠人物關系圖生成器:從零到一的實戰全記錄

用PythonFlask打造可視化武俠人物關系圖生成器:從零到一的實戰全記錄 一、緣起:一個程序小白的奇妙探索之旅 作為一個接觸Python僅13天的編程萌新,我曾以為開發一個完整的應用是遙不可及的事情。但在DeepSeek的幫助下,我竟用短短…

RPA 職業前景:個人職場發展的 “新機遇”

1. RPA職業定義與范疇 1.1 RPA核心概念 機器人流程自動化(RPA)是一種通過軟件機器人模擬人類操作,自動執行重復性、規則性任務的技術。RPA的核心在于其能夠高效、準確地處理大量數據和流程,減少人工干預,從而提高工作…

Full GC 排查

在 Java 中,Full GC(完全垃圾回收)會對整個堆(包括年輕代和老年代,甚至可能包括永久代/元空間)進行垃圾回收,通常會導致較長的停頓(STW,Stop-The-World)。如果…

go語言中字符串嵌套

在Go語言中,字符串嵌套通常是指在字符串中包含另一個字符串。可以通過以下幾種方式實現: 1. 使用雙引號和轉義字符 如果需要在字符串中嵌套雙引號,可以使用轉義字符 \ 來表示內部的雙引號。例如: s : "He said, \"He…

Docker 學習(二)——基于Registry、Harbor搭建私有倉庫

Docker倉庫是集中存儲和管理Docker鏡像的平臺,支持鏡像的上傳、下載、版本管理等功能。 一、Docker倉庫分類 1.公有倉庫 Docker Hub:官方默認公共倉庫,提供超過10萬鏡像,支持用戶上傳和管理鏡像。 第三方平臺:如阿里…

js的簡單介紹

一.javascript(是什么) 是一種運行在客戶端(瀏覽器)的編程語言,實現人機交互效果 作用 網頁特效(監聽客戶的一些行為讓網頁做出對應的反饋)表單驗證(針對表格數據的合法性進行判斷)數據交互(獲取后臺的數據&#xf…

k8s架構及服務詳解

目錄 1.1.容器是什么1.2.Namespace1.3.rootfs5.1.Service介紹5.1.1.Serice簡介 5.1.1.1什么是Service5.1.1.2.Service的創建5.1.1.3.檢測服務5.1.1.4.在運行的容器中遠程執行命令 5.2.連接集群外部的服務 5.2.1.介紹服務endpoint5.2.2.手動配置服務的endpoint5.2.3.為外部服務…

01. HarmonyOS應用開發實踐與技術解析

文章目錄 前言項目概述HarmonyOS應用架構項目結構Ability生命周期 ArkTS語言特性裝飾器狀態管理 UI組件與布局基礎組件響應式布局樣式與主題 頁面路由與參數傳遞頁面跳轉參數接收 數據綁定與循環渲染數據接口定義循環渲染 條件渲染組件生命周期最佳實踐與性能優化組件復用響應式…

【虛擬機 IP 配置深度剖析】

虛擬機 IP 配置深度剖析 在虛擬機的使用過程中,IP 配置猶如搭建房屋的基石,是確保虛擬機與外部網絡順暢通信、與其他設備高效交互的關鍵所在。本文將以 CentOS 虛擬機為例,深入解讀 IP 配置的奧秘。 一、認識網絡模式 ? NAT 模式&#xf…

【Python 數據結構 5.棧】

目錄 一、棧的基本概念 1.棧的概念 2.入棧 入棧的步驟 3.出棧 出棧的步驟 4.獲取棧頂元素 獲取棧頂元素的步驟 二、 Python中的棧 順序表實現 鏈表實現 三、棧的實戰 1.LCR 123. 圖書整理 I 思路與算法 2.LCR 027. 回文鏈表 思路與算法 3.1614. 括號的最大嵌套深度 思路與算法 …

Machine Learning 初探

前置知識 pandas 讀取文件:read_csv查看信息 describe:查看整體信息,包括每列的平均值、最大最小值、標準差等head:輸出頭部幾行數據columns:輸出所有列名loc:查詢數據,或是根據索引取對應的數…

2025年2月個人工作生活總結

本文為 2025年2月工作生活總結。 工作記錄 AI浪潮 AI非常火,春節至今,到處充斥著大量和AI、DeepSeek有關的新聞。領導也一再強調要用AI,甚至納入到新一年的考核里。再往上,大領導開會的新聞稿里也作出要求,不能停下腳…

SpringBoot @ConfigurationProperties 注解使用

ConfigurationProperties 用于將配置文件(如 application.properties 或 application.yml)中的屬性批量綁定到一個 Java Bean 中。 1. 定義配置文件 在 application.properties 或 application.yml 中定義一組具有相同前綴的屬性。 application.yml &a…