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. 网络地图服务(WMS)详解

    目录 1.概述 2.GetCapabilities 3.GetMap 4.GetFeatureInfo 阅读本文之前可参考前文:<地图服务器GeoServer的安装与配置>与<Geo ...

  2. Java开发手册精华总结

    阿里 Java 开发手册的思考总结 一个优秀的工程师和一个普通的工程师的区别,不是满天飞的架构图,他的功底体现在所写的每一行代码上. -- 毕玄 1. 命名风格 [书摘]类名用 UpperCamelC ...

  3. 关于汽车OTA,这篇科普文能告诉你

    随着汽车中软件发挥的作用越来越重要,软件定义汽车已经是行业内的共识.汽车行业的发展极有可能最终像手机产业一样,基础硬件差异会越来越小,关键在于汽车给用户的体验的多样性,以及汽车产品在不同场景下满足用户 ...

  4. 当物联网遇上云原生:K8s向边缘计算渗透中

    摘要:K8s正在向边缘计算渗透,它为边缘侧的应用部署提供了便利性,在一定程度上转变了边缘应用与硬件之间的关系,将两者的耦合度降低. 本文分享自华为云社区<云原生在物联网中的应用[拜托了,物联网! ...

  5. CWE4.6标准中加入 OWASP 2021 TOP10

    摘要: 新发布的CWE4.6标准,加入了OWASP 2021 TOP10的视图. 本文分享自华为云社区<CWE 4.6 和 OWAPS TOP10(2021)>,作者: Uncle_Tom ...

  6. Walrus 入门教程:如何创建模板以沉淀可复用的团队最佳实践

    模板是 Walrus 的核心功能之一,模板创建完成后用户可以重复使用,并在使用过程中逐渐沉淀研发和运维团队的最佳实践,进一步简化服务及资源的部署.用户可以使用 HCL 语言自定义创建模板,也可以一键复 ...

  7. 火山引擎DataLeap的Data Catalog系统公有云实践 (上)

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 前言 Data Catalog 通过汇总技术和业务元数据,解决大数据生产者组织梳理数据.数据消费者找数和理解数的业 ...

  8. JDK,Mysql,Tomcat Linux安装

    Linux的软件安装 JDK安装 注意:rpm与软件相关命令 相当于window下的软件助手 管理软件 步骤: 1)查看当前Linux系统是否已经安装java 输入 rpm -qa | grep ja ...

  9. 如何在 EF Core 中使用乐观并发控制

    什么是乐观并发控制? 乐观并发控制是一种处理并发访问的数据的方法,它基于一种乐观的假设,即认为并发访问的数据冲突的概率很低.在乐观并发控制中,系统不会立即对并发访问的数据进行加锁,而是在数据被修改时, ...

  10. HF Hub 现已加入存储区域功能

    我们在 企业版 Hub 服务 方案中推出了 存储区域(Storage Regions) 功能. 通过此功能,用户能够自主决定其组织的模型和数据集的存储地点,这带来两大显著优势,接下来的内容会进行简要介 ...