# python+pytest接口自动化主要参数关系

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-13T07:09:00.000Z
> 分类: 其他
> 标签: AI, Python, Java
> 原文链接: http://117.50.162.249:3000/yun/articles/626

---

# python+pytest接口自动化主要参数关系

> 来源: https://www.ucloud.cn/yun/130273.html
> 作者: 89542767
> 发布日期: 发布于2023-01-13 15:09

文章主要是详细介绍了python+pytest接口自动化技术主要参数关系，主要参数关系，又叫插口关系，即插口之间产生参数联络或依靠，大量相关知识必须的小伙伴们可可以了解一下

　　序言

　　那么今天，小编想跟大伙儿来讲讲python+pytest接口自动化测试主要参数关系，小编那边就不多说了废话了，大家可以直接直入主题。

　　一、什么叫主要参数关系？

　　主要参数关系，又叫插口关系，即插口之间产生参数联络或依靠。在做完某一作用服务时，有时候必须按序要求好几个插口，这时候在一些插口中间可能存有关联性。例如：B接口某一或一些请求参数是由启用A插口获得的，即必须要先要求A插口，从A接口回到信息中取得所需要的字段值，在要求B插口时做为请求参数传到。

　　二、有什么情景？

　　比较常见的情景其一就是：要求登陆插口后掌握到token值，后面别的接口请求的时候需要将token做为请求参数传到。

　　又比如下单--&gt;支付场景，启用下单插口形成订单信息之后回到订单编号，订单编号发送给支付平台开展付款。

　　三、主要参数关系情景

　　以比较常见的网络购物为例子，相对应的情景及要求我们能大概简单化如下所示（可想到淘宝购买过程）：

　　客户在加入购物车挑选产品点一下【去清算】进到下单页，下单页点一下【下单】这时候首先会要求下单插口创建订单

　　随后会用建立订单去要求获得付款凭证插口，这一插口会唤起支付页面，其实就是输入支付密码的支付页面

　　键入交易密码之后要求金融服务的支付平台开展具体付款，付款得到的结果会回到给要求方，告之是不是交易成功

　　这一环节中涉及的插口实际上都是有关系的，大家需要对整个过程进行测试那就需要按顺序调用这所有的一切涉及的插口。

　　但是这里我们只需搞明白主要参数关系，那样下列单插口和获得付款凭证插口为例子，举例子就行了，即先要求下单插口形成订单编号，先拿这一订单编号去要求获得付款凭证插口，才可以唤起支付页面然后进行付款。

　　下单接口如下：

　　接口地址：&lt;服务器&gt;/trade/order/purchase

　　请求类型：post

　　请求参数：

```
　　{
　　"goodsId":10,//商品id
　　"goodsSkuId":33,//sku id
　　"num":2,//购买数量
　　"tradePromotion":{//选择的优惠项
　　"type":1,//类型&lt;1：优惠券&gt;
　　"promotionId":1//优惠id
　　}
　　}
　　返回值data：
　　{
　　"code":0,
　　"msg":"成功",
　　"data":{
　　"tradeNo":"0020220116204344962706666"//交易订单号
　　},
　　"t":1639658625474
　　}
　　获取支付凭证接口如下：
　　接口地址：&lt;服务器&gt;/pay/pre/consum
　　请求类型：post
```

　　请求参数：

```
　　{
　　"orderNo":"0020220116204344962706666",//交易订单号
　　"product":"alipayWapClient"//支付渠道&lt;alipayWapClient：支付宝手机网页支付&gt;
　　}
　　{
　　"orderNo":"0020220116204344962706666",//交易订单号
　　"product":"alipayWapClient"//支付渠道&lt;alipayWapClient：支付宝手机网页支付&gt;
　　}
　　返回值data:
　　{
　　"code":0,
　　"msg":"成功",
　　"data":{
　　"payNo":"123213213219379213",
　　"certificate":"&lt;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"&gt;n&lt;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;}"&gt;n&lt;input type="submit"value="立即支付"style="display:none"&gt;n&lt;/form&gt;n&lt;script&gt;document.forms[0].submit();&lt;/script&gt;"
　　},
　　"t":1639659171031
　　}
```

　　在其中orderNo字段名使这俩插口关系起来。每次产生的订单编号都是一样的，因此在检测这样的场景时，那就需要使这俩接口主要参数开展关系，才走通。

　　四、脚本编写

　　那在pytest架构的功能测试中，主要参数关系能够如何解决呢？在这里带来二种构思，如下所示：

　　依据需求场景的启用时序图，在测试用例中按序调用接口

　　将依靠的插口编为fixture函数公式，并用yield回到下一个插口所需要的主要参数

　　1、在用例中按顺序调用

　　代码示例如下：

```
　　import requests
　　import json
　　import pytest
　　def test_order_pay():
　　'''
　　创建订单-&gt;获取支付凭证，调起支付界面
　　: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):
　　'''
　　下单-&gt;支付场景校验
　　: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"]
```

　　五、总结

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

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

　　综上所述，这篇文章就给大家介绍到这里了，希望可以给大家带来帮助