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

news/2024/11/18 18:40:51/

目录:导读

    • 前言
    • 一、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_testres = post_requestself.assertEqual("654321", res())# self.assertEqual({'user_id': '001'},res())
if __name__ == '__main__':unittest.main()

mock实现get数据模拟

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

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

import requestsdef 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 clientclass TestClient(unittest.TestCase):def test_success_request(self):success_send = mock.Mock(return_value='200')client.send_request = success_sendself.assertEqual(client.visit_ustack(), '200')def test_fail_request(self):fail_send = mock.Mock(return_value='404')client.send_request = fail_sendself.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.ppmy.cn/news/504283.html

相关文章

Java线程的六种状态(付代码解释)

目录 一.新建状态 (New) 解释 代码 运行结果 ​编辑 二.运行状态(Runnable) 解释 代码 运行结果 三.等待状态(Waiting) 解释 代码 运行结果 四.阻塞状态(Blocked) 解释 代码 运行结果 五.计时等待状态(…

什么是元宇宙?元宇宙由哪些关键技术、设备构成?

元宇宙近几年来火爆起来,各个行业争先恐后加入。从目前来看,元宇宙初步体现在游戏娱乐行业、社交、消费、数字孪生等方面。元宇宙近两年开始在各个行业快速崛起,但各个行业并没有一个清晰的发展方向,那么什么是元宇宙? 元宇宙到底由哪些技术和设备组成?查询了很多资…

邮件打开率低?来看看这几招提高邮件打开率!

什么是邮件打开率? 邮件打开率:简单来讲就是收件人打开的邮件数占发送邮件总数的百分比。 我们要做的就是如何吸引收件人打开邮件,那可以从以下几个方面来考虑: 1、邮件标题 邮件标题直接向收件人表达了这封邮件是关于什么的&am…

笔记本电脑禁用集显会变卡?

前因:  前些天由于win11更新出来的漏洞桌面窗口管理器内存溢出,原因因为好像集显驱动有问题,于是乎我禁用了集显,只使用独显。结果打开office会变的很卡,而且搜狗打字也会变得很卡。 原因: 搜了一圈&…

笔记本电脑无线被禁用 是哪个服务器,笔记本无线网络被禁用怎么打开?|无线网络被禁用打开方法...

使用笔记本,最方便的当然是连接无线网络来上网,而不是使用本地连接,但是有使用win7系统的用户遇到了笔记本无线网络被禁用的问题,自己又不知道怎么打开,所以PE吧就给大家带来了笔记本无线网络被禁用打开的方法。 如果只…

计算机网络点了禁用,win10电脑以太网禁用开启不了的修复办法

以太网是局域网的一种,传播距离不远,但网速很快,虽然适合现代办公。我们都知道开启以太网才能正常连接网络。有些win10纯净版的用户反映说明明网络正常,手机都可以上网,工作的电脑却无法连接网络,发现以太网…

计算机哪些服务应该被禁用,Win10必须禁用的服务有哪些?

在操作win10系统的时候,可以禁用一些服务,从而增加电脑的运行内存,提高我们电脑的运行速度。那具体有哪些是可以禁用的win10服务呢?感兴趣的小伙伴可以来看看哦。 方法如下: 1、Print Spooler:将文件加载到…

win10计算机如何禁用签名,win10系统禁用数字签名的设置方案

有关win10系统禁用数字签名的操作方法想必大家有所耳闻。但是能够对win10系统禁用数字签名进行实际操作的人却不多。其实解决win10系统禁用数字签名的问题也不是难事,小编这里提示两点:1、在电脑启动的过程中,不用等到进去输入用户登陆框&…