https://www.cnblogs.com/zhangwuxuan/p/12928850.html

前言

今天跟小伙伴们一起来学习一下如何编写Python脚本进行mock测试。

什么是mock?

  • 测试桩,模拟被测对象的返回,用于测试

  • 通常意义的mock指的就是mock server, 模拟服务端返回的接口数据,用于前端开发,第三方接口联调

为什么要mock?

1. 解决依赖问题:当我们测试一个接口或者功能模块的时候,如果这个接口或者功能模块依赖其他接口或其他模块,那么如果所依赖的接口或功能模块未开发完毕,那么我们就可以使用mock模拟被依赖接口,完成目标接口的测试。

2.单元测试:如果某个功能未开发完成,我们又要进行测试用例的代码编写,我们也可以先模拟这个功能进行测试  

3.模拟复杂业务的接口:实际工作中如果我们在测试一个接口功能时,如果这个接口依赖一个非常复杂的接口业务,那么我们完全可以使用mock来模拟这个复杂的业务接口,其实  这个和解决接口依赖是一样的原理。 

4.前后端联调:如果你是一个前端页面开发,现在需要开发一个功能:根据后台返回的状态展示不同的页面,那么你就需要调用后台的接口,但是后台接口还未开发完成,可以借助mock来模拟后台这个接口返回你想要的数据。

如何mock?

1.利用抓包工具比如fiddler

2.可以利用web框架模拟,Django Flask ---python web开发框架,Flask的特点就是,结构简单,容易入门

一:利用flask编写一个最简单的接口
安装Flask, 在dos窗口输入:pip install flask
搭建mock服务端代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import random
import time
from flask import Flask,request,json
#实例化一个web服务对象
app=Flask(__name__)
#创建一个方法来处理请求
#定义一个路由--访问服务的根目录就可以得到结果
@app.route('/')
def hello():
    return '<h1>hello flask</h1>'
 
#构造一个接受post请求的响应
@app.route('/post',methods=['POST'])
def test_post():
    #处理接口发送过来的两个参数,将两个参数合并成一个字符串返回
    d1=request.form['d1']
    d2=request.form['d2']
    return d1+d2
if __name__ == '__main__':
    #运行服务,并确定服务运行的IP和端口
    app.run('127.0.0.1','9090')

启动mock服务端:

客户端代码:

import requests

1
2
3
4
5
6
body={
     'd1':'hi',
    'd2':'falsk12312312'
}
resp=requests.post('http://127.0.0.1:9090/post',data=body)
print(resp.text)

结果如下:

二:mock接口测试实战案例

接口文档如下:

极简交易支付接口

接口路径: /trade/purchase

请求方式: POST

请求参数:

参数

类型

是否必填

最大长度

描述

示例值

out_trade_no

String

64

商户订单号,64个符以内、可包含字母、数字、下划线;需保证在商户端不重复

20150320010101001

auth_code

String

64

支付授权码,25~30开头的长度为16~24位的数字,实际字符串长度以开发者获取的付款码长度为准

28763443825664394

subject

String

356

订单标题

Iphone6 16G

buyer_id

String

28

买家的支付宝用id,如果为空,会从传入的码值信息中获取买家 ID

2088202954065786

seller_id

String

28

如果该值为空,则默认为商户签约账号对应的支付宝用户ID

2088102146225135

total_amount

Price

11

订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]

如果同时传入【可打折金额】和【不可打折金

额】,该参数可以不用传入;如果同时传入了

【可打折金额】,【不可打折金额】,【订单总金额】三者,则必须满足如下条件:【订单总金额】=【可打折金额】+【不可打折金额】

88.88

响应参数:

请求头:键:Content-Type 值:application/json

请求示例:

{

'out_trade_no':'20150320010101001',

'auth_code':'28763443825664394',

'buyer_id':'2088202954065786',

'seller_id':'2088102146225135',

'subject':'Iphone6',

'total_amount':'88.88',

}

成功返回示例:

{
   'code':'40004',
  'msg':'Business Failed',
  'sub_code':'ACQ.TRADE_HAS_SUCCESS',
  'sub_msg':'交易已被支付',
  'trade_no':'2013112011001004330000121536',
  'out_trade_no':'6823789339978248'
}

失败返回示例:

{'error': {'password': '密码错误'}, 'success': 'false'}

搭建mock服务端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import random
import time
from flask import Flask,request,json
#实例化一个web服务对象
app=Flask(__name__)
#创建一个方法来处理请求
#定义一个路由--访问服务的根目录就可以得到结果
#构造一个接受post请求的响应
#处理极简交易接口
@app.route('/trade/purchase',methods=['POST'])
def purchase():
    #拿到客户端返回的数据
    res=json.loads(request.get_data())
    out_trade_no=res['out_trade_no']
    auth_code=res['auth_code']
    data={
        'code''40004',
        'msg''Business Failed',
        'sub_code''ACQ.TRADE_HAS_SUCCESS',
        'sub_msg''交易已被支付',
        'trade_no''2013112011001004330000121536',
        'out_trade_no''6823789339978248'
    }
    #把out_trade_no改成客户端发送过来的数据
    data['out_trade_no']=out_trade_no
    data['trade_no']=time.strftime('%Y%m%d%H%M%S')+str(random.random()).replace('0.','')
    #验证授权码
    if auth_code !='28763443825664394':
        return {'coode':'50000','msg':'请求码验证失败'}
 
    return data
 
if __name__ == '__main__':
    #运行服务,并确定服务运行的IP和端口
    app.run('127.0.0.1','9090')

