百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

python+pytest接口自动化之参数关联

off999 2024-12-03 00:17 38 浏览 0 评论

前言

今天呢,笔者想和大家来聊聊python+pytest接口自动化测试的参数关联,笔者这边就不多说废话了,咱们直接进入正题。

一、什么是参数关联?

参数关联,也叫接口关联,即接口之间存在参数的联系或依赖。在完成某一功能业务时,有时需要按顺序请求多个接口,此时在某些接口之间可能会存在关联关系。比如:B接口的某个或某些请求参数是通过调用A接口获取的,即需要先请求A接口,从A接口的返回数据中拿到需要的字段值,在请求B接口时作为请求参数传入。

二、有哪些场景?

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

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

三、参数关联场景

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

  1. 用户在购物车选择商品点击【去结算】进入订单确认页,订单确认页点击【提交订单】这时会先请求下单接口创建订单
  2. 紧接着会拿创建的订单去请求获取支付凭证接口,这个接口会调起支付页面,也就是输入密码的支付界面
  3. 输入支付密码后会请求支付服务的支付接口进行实际支付,支付的结果会返回给请求方,告知是否支付成功

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

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

下单接口如下:

  • 接口地址:<服务器>/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\" method=\"post\" action=\"https://openapi.alipay.com/gateway.do?charset=UTF-8&method=alipay.trade.wap.pay&sign=aTKlfEnYgR7x9xs1Eyjipo0S%2BFtQ6AKu9d%2Brb7iieMThz2Dq7zp4h8QH4lelTKovOloT%2FPiNXR5miwKgOWW3K6pl0TFO5XX5NSZNBmU%2BPd5ogeo0YT0vCqWUM60rqbYLNtZmvyx%2BAR4Z2SOnqs0CYqVIbZAhpn1Bd5HsdcCCYVgsgOdbEE60Cfu3LG3Z%2FQ0GQIdW24uTyr%2BojRc25ipOC9NIYwtba8UjRw18Z3e7sj75qoIg%2FipICH7FCJBJEdlgBGlNxIjKzhYj4OBg93D&return_url=https%3A%2F%2Fblog.csdn.net%2Fa032788aotify_url=http%3A%2F%2F82.157.145.132%3A8089%2Ftest%2Fnotify%2Fgateway&version=1.0&app_id=2021001105644746&sign_type=RSA2×tamp=2021-150&alipay_sdk=alipay-sdk-java-4.9.5.ALL&format=json\">\n<input type=\"hidden\" name=\"biz_content\" value=\"{"time_expire":"2022-12-31 22:00:00","out_trade_no":"123213213219379213","total_amount":0.01,"subject":"测试商品","product_code":"QUICK_WAP_WAY"}\">\n<input type=\"submit\" value=\"立即支付\" style=\"display:none\" >\n</form>\n<script>document.forms[0].submit();</script>"
    },
    "t": 1639659171031
}

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

四、脚本编写

那么在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函数

定义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"]

五、 总结

参数关联在接口自动化测试中是必然会遇到的场景,设计关联参数的用例会直接影响到用例的维护,当然这也是在接口自动化项目的架构设计时就需要考虑的问题。

对于刚入门的同学而言,我们需要明白的是,什么是参数关联,以及可以怎样去处理它。

最后,希望这篇文章能够帮助正在学习自动化的小伙伴,喜欢的小伙伴可以点赞收藏评论加关注,关注我每天都会有不同的惊喜。

相关推荐

安全教育登录入口平台(安全教育登录入口平台官网)

122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

2026-02-04 09:03 off999

电信宽带测速官网入口(电信宽带测速官网入口app)

这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

2025世界杯赛程表(2025世界杯在哪个国家)

2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

下载搜狐视频电视剧(搜狐电视剧下载安装)

搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
永久免费听歌网站(丫丫音乐网)

可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

音乐格式转换mp3软件(音乐格式转换器免费版)

有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

电子书txt下载(免费的最全的小说阅读器)

1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

最好免费观看高清电影(播放免费的最好看的电影)

在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

取消回复欢迎 发表评论: