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

news/2025/2/13 22:55:29/

什么是参数关联?

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

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

有哪些场景?

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

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

参数关联场景示例

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

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

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

  3. 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
    }

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

脚本编写

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

  • • 根据业务场景的调用时序,在用例中按顺序调用接口

  • • 将依赖的接口编写成fixture函数,并使用yield返回下个接口需要的参数

1. 在用例中按顺序调用

代码示例如下:

# @author: 给你一页白纸import requests
import json
import pytestdef 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).texttradeNo = 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).textres_pay = json.loads(res_pay)# 断言assert res_pay["code"]==0assert res_pay["data"]["payNo"]assert res_pay["data"]["certificate"]if __name__ == '__main__':pytest.main()

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

2. 使用Fixture函数

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

# @author: 给你一页白纸@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).texttradeNo = json.loads(res_order)["tradeNo"]yield tradeNo

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

# @author: 给你一页白纸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).textres_pay = json.loads(res_pay)# 断言assert res_pay["code"] == 0assert res_pay["data"]["payNo"]assert res_pay["data"]["certificate"]

总结

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

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


如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

END配套学习资源分享

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

加入我的软件测试交流qq群:110685036免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

全套资料获取方式:


http://www.ppmy.cn/news/364109.html

相关文章

电脑功放,电脑功放机怎么连接 功放机有哪些作用

功放机在连接电脑时一定要找相对应的接口来连接&#xff0c;要不会影响到你功放机的效果以外&#xff0c;有可能还会出现一些没有声音的现象&#xff0c;所以在连接前一定要了解清楚才可以进行操作。下面小编就来给大家介绍一下电脑功放机怎么连接及功放机有哪些作用。 电脑功放…

两问表和三问表哪个更少_自鸣表与三问手表有什么区别?常见三问机械腕表问题解答!...

如今带三问功能的手表都价格昂贵&#xff0c;作为黑暗之中读取时间计时工具而诞生&#xff0c;但今天很多人认为这个鸣声报时却好像没太大意义。除此之外&#xff0c;也不少人心中对三问手表存在很多疑问或误解。今天斑点狗小编就整合了一些关于三问手表常见问题和长期被人误解…

【渝粤题库】广东开放大学 文化创意学 形成性考核

选择题 题目&#xff1a; 国际投资中的政治风险防范主要表现在生产和经营战略及( )上。 选择一项&#xff1a; 题目&#xff1a; 国际投资时投资者对东道国投资经济环境首要考虑的经济政策是( ) 选择一项&#xff1a; 题目&#xff1a;用于文化产业生产和经营消费…

2021星巴克月饼全新上市;上海名品奥特莱斯二期项目于9月正式亮相 | 知消

美味与环保同行&#xff0c;2021星巴克月饼全新上市。星巴克今年在月饼口味上进行了大胆创新与尝试&#xff0c;集结多个享誉全球的美食圣地的代表风味&#xff0c;演绎月饼这一具有悠久历史的传统食物。无论是甜党还是咸派&#xff0c;无论是经典口味的忠实爱好者&#xff0c;…

Android 5.0十项最受期待的功能与Android进化论

为了对抗苹果iOS的挑战&#xff0c;谷歌加快了Android系统的更新。从去年底的4.0到今年中的4.1&#xff0c;按照这个节奏&#xff0c;谷歌很有可能会在今年底发布新一代智能操作系统——传说中的Android 5.0 Key Lime Pie&#xff08;酸橙派&#xff09;。 今年Google I/O大会后…

四非人保研上岸日记--去向:北科学硕(各种大佬们就别来了,这是给双非萌新的攻略)

四非人保研上岸日记–去向&#xff1a;经历一番最终上案&#xff0c;有感而发&#xff0c;所以写下此篇文章&#xff0c;以前的垃圾文章我都删了&#xff0c;以后要写就写精品&#xff0c;保研形势越来越离谱&#xff0c;希望给后辈们一点启发吧&#xff0c;每天写一点&#xf…

蘑菇街收购锐鲨科技,志在押注国货新浪潮?

最近&#xff0c;以鸿星尔克为首的国潮运动品牌火了&#xff01; 除了鸿星尔克&#xff0c;贵人鸟、白象方便面、蜜雪冰城、汇源等广泛获得消费者好感的国产品牌都被消费者"光顾"了个遍。这次国产品牌和消费者的良性互动&#xff0c;也反映出国货品牌有很大的潜力成…

2021星巴克月饼全新上市;万豪旗下源宿品牌入驻中国东南区;现代汽车承诺到2045年实现碳中和 | 美通社头条...

要闻摘要&#xff1a;2021星巴克月饼全新上市。万豪旗下源宿品牌入驻中国东南区。爱茉莉太平洋集团通过元宇宙举办创立76周年纪念仪式。高合汽车80万HiPhi X 4座正式交付。现代汽车承诺到2045年实现碳中和。德国独立电动汽车制造商e.GO开设第一家品牌专卖店。佳能首次推出搭载水…