一篇搞懂Mock测试

这篇具有很好参考价值的文章主要介绍了一篇搞懂Mock测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 什么是Mock测试

mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象/数据/场景,用一个虚拟的对象来创建以便测试的测试方法。

2. Mock测试常见场景
  • 无法控制第三方系统接口的返回,返回的数据不满足要求
  • 依赖的接口还未开发完成,就需要对被测系统进行测试
3. Mock测试的优缺点

优点:

  • 团队可以并行工作,只要双方定义好接口,及接口数据规范,即可使用Mock构建出虚拟接口然后尽快进行开发和自测,以满足测试前移要求,也有利提早发现缺陷
  • 测试驱动开发TDD,通过利用Mock使测试人员提前接入测试从而达到测试驱动开发的效果
  • 提高测试覆盖率,通过Mock模拟一些业务逻辑复杂或无法通过正常手段进行操作的场景从而提高测试的覆盖率
  • 隔离测试环境与数据库环境,保证数据库的纯净

缺点:

  • 如果在测试过程中大量使用Mock,Mock测试的场景失去真实性,可能会导致在后续的系统性测试时才发现缺陷,使得缺陷发现得比较晚,造成后续修复成本大的严重后果
4. Python中的Mock库

很多语言现在都有Mock库,方便在单元测试时进行Mock测试,下面主要介绍Mock在Python中的使用

4.1 安装Mock库
pip install Mock
4.2 Mock在Python中的使用
# case1
import unittest
from mock import Mock

class SubClass(object):
    def add(self,a,b):
        """实现两个数相加"""
        pass



class TestSub(unittest.TestCase):
    """测试两个数相加用例"""
    def test_sub(self):
        sub = SubClass()        # 初始化被测函数类实例
        sub.add = Mock(return_value=10)        # mock add方法 指定返回10
        result = sub.add(5,5)               # 调用被测函数
        self.assertEqual(result,10)         # 断言实际结果与预期结果是否一致

if __name__ == "__main__":
    unittest.main()
# case2
import unittest
from mock import Mock

class SubClass(object):
    def add(self,a,b):
        """实现两个数相加"""
        return a + b



class TestSub(unittest.TestCase):
    """测试两个数相加用例"""
    def test_sub(self):
        sub = SubClass()        # 初始化被测函数类实例
        sub.add = Mock(return_value=10,side_effect=sub.add)        # 传递side_effect关键参数,覆盖return_value参数值,使用真实的add函数进行测试
        result = sub.add(5,11)               # 调用被测函数
        self.assertEqual(result,16)         # 断言实际结果与预期结果是否一致

if __name__ == "__main__":
    unittest.main()
# case3

import unittest
from mock import Mock

def verifyPhoneNum():
    '''
    验证手机号
    '''
    pass



class TestVerifyPhoneNum(unittest.TestCase):
    def test_verify_phone_num(self):
        data = {"code": "0100","msg": {"result": "Success","Isp": "中国移动"}}
        verifyPhoneNum = Mock(return_value=data)
        self.assertEqual("Success",verifyPhoneNum()["msg"]["result"])
        self.assertEqual("中国移动",verifyPhoneNum()["msg"]["Isp"])

if __name__ == "__main__":
    unittest.main()

case3的验证手机号中,肯定还会有其他的返回情况,我们可以预先定义好返回结果以供测试(一般接口文档已经有设计好)

# 手机号校验通过
{
    "code": "0100",
    "msg": {
        "result": "Success",
        "Isp": "中国移动"
    }
}

{
    "code": "0101",
    "msg": {
        "result": "Success",
        "Isp": "中国联通"
    }
}

{
    "code": "0102",
    "msg": {
        "result": "Success",
        "Isp": "中国电信"
    }
}

# 手机号格式错误
{
    "code": "0200",
    "msg": {
        "result": "Fail",
        "Isp": "",
        "errorinfo": "手机号格式错误"
    }
}

