全网最细,Python接口自动化测试参数关联(应用场景实例)

news2024/11/26 11:28:02

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

什么是参数关联?

参数关联,也叫接口关联,即接口之间存在参数的联系或依赖。在完成某一功能业务时,有时需要按顺序请求多个接口,此时在某些接口之间可能会存在关联关系。

比如:B接口的某个或某些请求参数是通过调用A接口获取的,即需要先请求A接口,从A接口的返回数据中拿到需要的字段值,在请求B接口时作为请求参数传入。

参数关联有哪些场景?

最常见场景:请求登录接口后获取到token值,后续其他接口请求时需要将token作为请求参数传入。

再比如下单–>支付场景,调用下单接口生成订单后会返回订单号,订单号传给支付接口进行支付。

1、参数关联场景

以最常见的网上购物为例,对应的场景及请求我们可以大致简化如下(可联想某宝购物流程):

用户在购物车选择商品点击【去结算】进入订单确认页,订单确认页点击【提交订单】这时会先请求下单接口创建订单

紧接着会拿创建的订单去请求获取支付凭证接口,这个接口会调起支付页面,也就是输入密码的支付界面

输入支付密码后会请求支付服务的支付接口进行实际支付,支付的结果会返回给请求方,告知是否支付成功

这个流程中涉及到的接口其实都是有关联的,我们要对整个流程进行测试那么就需要按顺序调用所有这些涉及到的接口。

但这里我们只需要弄明白参数关联,那么以下单接口和获取支付凭证接口为例,举例说明就够了,即先请求下单接口生成订单号,再拿这个订单号去请求获取支付凭证接口,才能调起支付界面并进行支付。

下单接口如下:

接口地址:<服务器>/trade/order/purchase
请求类型:post
请求参数:

{
	"goodsId": 10,  //商品id
	"goodsSkuId": 33,   //sku id
	"num": 2,   //购买数量
	"tradePromotion": { //选择的优惠项
		"type": 1,  //类型<1:优惠券>
		"promotionId": 1    //优惠id
	}
}

返回值 data:

{
    "code": 0,
    "msg": "成功",
    "data": {
        "tradeNo": "0020220116204344962706666"  //交易订单号
    },
    "t": 1639658625474
}

获取支付凭证接口如下:

接口地址:<服务器>/pay/pre/consum
请求类型:post
请求参数:

{
	"orderNo":"0020220116204344962706666",    //交易订单号
	"product":"alipayWapClient"    //支付渠道<alipayWapClient:支付宝手机网页支付>
}

返回值 data:

{
    "code": 0,
    "msg": "成功",
    "data": {
        "payNo":"123213213219379213",
        "certificate": "<form name=\"punchout_form\xxxxxxx >\n</form>\n<script>document.forms[0].submit();</script>"
    },
    "t": 1639659171031
}

其中orderNo字段使这两个接口关联了起来。因为每次生成的订单号都不一样,所以在测试这个场景的时候,就需要使这两个接口的参数进行关联,才能走通。

2、脚本编写

那么在pytest框架的自动化测试中,参数关联可以怎样处理呢?这里提供两种思路,如下:

根据业务场景的调用时序,在用例中按顺序调用接口
将依赖的接口编写成fixture函数,并使用yield返回下个接口需要的参数

1)在用例中按顺序调用
代码示例如下:

import requests
import json
import pytest

def test_order_pay():
    '''
    创建订单->获取支付凭证,调起支付界面
    :return:
    '''
    # 先调用下单接口生成订单
    url_order = "https://gouwu.com/trade/order/purchase"
    data_order = {
        "goodsId": 10,
        "goodsSkuId": 33,
        "num": 2,
        "tradePromotion": {
            "type": 1,
            "promotionId": 1
        },
        "tradeDirectionArticle": {
            "articleId": 1
        }
    }
    res_order = requests.post(url=url_order, json=data_order).text
    tradeNo = json.loads(res_order)["tradeNo"]

    # 再请求获取支付凭证接口
    url_pay = "https://gouwu.com/pay/pre/consum"
    data_pay = {
        "orderNo": tradeNo, # tradeNo通过下单接口获取
        "product": "alipayWapClient"
    }
    res_pay = requests.post(url=url_pay, json=data_pay).text
    res_pay = json.loads(res_pay)
    # 断言
    assert res_pay["code"]==0
    assert res_pay["data"]["payNo"]
    assert res_pay["data"]["certificate"]
    
    
if __name__ == '__main__':
    pytest.main()

上面的代码只是流水式的进行调用,我们还可以先将每个接口请求封装成单独的函数,在测试用例中只需按照顺序调用这些函数即可,这个我们会在后续的文章中进行说明。

2)使用Fixture函数
pytest中Fixture函数可以参考我之前的文章pytest-Fixture(固件)

定义Fixture函数,代码示例如下:

