支付接口和数据库断言及封装

news2024/11/25 11:36:21

支付下单接口

  • 请求方法: post

  • 请求地址:http://shop.lemonban.com:8107/p/order/pay

  • 请求参数:{“payType”:3,“orderNumbers”:“1733308182027309056”}

  • 请求头部: {“Content-Type”:“application/json”,“Authorization”: “bearer12fa7db3-1270-4ab1-8d48-ba1b7dccc4bb”}

  • 响应结果: weixin://wxpay/bizpayurl?pr=L4PuyAZzz [支付二维码地址,二维码本身就是一个地址]

    • 将url地址转化为二维码的工具:https://cli.im/text

    • 这个二维码包括信息:商户信息+订单信息+商城回调地址 【给微信第三方用的】

    • 商城的回调地址: 是一个由商城提供的地址,给第三方支付平台调用的地址。

      • 因为用户手机支付的时候,并不是直接向商城平台支付的,而是向微信支付的,钱是转给微信的;所以商城平台需要微信告诉我 订单是否支付成功;
      • 这个是否支付成功的状态就是通过商城回调地址告诉商城支付状态的,比如微信会调用这个支付回调地址告诉商城支付结果作为返回结果给商城。
      • 抓包只能抓电商项目本身的前端和后端交互报文 不能抓第三方交互报文。
      • 前端一致发送探测包 检测订单的支付状态,如果没有收到True的结果 【订单已经支付的结果】,那么就不会发送页面跳转。

支付的前端、后端、第三方的业务交互流程:
在这里插入图片描述
我们现在做接口自动化测试,如何解决微信支付的问题呢?

  • 手机支付,操作太麻烦,而且没有必要。
    • 我们可以模拟一个微信支付的订单接口回调接口【mock】,然后自己去调这个接口,设置状态,模拟这个流程。
    • mock: 模拟一个接口结果
      • 第三方接口对接,需要得到第三方接口的返回结果的时候,就需要用mock服务假装 模拟这个返回结果,保证接口的流程是通畅;继续做测试。
    • 这个回调接口跟开发提供给微信端的真正的回调地址其实是差不多的 只是做一个假的 给我们测试内部使用。-内部调用这个回调地址 设置支付状态。不需要第三方。
    • 这样我们就不需要真正的支付 就可以走支付的流程了。依然可以验证业务逻辑的正确性。在测试环境一般都是这样实现的。
  • 以下就是我们这个商城项目开发提供给我们测试用的一个回调接口:
    • 跟普通的接口测试一样: 请求方法 请求参数 请求地址 返回结果 也可以修改数据库的表的数据:
      在这里插入图片描述
      业务流程弄清楚之后,我们再来用咱们框架来表示和运行:
      第一步: 先完成excel用例的维护:
      加上3条用例:8-9-10;支付下单,模拟回调接口【设置支付成功】,查询订单支付状态。
      提交订单后,要做数据提取: {“orderNumbers”:“$…orderNumbers”}
      这里注意一个问题: 最后一个接口 查询订单状态接口的url’地址后面拼接了一个订单号:
      这个要参数化,也就是要设置占位符
      然后url地址也要再使用之前完成替换。 ==修改requests_api方法。

第二步:在flow的测试用例脚本里,运行验证这个模块的用例。

数据库断言

有些结果响应结果断言不能完全确认结果是正确的【或者接口本身就没有任何数据返回的】。做接口测试是关注数据库的数据,确认测试结果:

  • 比如注册,成功了, 数据库里会增加一条记录;
  • 比如订单下单成功了,订单表里的增加一条目;
  • 比如支付成功后,订单的状态会变化。
    这些我们都需要去数据库里进行确认,不能仅仅通过响应结果确认,因为接口响应结果比较简单 ,不能显示所有数据【之前就遇到
    过bug:响应结果ok,但是数据库里不正确,依然是bug】。
    所以,接口测试里做数据库的断言是非常有必要的。