# 手机号已存在
{
    "code": "0300",
    "msg": {
        "result": "Fail",
        "Isp": "",
        "errorinfo": "手机号已存在"
    }
}

5. 使用Postman进行Mock测试

除了在编程语言上集成Mock,Mock测试还可用工具来进行模拟达到测试目的。

5.1 新建一个Mock Server

1、打开Postman,选中Mock Server项,点Create Mock Server
mock测试是什么,自动化测试,单元测试,驱动开发

2、填写Mock Server信息

mock测试是什么,自动化测试,单元测试,驱动开发
mock测试是什么,自动化测试,单元测试,驱动开发
mock测试是什么,自动化测试,单元测试,驱动开发

3、创建成功
mock测试是什么,自动化测试,单元测试,驱动开发

4、点击View Collection Docs查看信息

mock测试是什么,自动化测试,单元测试,驱动开发
mock测试是什么,自动化测试,单元测试,驱动开发

5、点击Open Request,创建一个请求(会自动创建一个Collection),填写必要信息

mock测试是什么,自动化测试,单元测试,驱动开发

6、请求结果
mock测试是什么,自动化测试,单元测试,驱动开发

6. 用Python访问创建的Mock Server
import unittest
import requests

url = r'https://b129ef27-436a-45f2-8971-9d8674201095.mock.pstmn.io/mock/mockdemo'
data = {
  "memberid": "354802185",
  "phonenum": "13724312459",
  "msg": {
      "Country": "中国",
      "Province": "广东省",
      "City": "深圳市",
      "Isp": "中国移动"
  },
  "type_code": 0
}
header = {
    "Content-Type": "application/json",
    "token": "91932f295a75a5a743974a0e4b308fc6",
    "x-api-key": "PMAK-63d8c41e8b44370ec5b5c595-780df67fc8c748328add9aec0286b89898"
}


class TestMockServer(unittest.TestCase):
    respone = requests.get(url=url,headers=header)
    result = respone.json()
    print(result)
    def test_code(self):
        self.assertEqual("200",self.result['code'])

    def test_result(self):
        self.assertEqual('Success',self.result['msg']['result'])


    def test_memberinfo(self):
        self.assertEqual('白金瀚至臻会员',self.result['msg']['memberinfo'])

    def test_membertype(self):
        self.assertEqual('666',self.result['msg']['membertype'])



if __name__ == "__main__":
    unittest.main()

运行结果:文章来源地址https://www.toymoban.com/news/detail-718501.html

{'code': '200', 'msg': {'result': 'Success', 'memberinfo': '白金瀚至臻会员', 'membertype': '666'}}
....
----------------------------------------------------------------------
Ran 4 tests in 0.002s

OK
接口路径	/mock/testdemo

请求头
Content-Type	application/json
token	91932f295a75a5a743974a0e4b308fc6

请求体
{
  "memberid": "354802185",
  "phonenum": "13724312459",
  "msg": {
      "Country": "中国",
      "Province": "广东省",
      "City": "深圳市",
      "Isp": "中国移动"
  },
  "type_code": 0
}

响应体
{
    "code": "200",
    "msg": {
        "result": "Success",
        "memberinfo": "白金瀚至臻会员",
        "membertype": "666"
    }
}

mock地址:
https://b129ef27-436a-45f2-8971-9d8674201095.mock.pstmn.io
API keys:
PMAK-63d8c41e8b44370ec5b5c595-780df67fc8c748328add9aec0286b89898