@pytest.fixture()
def get_order():
    '''
    请求下单接口,创建订单
    :return:
    '''
    url_order = "https://gouwu.com/trade/order/purchase"
    data_order = {
        "goodsId": 10,
        "goodsSkuId": 33,
        "num": 2,
        "tradePromotion": {
            "type": 1,
            "promotionId": 1
        },
        "tradeDirectionArticle": {
            "articleId": 1
        }
    }
    res_order = requests.post(url=url_order, json=data_order).text
    tradeNo = json.loads(res_order)["tradeNo"]
    yield tradeNo

在测试函数中调用上面定义的fixture函数,代码示例如下:

def test_pay(get_order):
    '''
    下单->支付场景校验
    :param get_order: 调用上面的Fixture函数,函数名get_order即返回的tradeNo
    :return:
    '''
    url_pay = "https://gouwu.com/pay/pre/consum"
    data_pay = {
        "orderNo": get_order,  # get_order即为上面定义的fixture函数返回值
        "product": "alipayWapClient"
    }
    res_pay = requests.post(url=url_pay, json=data_pay).text
    res_pay = json.loads(res_pay)
    # 断言
    assert res_pay["code"] == 0
    assert res_pay["data"]["payNo"]
    assert res_pay["data"]["certificate"]

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

岁月如梭,机会稍纵即逝。抓住每一个宝贵的时刻,用汗水浇灌梦想的花朵。奋斗不止,追求卓越,唯有努力,才能开启辉煌的人生征程!相信自己,勇往直前!

虽然生活充满了挑战和不确定性,但坚定的信念和不懈的努力将会赢得成功。相信自己,勇敢前行,去追求那属于你的无限可能!

奋斗是生命的旋律,坚持是成功的密码。不论遇到多少困难,保持梦想的火焰燃烧,勇往直前,你将开创属于自己的辉煌篇章!相信自己,无所不能!

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

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

相关文章

lift-splat-shoot(LSS)代码详解

原版lift-splat-shoot&#xff08;LSS&#xff09;代码详解 自己想搞一些事情&#xff0c;搞什么呢&#xff1f;和自动驾驶相关的&#xff0c;先走视觉路线的又比较多&#xff0c;bev的话就搞开山之作lss&#xff0c;看有什么可以优化的东西&#xff0c;于是就开始做一做试试看…

编译原理简介

编译原理简介 编译原理的研究对于理解和设计编程语言、编译器和解释器都非常重要。它不仅可以提高程序的执行效率&#xff0c;还可以帮助开发人员更好地理解程序的运行机制。编译原理是计算机科学中的一个重要分支&#xff0c;研究的是编译器的设计和实现。对于从事编译器开发…

人员重识别:Person Re-Identification without Identification via Event Anonymization

论文作者&#xff1a;Shafiq Ahmad,Pietro Morerio,Alessio Del Bue 作者单位&#xff1a;Istituto Italino di Tecnologia;Universita degli Studi di Genova 论文链接&#xff1a;http://arxiv.org/abs/2308.04402v1 内容简介&#xff1a; 1&#xff09;方向&#xff1a;…

欧拉公式推导网格中点线面估计数量关系

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 背景 之前面试网格算法工程师时被问到三角网格中点和面的数量关系。delaunay 三角剖分要估计边的数量来事先申请内存。 通过查找资料了解原理和推导过程。 欧拉公式…

重生奇迹海魔是亚特兰蒂斯的最后一站

当重生奇迹MU玩家开始打算挑战海魔希特拉时&#xff0c;通常就意味着这一次亚特兰蒂斯的旅程已经走到了尾声&#xff0c;因为这个海魔便是海洋的最后一站&#xff0c;成功抵达后就能顺利地通关这片海域。同时&#xff0c;如果此刻玩家等级已经到达130级&#xff0c;那么沙漠地图…

方法:Ubuntu配置网络源-apt源、pip源、conda源

apt源 方法1 编辑/etc/apt/sources.list: sudo gedit /etc/apt/sources.list 写入&#xff0c;如阿里源 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe mu…

最简单的RNN预测股票收盘价

1.首先&#xff0c;导入必要的库&#xff1a; import torch import torch.nn as nn import numpy as np2.准备数据。需要准备好包含历史股票收盘价的一维时间序列数据。在这个例子中&#xff0c;我们将使用NumPy模拟一些示例数据 # 示例的股票收盘价时间序列数据 # 假设数据点…

Linux面试题汇总1

MySQL数据库 1、MySQL和Oracle的区别 1.Oracle是大型数据库&#xff0c;而MySQL是中小型数据库。但是MySQL是开源的&#xff0c;但是Oracle是收费的&#xff0c;而且比较贵。 2. Oracle的内存占有量非常大&#xff0c;而mysql非常小 3. MySQL支持主键自增长&#xff0c;指定主…

MySQL explain SQL分析工具详解与最佳实践

