8年测试老鸟整理,接口自动化测试mock总结,这些你会多少?

news2024/11/13 4:04:06

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

Mock原理/实现机制

在某些时候,后端在开发接口的时候,处理逻辑非常复杂,在测试的时候,后端在未完成接口的情况下该如何去测试呢?

我们需要测试,但是有些请求又需要修改一下参数,或者改变一下request实现的方式,比如修改状态码,产生的图片要进行替换,或者是替换执行文件等

Mock简介

Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为。

在项目的单元测试过程中,会遇到:
接口的依赖;
外部接口调用;
测试环境非常复杂;

单元测试应该只针对当前单元进行测试,所有的内部或外部的依赖应该是稳定的,已经在别处进行测试过的。
使用mock 就可以对外部依赖组件实现进行模拟并且替换掉,从而使得单元测试将焦点只放在当前的单元功能。

解决测试依赖

例如,我们要测试A模块,然后A模块依赖于B模块的调用。但是,由于B模块的改变,导致了A模块返回结果的改变,从而使A模块的测试用例失败。其实,对于A模块,以及A模块的用例来说,并没有变化,不应该失败才对。

这个时候就是mock发挥作用的时候了。通过mock模拟掉影响A模块的部分(B模块)。至于mock掉的部分(B模块)应该由其它用例来测试。

简单的案例实现mock

基本功能

# function.py 
def multiply(x, y): 
	return x * y 

def add_and_multiply(x, y): 
	addition = x + y multiple = multiply(x, y) 

# 回调函数 return (addition, multiple)

针对 add_and_multiply()函数编写测试用例。

import mock
import requests
import unittest
url = "www.baidu.com/login"
data = {
  "user_id": "001",
  "password": "caichen"
}
def post_request(url, data):
  """登陆百度账号"""
  res = requests.post(url, data).json()
  return res
class TestLogin(unittest.TestCase):
  """单元测试"""
  def setUp(self) -> None:
	  print("case开始执行")
  def tearDown(self) -> None:
	  print("case执行结束")
  def test_01(self):
	  """模拟数据判断是否正确"""
	  url = "www.baidu.com/login/tieba"
	  data = {
		  "user_id": "001"
	  }
	  sucess_test = mock.Mock(return_value=data)
	  post_request = sucess_test
	  res = post_request
	  self.assertEqual("654321", res())
	  # self.assertEqual({'user_id': '001'},res())
if __name__ == '__main__':
  unittest.main()

mock实现get数据模拟

举个例子来说:我们有一个简单的客户端实现,用来访问一个URL,当访问正常时,需要返回状态码200,不正常时,需要返回状态码404。

首先,我们的客户端代码实现如下:

import requests


def send_request(url):
  r = requests.get(url)
  return r.status_code
def visit_ustack():
  return send_request('http://www.xxxxx.com')
# 外部模块调用visit_ustack()来访问baidu的官网。下面我们使用mock对象在单元测试中分别测试访问正常和访问不正常的情况。
import unittest
import mock
import client


class TestClient(unittest.TestCase):
	def test_success_request(self):
	  success_send = mock.Mock(return_value='200')
	  client.send_request = success_send
	  self.assertEqual(client.visit_ustack(), '200')
	def test_fail_request(self):
	  fail_send = mock.Mock(return_value='404')
	  client.send_request = fail_send
	  self.assertEqual(client.visit_ustack(), '404')

找到要替换的对象:需要测试的是visit_ustack这个函数,那么需要替换掉send_request这个函数。

实例化Mock类得到一个mock对象,并且设置这个mock对象的行为。在成功测试中,我们设置mock对象的返回值为字符串“200”,在失败测试中,我们设置mock对象的返回值为字符串"404"。

使用这个mock对象替换掉我们想替换的对象。替换掉了client.send_request

写测试代码。调用client.visit_ustack(),并且期望它的返回值和我们预设的一样。
上面这个就是使用mock对象的基本步骤了。

在上面的例子中替换了自己写的模块的对象,其实也可以替换标准库和第三方模块的对象,方法是一样的:先import进来,然后替换掉指定的对象就可以了。

Mock和mockrunner的区别

Mockrunner用在J2EE环境中进行应用程序的模拟测试。它不仅支持Struts actions,servlets,过滤器和标签类,还包括一个JDBC和一个JMS测试框架,可以用于测试基于EJB的应用程序。