到了这里,关于一篇搞懂Mock测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 接口自动化测试:mock server之Moco工具

    什么是mock server mock:英文可以翻译为模仿的,mock server是我们用来解除依赖(耦合),假装实现的技术,比如说,前端需要使用某些api进行调试,但是服务端并没有开发完成这些api,那么前端的工作就被服务端阻塞了,那么就可以使用mock server假装实现这些api,能够返回特定

    2024年02月11日
    浏览(32)
  • 什么是双向链表,一篇搞懂双向链表

    还不清楚单向链表的同学可以去看我另一篇文章,实践总结:一篇搞懂链表——单链表和双指针技巧 首先,我们先看下双向链表(下文用双链表表述)的图示,见下图: 与单链表不同的是,双链表有两个方向,对应单链表节点中的一个引用字段next,双链表每个节点中都含有

    2024年03月13日
    浏览(32)
  • 单元测试之@Mock与@InjectMocks(一文搞懂)

    @Mock与@InjectMocks一般搭配组合使用,是单元测试必不可少的注解 @Mock:需要模拟的类,我们需要模拟哪些类,就用它修饰哪些类的变量,常用于第三方服务service @InjectMocks:要测试的类,使用@Mock修饰的对象,就是我们测试哪个类,就用它修饰对应的变量,会整合使用@Mock修饰

    2024年02月06日
    浏览(29)
  • 一篇搞懂tracert命令

    1.tracert命令的作用 简单网络诊断工具,探测数据包从源地址到目的地址经过的路由器IP地址 2.实现原理 图片来自网络方便理解 源端(SwitchA)向目的端(日志主机)发送一个UDP报文,TTL值为1,目的UDP端口号是大于30000的一个数,因为在大多数情况下,大于30000的UDP端口号是任

    2024年02月02日
    浏览(33)
  • 一篇搞懂HashMap,手写HashMap

    1. 算法复杂度:大 O 表示法 大O表示法 是一种特殊的表示法,指出了算法的速度有多快。 O(n) :表示该算法需要计算n次,比如常见的for循环: O(1) :无论多少元素参与运算,复杂度始终是计算一次,这个就是典型的最优解。例如查找数组元素: 2. 位运算 二进制的位运算包括

    2023年04月09日
    浏览(28)
  • OLED 行列设置一篇搞懂

    我们大家的目的就是想让我们的OLED显示出多彩的图案,但是我们该在去做呢,其实这些的是指都是去写寄存器来实现的(下图来源于网 络) 我相信,大家应该看了很多东西都没用懂,那些博客写了设置列地址的低四位,和设置列的高四位,页面地址,但你看完一定不太懂,这个效果

    2024年02月07日
    浏览(24)
  • 一篇搞懂Java多线程运行机制

    Java是一种支持多线程编程的语言。多线程可以让程序同时执行多个任务,从而提高程序的效率和响应速度。在本篇博客中,我将介绍Java多线程的基础知识,包括线程的创建、启动、中断以及线程同步等方面。 什么是程序? 程序是为完成特定任务,用某种语言编程写的一组指

    2023年04月15日
    浏览(29)
  • 如何理解场外期权交易?个股期权一篇搞懂

    场外期权是一种金融衍生品,指在非集中性的交易场所进行的非标准化的金融期权合约。它是一种买卖双方达成的合约,赋予买方在未来的某一特定日期以特定价格购买或出售一种资产的权利,但不必承担必须履行的义务。下文科普如何理解场外期权交易?个股期权一篇搞懂

    2024年04月24日
    浏览(41)
  • Springboot 使用插件 自动生成Mock单元测试 Squaretest

    很多公司对分支单测覆盖率会有一定的要求,比如 单测覆盖率要达到 60% 或者 80%才可以发布。 有时候工期相对紧张,就优先开发功能,测试功能,然后再去补单元测试。 但是编写单元测试又比较浪费时间,有没有能够很大程度上自动化生成单元测试的插件,自己改下就行

    2023年04月08日
    浏览(39)
  • 一篇搞懂数学在OpenGL中的应用及矩阵

    目录 一、图形学中的矩阵 1.矩阵的计算公式 2.矩阵变换 3.为什么旋转,平移都是左乘矩阵,不能右乘 4.齐次坐标系统 5.变换先后顺序 二、利用矩阵来变换图形 (补充) 三、OpenGL中的三种变换矩阵  话不多说,我把我看的视频链接贴出来,下面的笔记是由视频学习和自己的补

    2024年02月03日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包