客户端代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
#利用request发送post请求给服务端
import requests
data={
    'out_trade_no':'20150320010101001',
    'auth_code':'2876344382566439',
    'buyer_id':'2088202954065786',
    'seller_id':'2088102146225135',
    'subject':'Iphone6',
    'total_amount':'88.88',
}
 
resp=requests.post('http://127.0.0.1:9090/trade/purchase',json=data)
print(resp.json())

返回结果如下:

这样就完成了mock接口测试了,小伙伴们学会了吗?

[转帖]Python-Mock接口测试的更多相关文章

  1. Python mock

    在测试过程中,为了更好地展开单元测试,mock一些数据跟对象在所难免,下面讲一下python的mock的简单用法. 关于python mock,网上有很多资料,这里不会讲的特别深,但一定会是实用为主, ...

  2. 使用 Python Mock 类进行单元测试

    数据类型.模型或节点——这些都只是mock对象可承担的角色.但mock在单元测试中扮演一个什么角色呢? 有时,你需要为单元测试的初始设置准备一些“其他”的代码资源.但这些资源兴许会不可用,不稳定,或者 ...

  3. Python Mock的入门(转)

    原文:https://segmentfault.com/a/1190000002965620 Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西. ...

  4. 【转】基于Python的接口测试框架实例

    下面小编就为大家带来一篇基于Python的接口测试框架实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧   背景 最近公司在做消息推送,那么自然就会产生很多接口,测试 ...

  5. Python Mock的入门学习

    一.Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西.准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象 ...

  6. 基于python的接口测试框架设计(三)接口测试的框架

    基于python的接口测试框架设计(三)接口测试的框架 其实我这里用到的是unittest单元测试框架,,这个框架好就好在比较清楚,,setup terdown都可以处理一些初始化及完成后的工作 主要 ...

  7. 基于python的接口测试框架设计(二)配置一些参数及文件

    基于python的接口测试框架设计(二)配置一些参数及文件 我这里需要基于我的项目配置的主要是登陆参数.以及baseURL ,把这些放在单独的文件里  毕竟导入的时候方便了一些 首先是url 图略 建 ...

  8. 基于python的接口测试框架设计(一)连接数据库

    基于python的接口测试框架设计(一)连接数据库 首先是连接数据库的操作,最好是单独写在一个模块里, 然后便于方便的调用,基于把connection连接放在__init__()方法里 然后分别定义D ...

  9. 基于Python的接口测试框架实例

    文章来源:http://www.jb51.net/article/96481.htm 下面小编就为大家带来一篇基于Python的接口测试框架实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考. ...

  10. python request接口测试笔记(1)

    python request接口测试笔记(1) 涉及到的功能说明: 需要登录拿到token,才能进行下一个接口的请求 读取csv文件中的信息,作为接口的参数 将接口响应结果,写入csv文件,以便分析统 ...

随机推荐

  1. 跟我学丨如何用鲲鹏服务器搭建Hadoop全分布式集群

    摘要:今天教大家如何利用鲲鹏服务器搭建Hadoop全分布式集群,动起来··· 一.Hadoop常见的三种运行模式 1.单机模式(独立模式)(Local或Standalone Mode) 默认情况下Ha ...

  2. 遥居前列!华为云GaussDB再获行业权威验证

    摘要:北京国家金融科技认证中心正式公布了2022年通过"分布式数据库金融标准验证"的数据库产品名单.华为云GaussDB金融级分布式数据库以突出的技术优势通过验证,跃然榜上,且测试 ...

  3. 详解物联网Modbus通讯协议

    摘要:Modbus是当前非常流行的一种通讯协议. 本文分享自华为云社区<一文搞懂物联网Modbus通讯协议丨[拜托了,物联网!]>,作者: jackwangcumt. 1 概述 随着IT技 ...

  4. 4种Spring Boot 实现通用 Auth 认证方式

    摘要: 文章介绍了 spring-boot 中实现通用 auth 的四种方式,包括传统 AOP.拦截器.参数解析器和过滤器,并提供了对应的实例代码,最后简单总结了下它们的执行顺序. 本文分享自华为云社 ...

  5. 乐高式扩展:在Seal软件供应链防火墙中轻松集成代码规范工具

    上个月,Seal 软件供应链防火墙 v0.2(以下简称"Seal")正式发布,这一版本实现了可扩展架构,用户可以根据自身需求插件式集成原生或第三方解决方案,灵活扩展扫描能力. 在前 ...

  6. LinkedBlockingQueue实现的生产者和消费者模型

    首先 LinkedBlockingQueue 是线程安全的阻塞队列,LinkedBlockingQueue实现的生产者和消费者模型 阻塞队列与我们平常接触的普通队列(LinkedList或ArrayL ...

  7. Java 网络编程 —— ServerSocket 详解

    构造 ServerSocket ServerSocket 的构造方法有以下几种重载形式 ServerSocket() throws IOException ServerSocket(int port) ...

  8. 压测工具 wrk

    wrk 是一款针对 Http 协议的基准测试工具,它能够在单机多核 CPU 的条件下,使用系统自带的高性能 I/O 机制,如 epoll,kqueue 等,通过多线程和事件模式,对目标机器产生大量的负 ...

  9. 【白话科普】聊聊 DNS 的那些小知识

    你是否在上网时,遇到过这样的情况:QQ 能正常发送消息,但是网页却打不开,查看网络连接又正常显示.面对这种情况很多小伙伴都感到有些无措.那究竟要怎么处理,这究竟是怎么回事呢? 上网查询得知,一般情况下 ...

  10. 【JAVA基础】JSON转换

    JSON转换 fastJson [[JSON教程]系统讲解JSON语法格式和JSON数据的转换,以及FastJSON的使用] https://www.bilibili.com/video/BV1VN4 ...