Mockrunner扩展了JUnit并模拟了必要的行为,而无需调用实际的基础结构。它不需要正在运行的应用程序服务器或数据库。此外,它不会调用web容器或Struts ActionServlet。

它非常快速,使用户可以在测试的所有步骤中操纵所有涉及的类和模拟对象。它可以用于为基于J2EE的应用程序编写非常复杂的单元测试,而不会产生任何开销。Mockrunner不支持任何类型的容器内测试。

Mockrunner不会读取任何配置文件,例如web.xml或struts-config.xml。您可以使用Mockrunner API指定所有参数。

因此,可以将servlet,过滤器,标签和Struts动作作为可重用组件进行测试,而不管您在一个或另一个应用程序中使用的设置如何。无法测试配置文件中的定义。如果要这样做,可以将StrutsTestCase用于基于Struts的应用程序或Cactus。

接口测试面试

项目中如何做接口测试?
通过测试工具…进行参数、请求参数、返回参数效验?
接口开发过程中如何进行case编写?
规则文档熟悉通过mock校验格式?
如何理解Mock?
模拟返回参数,模拟接口?
Mock在工作中的运行?
帮助前端实现正常开发?

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

不要停下脚步,把梦想变成行动,让汗水浇灌未来。每一次努力都是自我超越的机会,没有放弃,就有成功的可能。勇往直前,迎接生命的挑战,用汗水和奋斗书写精彩人生!

只有不断地努力奋斗,才能让梦想变为现实。每一次的失败都是成长的机会,坚持下去你就会发现自己变得更加强大。别忘了,过程虽难,但结果会值得一切!