目录 一、explain工具介绍二、添加示例表和数据用于后续演示三、explain中的列3.1、id列3.2、select_type列3.3、table列3.4、partitions列3.5、type列NULLsystemconsteq_refrefrangeindexALL 3.6、possible_keys列3.7、key列3.8、key_len列3.9、ref列3.10、rows列3.11、filter…

《视觉 SLAM 十四讲》V2 第 11 讲 回环检测【消除累积误差】

待做: 习题整理 相关文献【新的综述】等 P283 文章目录 11.2 词袋 模型11.3.2 Code&#xff1a; 创建字典11.4.2 Code&#xff1a; 相似度 计算训练 自己的字典 报错 习题√ 题1√ 题2题3 DBoW3库题4题5 基于 词袋 的外观式 回环检测 SLAM主体(前端后端)&#xff1a; 估计相机…

图片处理后再保存为图片到文件夹中,文件夹下文件名不变改格式保存

首先读取图片&#xff1b; 然后处理&#xff0c;得到cv:Mat类型&#xff1b; 对cv:Mat类型图片写入文件夹&#xff0c;保存到指定路径。 像raw图等不能直接读取显示&#xff0c;需要先进行解码&#xff0c;转换为可以显示的图片。 下面举例读入本来可以显示的图。以下代码加…

哈弗猛龙实力登场,「方盒子猛改派对」掀起越野改装新热潮

9月22日-24日&#xff0c;哈弗猛龙“方盒子猛改派对”在北京751 D-PARK 火车头广场成功举办。活动现场盛况空前&#xff0c;不仅有官方展出的11台不同风格的猛改车型&#xff0c;更吸引了不同领域的博主大咖及越野达人前来参与活动。 与此同时&#xff0c;哈弗猛龙用户大定权益…

【EI会议征稿】第三届信号处理与通信技术国际学术会议(SPCT 2023)

第三届信号处理与通信技术国际学术会议&#xff08;SPCT 2023&#xff09; 2023 3rd International Conference on Signal Processing and Communication Technology 第三届信号处理与通信技术国际学术会议&#xff08;SPCT 2023&#xff09;将于2023年12月1-3日在长春召开。S…

【AIPOD案例操作教程】斜流风扇轮毂优化

AIPOD是由天洑软件自主研发的一款通用的智能优化设计软件&#xff0c;致力于解决能耗更少、成本更低、重量更轻、散热更好、速度更快等目标的工程设计寻优问题。针对工业设计领域的自动化程度低、数值模拟计算成本高等痛点&#xff0c;基于人工智能技术、自研先进的智能代理学习…

MySQL存储引擎以及InnoDB、MyISAM、Memory特点介绍

存储引擎介绍和基本使用 基本介绍&#xff1a; 存储引擎是数据库的核心&#xff0c;存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式 。存储引擎是基于表的&#xff0c;而不是基于库的&#xff0c;所以存储引擎也可被称为表类型。我们可以在创建表的时候&…

U盘植马之基于arduino的badusb实现及思考

引言 曾经有这么一段传说&#xff0c;在某次攻防演练时&#xff0c;某攻击队准备了一口袋U盘前往了目标单位的工作园区&#xff0c;在园区围墙外停下了脚步&#xff0c;然后开始不停扔U盘进去&#xff0c;最后发现有大量的“猎奇者”上线。 U盘植马是常见的近源渗透方式之一&am…

若依不分离+Thymeleaf select选中多个回显

项目中遇到的场景&#xff0c;亲测实用 表单添加时&#xff0c;select选中多个&#xff0c;编辑表单时&#xff0c;select多选回显&#xff0c;如图 代码&#xff1a; // 新增代码 <label class"col-sm-3 control-label">通道&#xff1a;</label><…

再学C++ | std::set 的原理

std::set 是C标准库中的容器之一&#xff0c;它基于红黑树实现。std::set 利用红黑树的特性来实现有序的插入、查找和删除操作&#xff0c;并且具有较好的平均和最坏情况下的时间复杂度。 当向 std::set 插入元素时&#xff0c;它会按照特定的比较函数&#xff08;bool less<…

软件可靠性基础

软件可靠性基础 软件可靠性基本概念串并联系统可靠性计算软件可靠性测试软件可靠性建模软件可靠性管理软件可靠性设计容错&#xff0c;检错的技术 选择题考基本概念&#xff08;MTBF&#xff09;&#xff0c;很少考 非重点 软件可靠性基本概念 这个章节中&#xff0c;第一个…

Leetcode算法题练习(一)

目录 一、前言 二、移动零 三、复写零 四、快乐数 五、电话号码的字母组合 六、字符串相加 一、前言 大家好&#xff0c;我是dbln&#xff0c;从本篇文章开始我就会记录我在练习算法题时的思路和想法。如果有错误&#xff0c;还请大家指出&#xff0c;帮助我进步。谢谢&…