资讯专栏INFORMATION COLUMN

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

89542767 / 374人阅读

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


  序言


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


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


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


  二、有什么情景?


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


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


  三、主要参数关系情景


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


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


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


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


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


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


  下单接口如下:


  接口地址:<服务器>/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:支付宝手机网页支付>
  }
  {
  "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="{"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"]


  五、总结


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


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


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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/130273.html

相关文章

  • 2021-09-03-接口动化-python+requests+pytest+csv+yaml+a

    摘要:本套代码和逻辑是本人的劳动成果,如果有转载需要标注,非常适合公司做项目的同学小白也可以学哦接口自动化项目目录公共方法的封装如果不用配置文件可以使用这个方法进行封装但是有一定的缺陷可以不使用字典。这是在正常的命令行解析之前发生的。 ...

    李昌杰 评论0 收藏0
  • 做完动化测试,但别让不会汇报毁了你...

    摘要:前端自动化测试百度搜索功能实战可以与结合生成测试报告。以网页版本的百度为例,百度首页呈现的功能新闻网页贴吧知道音乐图片视频地图等,我们以百度网页的搜索功能为例,使用结合自动化测试框架,完成一个搜索功能的测试。 ...

    HelKyle 评论0 收藏0
  • 2021年软件测试工具总结——单元测试工具

    摘要:单元测试框架作为的标准库,是其他单元测试框架的基础。可以和和配合使用编写单元测试。官网地址单元测试覆盖率工具单元测试中还需要用到代码覆盖率工具。代码覆盖率统计工具用来发现没有被测试覆盖的代码,完善单元测试的覆盖率。 在应用程序中,单元是具有一个或多个输入和单个输出的软件中最小可测试部分。单元...

    qingshanli1988 评论0 收藏0
  • 带你深入理解动化测试框架Pytest的配置文件!

    摘要:其中用到编程等,还需要花更多的精力去深入学习,当每项技能都能掌握到一定深度,才能称为一个完整的知识体系。 都有哪些种类的配置文件 pytest.ini:pytes...

    wayneli 评论0 收藏0
  • python+pytest动化技术测试函数测试类测试标准的封装形式

      本文关键阐述了python+pytest自动化技术测试函数测试类测试标准的封装形式,文章内容紧扣主题开展详尽的基本介绍,具有很强的实用价值,务必的朋友可以学习一下  序言  那么今天,我想跟大家聊聊python+pytest接口自动化里将编码开展封装形式,只有把测试程序开展封装形式,才会被测试框架鉴别实行。  例如单独插口要求编码如下所示:  importrequests   headers=...

    89542767 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<