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

}

获取支付凭证接口如下:

• 接口地址:<服务器>/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&timestamp=2021-150&alipay_sdk=alipay-sdk-java-4.9.5.ALL&format=json\">\n<input type=\"hidden\" name=\"biz_content\" value=\"{&quot;time_expire&quot;:&quot;2022-12-31 22:00:00&quot;,&quot;out_trade_no&quot;:&quot;123213213219379213&quot;,&quot;total_amount&quot;:0.01,&quot;subject&quot;:&quot;测试商品&quot;,&quot;product_code&quot;:&quot;QUICK_WAP_WAY&quot;}\">\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`函数**


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”]


#### 总结


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


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


**最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:**


#### 


这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值