Python模拟接口响应之Mock Server

我们接着之前的《接口服务模拟之Mock Server》的文章接着往下学习,这次我们使用Python Request来验证我们的使用Mock Server模拟响应的相关服务。

单接口服务验证

独立的接口服务验证,相互之间没有依赖关系

Python模拟接口响应之Mock Server

如上图所示:

① 请求方法:post

② 请求的地址:http://127.0.0.1:12306/order

③ 请求头(Content-Type):application/json; charset=gbk

Requests验证过程

说明:这里不会介绍Requests的使用,这里主要分享验证单接口提供的服务。

实现过程:

import requests
import logging
import json

class Order():

    def order_new(self,url,parms):

        logging.basicConfig(level=logging.INFO)

        parm = json.dumps(parms)

        head={'Content-Type': 'application/json'}#定义请求头类型

        respone=requests.post(url,data=parm,headers=head)

        logging.info('响应码:'+str(respone.status_code))

        respones=respone.json()

        logging.info('响应Json:'+str(respones))

        ordernum=respones['ordernum']

        logging.info('获取订单号:' + str(ordernum))

        orderid = respones['orderid']

        logging.info('获取订单号:' + str(orderid))



if __name__=="__main__":

    url="http://127.0.0.1:12306/order"#请求地址

    parm={

            "productType":"NORMAL_CARGO",

            "shipConsigneeId":"135401",

            "sRegionId":22592,

            "customerOuId":12707,

            "boBusinessTypeId":10637}#请求参数

    order=Order()

order.order_new(url,parm)

响应结果:

Python模拟接口响应之Mock Server

说明:

① 从响应结果来看,我们的接口服务是正常;
② 返回的值也是和预期相符的;

知识扩展:

① parm = json.dumps(parms):将parms转换为Json格式。可以使用type来验证类型。
② respones=respone.json():响应报文转换为Json格式。
③ ordernum=respones['ordernum']:根据响应结果,Key获取Value值。

请求与响应分离

即request和response分别在json文件里,但order.json和order_response.json这2个文件需要在同一个目录下。内容如下

order.json文件内容:

[

  {

    "request":

    {

      "method":"post",

      "uri":"/order",

      "json":

      {

        "productType":"NORMAL_CARGO",

        "shipConsigneeId":"135401",

        "sRegionId":22592,

        "customerOuId":12707,

        "boBusinessTypeId":10637

      }

    },

    "response":

    {

 "file":"order_response.json"

    }

  }

]

说明:

① response部分放的是响应json文件的名称,而不是具体的内容;

② 这样就实现request和response的分离;

③ 这样做的好处是方便扩展与维护;

order_response.json文件内容:

{

  "customerOuId":"12707",

  "projectId":34512,

  "carrierId":"2343",

  "ordernum":"TP78734340909",

  "orderid":"T34567"

}

说明:

① 响应的内容单独放在一个Json文件里,方便维护,扩展。

验证结果

Python模拟接口响应之Mock Server

说明:响应符合预期,说明这么处理没有问题。

接口服务相互依赖

业务场景:我们上面的单接口实现了订单的新建,并返回订单号与订单ID。那么现在我需要根据订单号和订单ID实现添加订单的明细,即订单明细添加依赖订单新建接口。那么应该怎么来实现呢?

Order.json实现

[

  {

    "request":

    {

      "method":"post",

      "uri":"/order",

      "json":

      {

        "productType":"NORMAL_CARGO",

        "shipConsigneeId":"135401",

        "sRegionId":22592,

        "customerOuId":12707,

        "boBusinessTypeId":10637

      }

    },

    "response":

    {

      "file":"order_response.json"

    }

  },

  {

    "request":

    {

      "method":"post",

      "uri":"/orderdetail",

      "json":

       {

        "itemName":"testing",

        "cargoOwnerId":10240,

        "itemId":232634,

        "expectedVolume":1000,

        "ordernum":"TP78734340909",

       "orderid":"T34567"

      }

    },

    "response":

    {

      "file":"orderdetail_response.json"

    }

  }

]

说明:

① 增加了一个添加订单明细的接口 /orderdetail

② 可以看到明细接口的请求报文里依赖订单新建成功后的订单号和订单

ID("ordernum":"TP78734340909",”orderid”:”T34567”)

③ 响应的报文在orderdetail_response.json里,这2个文件在同一个目录,切记

orderdetail_response.json实现

{

  "msg":"success",

  "status":201,

  "consignorId":10240

}

依赖接口服务验证

Python模拟接口响应之Mock Server

说明:

① 从响应结果来看,符合我们的预期;

② 接口服务正常;

Requests验证过程(服务依赖)

import requests

import logging

import json

class Order():

    def order_new(self):

        url =

 "http://127.0.0.1:12306/order"  

# 请求地址

        parm = {         "productType": "NORMAL_CARGO",

            "shipConsigneeId": "135401",

            "sRegionId": 22592,

            "customerOuId": 12707,

            "boBusinessTypeId": 10637}  # 请求参数

        logging.basicConfig(level=logging.INFO)

        parm = json.dumps(parm)

        head={'Content-Type': 

'application/json'}#定义请求头类型

        respone=requests.post(url,data=parm,headers=head)

        logging.info('响应

码:'+str(respone.status_code))

        respones=respone.json()

        logging.info('响应

Json:'+str(respones))

        ordernum=respones['ordernum']

        logging.info('获取订单号:' +

 str(ordernum))

        orderid = respones['orderid']

        logging.info('获取订单号:' +

 str(orderid))

        return ordernum,orderid

    def order_detail(self):

        logging.basicConfig(level=logging.INFO)

        ordernum,orderid=self.order_new()

        url = 

"http://127.0.0.1:12306/orderdetail" 

 # 请求地址

        parm = {

                "itemName":"testing",

                "cargoOwnerId":10240,

                "itemId":232634,

                "expectedVolume":1000,

                "ordernum":ordernum,

                "orderid":orderid}  # 请求参数

        parms = json.dumps(parm)

        head={'Content-Type':

 'application/json'}#定义请求头类型

        respone=requests.post(url,data=parms,headers=head)

        logging.info('响应

码:'+str(respone.status_code))

        respones = respone.json()

        logging.info('响应Json:' + str(respones))

if __name__=="__main__":

    order=Order()

order.order_detail()

响应结果:

Python模拟接口响应之Mock Server

说明:

① order_detail函数里的请求parms依赖order_new的返回值,这就解决接口之间的依赖关系,如图

Python模拟接口响应之Mock Server

② 从响应结果来看,符合我们接口服务的预期。

Python模拟接口响应之Mock Server

源自公众号 测试零零七



留言