问题: 哪些接口需要做数据库的断言?

  • 涉及到数据库的数据变更的接口需要做数据库的断言。会去更新或者新增数据库的接口。
  • 比如注册【用户表里新增一个条目】,下单【订单表里新增一条记录】,支付后获取订单状态【数据库里的订单的状态 还有支付状态】等。

怎么做的数据库的断言?

  • 参考前置sql : 数据操作
  • 参考响应断言: 预期结果 实际结果
  • 数据库断言: sql 【查询数据库结果】,数据库查询的预期结果是什么
    • {“sql”:“预期结果”} --excel json格式,

数据库的断言的思路和步骤:

  • 0、在excel表格里把数据库断言的:
    • 同样用json格式表示: {“sql表达式”:“预期结果”}
  • 1、先读取数据出来-- 反序列化 转化字典 :
  • {"select count(*) from tz_order where order_number = '#orderNumbers#'":1,
  • 2、得到key【sql】 和value【预期数据库查询结果】
  • 3、替换一下sql里的占位符
  • 4、调用数据库封装的方法 执行查询语句 得到数据库查询结果
  • 5、把预期结果和查询结果 断言
  • 6、最后加上日志和异常捕获 + 判空处理。
"""
数据库的断言的思路和步骤:
0、在excel表格里把数据库断言的:
*     同样用json格式表示: {"sql表达式":"预期结果"}
1、先读取数据出来-- 反序列化 转化字典  : {"select count(*) from tz_order where order_number = '#orderNumbers#'":1,
"select status from tz_order where order_number = '#orderNumbers#'":1}
2、得到key【sql】 和value【预期数据库查询结果】
3、替换一下sql里的占位符
4、调用数据库封装的方法 执行查询语句 得到数据库查询结果
5、把预期结果和查询结果 断言
6、最后加上日志和异常捕获 + 判空处理。
"""
import json
from tools.handle_replace import replace_mark
from tools.handle_mysql import HandleMysql
from datas.db_data import my_db

assert_data = '''{"select count(*) from tz_order where order_number = '#orderNumbers#'":1,
"select status from tz_order where order_number = '#orderNumbers#'":1}'''

# 第一步:先读取数据出来-- 反序列化 转化字典
assert_data = json.loads(assert_data)
# 第二步: 得到key【sql】 和value【预期数据库查询结果】
for k,v in assert_data.items(): # k是sql语句,v是数据库预期结果
    # 第三步: sql里有占位符,先替换-调用replace方法
    k = replace_mark(k)
    # 第四步: 调用数据库封装的方法 执行查询语句 得到数据库查询结果
    sql_result = HandleMysql(**my_db).query_data(k)  # 数据库的查询结果:{'count(*)': 1}| {'status': 2}
    # 第五步: 把预期结果和查询结果 断言
    for i in sql_result.values(): # i是数据库查询结果字典的values 1 2这个数据 ==执行结果
        assert i == v

#数据库断言封装
handle_db_assert.py

"""
1、def封装
2、参数化
3、返回值: 数据库断言不需要返回值
4、加上日志: 但凡你想确认数据结果的地方 都可以加上日志
5、因为有些接口不需要做数据提取,所以判空处理:
6、异常捕获: 因为断言失败要加日志 记录 并raise错误 使测试用例失败

"""
import json
from tools.handle_replace import replace_mark
from tools.handle_mysql import HandleMysql
from datas.db_data import my_db
from loguru import logger

def database_assert(assert_data):
    if assert_data is None: # 判空处理
        return
    logger.info("--------------------数据库断言开始----------------------------")
    # 第一步:先读取数据出来-- 反序列化 转化字典
    assert_data = json.loads(assert_data)
    logger.info(f"数据库断言的表达式:{assert_data}")
    # 第二步: 得到key【sql】 和value【预期数据库查询结果】
    for k,v in assert_data.items(): # k是sql语句,v是数据库预期结果
        # 第三步: sql里有占位符,先替换-调用replace方法
        k = replace_mark(k)
        logger.info(f"数据库查询sql是{k}")
        # 第四步: 调用数据库封装的方法 执行查询语句 得到数据库查询结果
        sql_result = HandleMysql(**my_db).query_data(k)  # 数据库的查询结果:{'count(*)': 1}| {'status': 2}
        # 第五步: 把预期结果和查询结果 断言
        for i in sql_result.values(): # i是数据库查询结果字典的values 1 2这个数据 ==执行结果
            logger.info(f"数据库断言的实际结果是{i}")
            logger.info(f"数据库断言的预期结果是{v}")
            try:
                assert i == v
                logger.info("数据库断言成功!")
            except AssertionError as e:
                logger.error("数据库断言失败!")
                raise e



if __name__ == '__main__':
    assert_data = '''{"select count(*) from tz_order where order_number = '#orderNumbers#'":1,
    "select status from tz_order where order_number = '#orderNumbers#'":1}'''
    database_assert(assert_data)

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

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

相关文章

HDMI 2.1b 规范解读

HDMI 规范 HDMI 2.1b 是最新版 HDMI 规范,支持一系列更高的视频分辨率和刷新频率,包括 8K60 和 4K120 以及高达 10K 的分辨率。同时支持动态 HDR 格式,带宽能力增加到 48Gbps HDMI。 新的超高速 HDMI 线缆支持 48Gbps 带宽。该线缆可确保提供…

在单通道彩图上踩的坑

使用labelme后,生成如图所示文件夹,其中JPEGImages是原图,SegmentationClassPNG是标签。 此时SegmentationClassPNG中的标签(masks)是只包含0和1的二进制文件,0表示背景,1表示要识别的物体类型。&#xff…

什么是ISP住宅IP?相比于普通IP它的优势是什么?

什么是ISP住宅IP? ISP住宅IP是指由互联网服务提供商(ISP)分配给住宅用户的IP地址。它是用户在家庭网络环境中连接互联网的标识符,通常用于上网浏览、数据传输等活动。ISP住宅IP可以是动态分配的,即每次连接时都可能会…

RabbitMQ高级-应用问题、集群搭建

1.消息补偿 消息可靠性保障:——消息补偿机制 需求:100%确保消息发送成功 2.幂等性保障 幂等性指一次和多次请求某一资源,对于资源本身应该具有同样的结果。也就是说,其任意多次执行对资源本身所产生的影响均与第一次执行的影响…

2024/3/31周报

文章目录 摘要Abstract文献阅读题目创新点实验数据研究区域数据和材料 方法XGBoost algorithmLong Short‑Term Memory AlgorithmEvaluation of the Model Accuracy 实验结果 深度学习XGBoost代码实现AdaBoostBoostingAdaBoost算法AdaBoost代码实现 总结 摘要 本周阅读了一篇基…

上海开放大学2024年春《过程控制技术》网上记分作业参考答案

答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 电大搜题 多的用不完的题库,支持文字、图片搜题&am…

SD-WAN组网面临的安全挑战?如何提供有效的安全措施

SD-WAN(软件定义广域网)技术的广泛应用,企业面临着越来越多的网络安全挑战。尽管SD-WAN带来了灵活性和效率的提升,但其开放性和基于云的特性也带来了一系列安全威胁。本文将探讨SD-WAN组网面临的安全挑战,并提供一些有…

1236. 递增三元组:做题笔记

目录 暴力 代码 二分 代码 前缀和 代码 推荐视频讲解 暴力 这道题说的是有三个元素数量相同的数组,想知道有多少个三元组满足:三个数分别来自 A B C数组且呈现递增。 我想的是既然要求递增,那就先把数组数据都排一下序,…

鸿蒙:滑动条组件Slider

滑动条组件,通常用于快速调节设置值,如音量调节、亮度调节等应用场景。 说明 该组件从API Version 7开始支持。 子组件 无 接口 Slider(options?: {value?: number, min?: number, max?: number, step?: number, style?: SliderStyle, direc…

如何使用potplayer在公网环境访问内网群晖NAS中储存在webdav中的影视资源

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-D7WJh3JaNVrLcj2b {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

渐变颜色作图

clear clc close all % 生成 x 值 x linspace(0, 5, 1000); % 计算对应的 y 值(二次函数分布) y x .^ 2; % 添加一些随机噪声 y y randn(size(y)); clinspace(1,10,length(x)); arry1[x,y]; arry2sortrows(arry1,2,descend); arry3[arry2,c]…

LabVIEW双通道太阳射电频谱观测系统

LabVIEW双通道太阳射电频谱观测系统 开发了一个基于LabVIEW平台开发的双通道高速太阳射电频谱观测系统。该系统实时监测太阳射电爆发,具有随机性、持续时间短、变化快等特点。通过高速信号采集卡实现1.5 GS/s的信号采集,时间分辨率可达4ms,频…

跑腿小程序|基于微信小程序的跑腿平台小程序设计与实现(源码+数据库+文档)

跑腿平台小程序目录 目录 基于微信小程序的跑腿平台小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户信息管理 2、跑腿任务管理 3、任务类型管理 4、公告信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、…

MySQL 优化及故障排查

目录 一、mysql 前置知识点 二、MySQL 单实例常见故障 故障一 故障二 故障三 故障四 故障五 故障六 故障七 故障八 三、MySQL 主从故障排查 故障一 故障二 故障三 四、MySQL 优化 1.硬件方面 (1)关于 CPU (2)关…

备战蓝桥杯---贪心刷题2

话不多说&#xff0c;直接看题&#xff1a; 首先我们大致分析一下&#xff0c;先排序一下&#xff0c;Kn&#xff0c;那就全部选。 当k<n时&#xff0c;k是偶数&#xff0c;那么结果一定非负&#xff0c;因为假如负数的个数有偶数个&#xff0c;那么我们成对选它&#xff0…

单链表的一些个人易错的问题(有理解不正确的地方请大佬指正)

请看下列代码 代码1&#xff1a;&#xff08;正确示范&#xff09; #include<stdio.h> #include<stdlib.h> struct node {int data;struct node *next;}; int main() {int n;int a;printf("请输入数字个数&#xff1a;");scanf("%d",&n)…

行车记录打不开?数据恢复有高招!

行车记录打不开&#xff0c;是许多车主在使用行车记录仪时常遇到的问题。当启动设备时&#xff0c;屏幕无反应或提示错误&#xff0c;让人不禁焦虑&#xff0c;担心重要的行车记录丢失。 行车记录打不开原因分析 行车记录打不开&#xff0c;其背后的原因可能复杂多样。硬件故障…

每日学习笔记:C++ STL算法分类

非更易型 更易型 移除型 变序型 排序型 已排序区间算法 数值型算法

【嵌入式系统设计师】软考2024年5月报名流程及注意事项

2024年5月软考嵌入式系统设计师报名入口&#xff1a; 中国计算机技术职业资格网&#xff08;http://www.ruankao.org.cn/&#xff09; 2024年软考报名时间暂未公布&#xff0c;考试时间上半年为5月25日到28日&#xff0c;下半年考试时间为11月9日到12日。不想错过考试最新消息…

行车记录打不开?别慌,数据恢复有高招!

行车记录打不开&#xff0c;这恐怕是许多车主都曾经遭遇过的烦恼。在驾驶途中&#xff0c;行车记录仪本应是记录美好瞬间、保障行车安全的重要工具&#xff0c;但一旦它出现打不开的情况&#xff0c;所有的期待与信赖便瞬间化为乌有。面对这种情况&#xff0c;我们该如何应对&a…