只要你有梦想,勇于追求,不断努力,就一定能够实现自己的价值和人生目标。无论遇到什么困难和挑战,都要坚持自己的信念,不放弃、不退缩,相信成功一定属于你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/671646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【youcans动手学模型】MobileNet 模型-CIFAR10图像分类

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【youcans动手学模型】MobileNet 模型-CIFAR10图像分类 1. MobileNet 卷积神经网络模型1.1 模型简介1.2 论文介绍 2. 在 PyTorch 中定义 MobileNet V1 模型类2.1 深度可分离卷积(DSC&…

前端vue入门(纯代码)11

【11.全局事件总线(Global Event Bus)】 全局事件总线:实现任意组件间通信 【原理图】 结合上图,假若C组件想要传递数据给A组件,那么,就通过全局事件总线在A组件中绑定【$on】一个自定义事件demo,并界定一个参数来接…

如果我们20年后仍然在讨论Kubernetes,那将是技术上悲哀的时刻

这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党 Kelsey Hightower Google Cloud首席开发者 引子 在 Kubecon 上,Kelsey Hightower 曾经遇到过一个带有 Kubernetes 纹身的人,这让他开始…

工业相机的镜头如何选择?

相机的镜头如何计算,如果看公式的话,需要知道相机sensor的尺寸,相元的尺寸,计算起来数据也比较复杂,下面教大家一个简单的方法,就是如何借助镜头计算工具来使用。 巴斯勒相机的镜头选型地址 工业镜头选型…

我们该如何提升测试效率?

在大部分研发项目经理心中,进度往往会放在第一位,其次是成本,最后是质量,当然人员队伍最好也要稳定。天下武功,唯快不破:进度 > 成本 > 质量 > 人。 这个说法并不是绝对,今天我们并不是…

【Linux】线程同步条件变量

文章目录 一. 为什么要线程同步二. 条件变量1. 条件变量的使用2. 简单使用 结束语 一. 为什么要线程同步 通过互斥量,也就是加锁解锁,我们可以实现线程互斥,但是当访问的临界区代码较少时,线程执行会出现不停加锁解锁的情况。这样…

uniapp项目中使用vue3开发多端项目实践

目录 1、使用版本说明2、创建项目3、运行项目4、uniapppinia本地缓存插件PiniaPluginUnistorage5、 uni-app vue3 vite ts 项目结构 本项目中使用vue3开发多端项目实践,hbuilderx内置vue3模块,使用了vite4.x构建,编译构建项目的速度比火箭…

dpmsolver 论文核心整理

推导 DPM-Solver1的误差 由正文所述: 利用泰勒展开: B.3式就是换了个元 δ λ − λ s λ t − λ s \delta\frac{\lambda-\lambda_s}{\lambda_t-\lambda_s} δλt​−λs​λ−λs​​,代入论文公式(3.4)的积分项(不含系数&…

一套完整的工厂车间现场管理指南,车间主管收藏好了!

车间是企业的基本层,搞好车间现场管理,有利于企业增强竞争力,提高产品质量和员工素质,保证安全生产,而车间班组长是生产线的主要管理者,是直接“当家人”,对生产现场状况了如指掌,对…

0001Java程序设计-SSM校园快递系统的设计与实现

摘 要 21世纪之后,全球信息化逐渐加快,尤其表现在近几年来电商行业的飞速发展,人们足不出户就可以买到自己想要的商品,尤其是青年大学生,追求新颖,更加乐忠于网络购物。网络购物的增加,就导致物…

【二】python爬虫进行AES解密遇到的问题

1、TypeError: Object type <class ‘str’> cannot be passed to C code 报错如下&#xff1a; File "C:\Python311\Lib\site-packages\Crypto\Util\_raw_api.py", line 143, in c_uint8_ptrraise TypeError("Object type %s cannot be passed to C cod…

【使用Spring Cloud Gateway构建微服务网关】—— 每天一点小知识

&#x1f4a7; 使用 S p r i n g C l o u d G a t e w a y 构建微服务网关 \color{#FF1493}{使用Spring Cloud Gateway构建微服务网关} 使用SpringCloudGateway构建微服务网关&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主…

54 KVM工具使用指南-vmtop使用指南

文章目录 54 KVM工具使用指南-vmtop使用指南54.1 概述54.1.1 多架构支持54.1.2 显示项说明54.1.2.1 AArch64和x86_64架构公共显示项54.1.2.2 仅AArch64架构的显示项54.1.2.3 仅x86_64架构的显示项 54.2 使用方法54.2.1 语法格式54.2.2 选项说明54.2.3 快捷键 54.3 示例 54 KVM工…

MSP432学习笔记10:串口接收字符串命令并执行任务

今日终于得以继续我的MSP432电赛速通之路&#xff1a; 串口通信是单片机需要学习深入的一个很重要的板块&#xff0c;通过串口&#xff0c;我们可以实现许多数据收发与调试工作&#xff0c;可谓是非常方便快捷。 今日就跟随我的脚步&#xff0c;逐步扎实地学习如何编程MSP432…

2023-06-21:redis中什么是BigKey?该如何解决?

2023-06-21&#xff1a;redis中什么是BigKey&#xff1f;该如何解决&#xff1f; 答案2023-06-21&#xff1a; 什么是bigkey bigkey是指存储在Key-Value数据库中的键对应的值所占用的内存空间较大。举个例子&#xff0c;如果值是字符串类型&#xff0c;它可以达到最大512MB的…

堆体系结构概述

1、逻辑概述 2、堆会出现的异常 3、物理上划分 &#xff08;1&#xff09;新生区 新生区是类的诞生、成长、消亡的区域&#xff0c;一个类在这里产生&#xff0c;应用&#xff0c;最后被垃圾回收器收集&#xff0c;结束生命。新生区又分为两部分&#xff1a; 伊甸区&#xff0…

Goby 漏洞发布|WordPress User Post Gallery 插件 upg_datatable 远程代码执行漏洞(CVE-2022-4060)

漏洞名称&#xff1a;WordPress User Post Gallery 插件 upg_datatable 远程代码执行漏洞&#xff08;CVE-2022-4060&#xff09; English Name&#xff1a;WordPress plugins User Post Gallery upg_datatable RCE Vulnerability (CVE-2022-4060) CVSS core: 9.8 影响资产数…

Observability:如何把 Elastic Agent 采集的数据输入到 Logstash 并最终写入到 Elasticsearch

在之前的文章 “安装独立的 Elastic Agents 并采集数据 - Elastic Stack 8.0”&#xff0c;我们详述了如何使用 No Fleet Server 来把数据写入到 Elasticsearch 中。在今天的文章中&#xff0c;我们来详述如下使用 Elastic Agents 在独立&#xff08;standalone&#xff09;模式…

Gradio Blocks:自定义交互式Web应用和演示

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

GitPySearch: 全局Python代码搜索工具

一 、背景 在某些情况下&#xff0c;我们需要快速了解哪些项目包含特定的配置&#xff0c;例如使用了fastjson库或数据库的连接配置。然而&#xff0c;在GitLab上逐个代码仓库进行搜索是非常耗时的。为了提高效率&#xff0c;我们开发了一个Python脚本工具&#xff0c;用于实现…