网页制作实践 做网站,ai效果图网站,湖南省住房城乡建设网站,如何建网址什么是参数关联#xff1f;
参数关联#xff0c;也叫接口关联#xff0c;即接口之间存在参数的联系或依赖。在完成某一功能业务时#xff0c;有时需要按顺序请求多个接口#xff0c;此时在某些接口之间可能会存在关联关系。
比如#xff1a;B接口的某个或某些请求参数是…
什么是参数关联
参数关联也叫接口关联即接口之间存在参数的联系或依赖。在完成某一功能业务时有时需要按顺序请求多个接口此时在某些接口之间可能会存在关联关系。
比如B接口的某个或某些请求参数是通过调用A接口获取的即需要先请求A接口从A接口的返回数据中拿到需要的字段值在请求B接口时作为请求参数传入。
有哪些场景
最常见的场景之一便是请求登录接口后获取到token值后续其他接口请求时需要将token作为请求参数传入。
再比如下单--支付场景调用下单接口生成订单后会返回订单号订单号传给支付接口进行支付。
参数关联场景示例
以最常见的网上购物为例对应的场景及请求我们可以大致简化如下可联想某宝购物流程
1. 用户在购物车选择商品点击【去结算】进入订单确认页订单确认页点击【提交订单】这时会先请求下单接口创建订单2. 紧接着会拿创建的订单去请求获取支付凭证接口这个接口会调起支付页面也就是输入密码的支付界面3. 输入支付密码后会请求支付服务的支付接口进行实际支付支付的结果会返回给请求方告知是否支付成功
这个流程中涉及到的接口其实都是有关联的我们要对整个流程进行测试那么就需要按顺序调用所有这些涉及到的接口。
但这里我们只需要弄明白参数关联那么以下单接口和获取支付凭证接口为例举例说明就够了即先请求下单接口生成订单号再拿这个订单号去请求获取支付凭证接口才能调起支付界面并进行支付。
下单接口如下 • 接口地址服务器/trade/order/purchase• 请求类型post• 请求参数{goodsId: 10, //商品idgoodsSkuId: 33, //sku idnum: 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?charsetUTF-8methodalipay.trade.wap.paysignaTKlfEnYgR7x9xs1Eyjipo0S%2BFtQ6AKu9d%2Brb7iieMThz2Dq7zp4h8QH4lelTKovOloT%2FPiNXR5miwKgOWW3K6pl0TFO5XX5NSZNBmU%2BPd5ogeo0YT0vCqWUM60rqbYLNtZmvyx%2BAR4Z2SOnqs0CYqVIbZAhpn1Bd5HsdcCCYVgsgOdbEE60Cfu3LG3Z%2FQ0GQIdW24uTyr%2BojRc25ipOC9NIYwtba8UjRw18Z3e7sj75qoIg%2FipICH7FCJBJEdlgBGlNxIjKzhYj4OBg93Dreturn_urlhttps%3A%2F%2Fblog.csdn.net%2Fa032788aotify_urlhttp%3A%2F%2F82.157.145.132%3A8089%2Ftest%2Fnotify%2Fgatewayversion1.0app_id2021001105644746sign_typeRSA2timestamp2021-150alipay_sdkalipay-sdk-java-4.9.5.ALLformatjson\\ninput type\hidden\ name\biz_content\ value\{quot;time_expirequot;:quot;2022-12-31 22:00:00quot;,quot;out_trade_noquot;:quot;123213213219379213quot;,quot;total_amountquot;:0.01,quot;subjectquot;:quot;测试商品quot;,quot;product_codequot;:quot;QUICK_WAP_WAYquot;}\\ninput type\submit\ value\立即支付\ style\display:none\ \n/form\nscriptdocument.forms[0].submit();/script},t: 1639659171031}
其中orderNo字段使这两个接口关联了起来。因为每次生成的订单号都不一样所以在测试这个场景的时候就需要使这两个接口的参数进行关联才能走通。
脚本编写
那么在pytest框架的自动化测试中参数关联可以怎样处理呢这里提供两种思路如下
• 根据业务场景的调用时序在用例中按顺序调用接口• 将依赖的接口编写成fixture函数并使用yield返回下个接口需要的参数
1. 在用例中按顺序调用
代码示例如下 import requests
import json
import pytestdef test_order_pay():创建订单-获取支付凭证调起支付界面:return:# 先调用下单接口生成订单url_order https://gouwu.com/trade/order/purchasedata_order {goodsId: 10,goodsSkuId: 33,num: 2,tradePromotion: {type: 1,promotionId: 1},tradeDirectionArticle: {articleId: 1}}res_order requests.post(urlurl_order, jsondata_order).texttradeNo json.loads(res_order)[tradeNo]# 再请求获取支付凭证接口url_pay https://gouwu.com/pay/pre/consumdata_pay {orderNo: tradeNo, # tradeNo通过下单接口获取product: alipayWapClient}res_pay requests.post(urlurl_pay, jsondata_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函数
pytest中Fixture函数可以参考我之前的文章pytest-Fixture(固件)。
定义Fixture函数代码示例如下pytest.fixture()
def get_order():请求下单接口创建订单:return:url_order https://gouwu.com/trade/order/purchasedata_order {goodsId: 10,goodsSkuId: 33,num: 2,tradePromotion: {type: 1,promotionId: 1},tradeDirectionArticle: {articleId: 1}}res_order requests.post(urlurl_order, jsondata_order).texttradeNo 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/consumdata_pay {orderNo: get_order, # get_order即为上面定义的fixture函数返回值product: alipayWapClient}res_pay requests.post(urlurl_pay, jsondata_pay).textres_pay json.loads(res_pay)# 断言assert res_pay[code] 0assert res_pay[data][payNo]assert res_pay[data][certificate]
总结
参数关联在接口自动化测试中是必然会遇到的场景设计关联参数的用例会直接影响到用例的维护当然这也是在接口自动化项目的架构设计时就需要考虑的问题。
对于刚入门的同学而言我们需要明白的是什么是参数关联以及可以怎样去处理它。
最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你