java如何模拟请求_单元测试如何模拟用户请求

python web自动化测试设计构工具书

40.9元

包邮

(需用券)

去购买 >

c485402013c790ea1bdfafa1931b58c8.png

错误

正当我高高兴兴写完后台c层的测试代码准备提交时,测试机器人报了很多401错误,把代码拉下来一看,原来当我写代码时,我的伙伴已经写好后台的拦截器了,只有绑定了token的用户才能访问后台,所以当我单元测试c层模拟请求时就会报错,

bVbEQpR

因为我的模拟前台请求就像是一个没有登陆的用户请求,经过拦截器必然是被拦截了下来。

bVbESiM

解决经过

一开始有点不知所错。我们的模拟请求失败是因为后台在没有绑定token的情况下请求了其他接口,而我们的拦截器也没有发token给模拟请求。我们正常要使用系统的话要先登录,第一次登录的话后台会发送一个token给前台并与用户绑定,以后就会带着后台发来的token去请求。

所以首先模拟一下正常的登录流程。创造一个方法loginUser(),在方法上添加注释@Before,用于在每个测试方法前执行。在这个先新建一个用户用来当我们的模拟用户,我们用这个用户的username和password来进行登录,然后在进行请求。

@Test

public void loginUser() throws Exception

{

String url = "/user/login";

String username = RandomString.make(6);

String password = RandomString.make(6);

JSONObject jsonObject = new JSONObject();

jsonObject.put("username", username);

jsonObject.put("password", password);

// 当以参数username, password调用userService.login方法时,返回true

Mockito.when(this.userService.login(username, password)).thenReturn(true);

// 触发C层并断言返回值

this.mockMvc.perform(MockMvcRequestBuilders.post(url)

.contentType(MediaType.APPLICATION_JSON_UTF8)

.content(jsonObject.toJSONString()))

.andExpect(MockMvcResultMatchers.status().isOk())

.andExpect(MockMvcResultMatchers.content().string("true"));

}

bVbESoh

但是两次模拟请求并不是同一个用户,我们需要在第一次请求的时候获取token并保存用户,在后续请求携带token发出模拟请求。这就需要引入request类。

上述方法太麻烦了,在学长的建议下,研究拦截器原理,发现拦截器通过isLogin()函数里判断token来判断这个用户是否登陆过,如果把isLogin方法mock一下,让他永远返回true就无论传什么token就都可以不被拦截了。

@Before

public void loginUser() throws Exception {

Mockito.when(this.userService.isLogin(Mockito.any(String.class))).thenReturn(true);

}

但是只是在mock方法里规定传入string类型是不行的,我们模拟请求默认token是null,所以我们应该在模拟请求时加入header的token信息,随意一个字符串就好。

this.mockMvc.perform(

MockMvcRequestBuilders.get(url)

.header("auth-token", "key")

.param("page", "1")

.param("size", "2"))

.andExpect(MockMvcResultMatchers.status().isOk());

bVbESoL

我们也可以在mock方法里设置传入任一参数都返回true,这样我们就不用在后续模拟请求中发送token了。

@Before

public void loginUser() throws Exception {

Mockito.when(this.userService.isLogin(Mockito.any())).thenReturn(true);

}

总结

不断改进自己的解决办法,从中学到更多解决问题的方法,同时加深了对拦截器和token的了解。

java 11官方入门(第8版)教材

79.84元

包邮

(需用券)

去购买 >

f0f3f55624fb396b1764d42d6df88864.png

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

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

相关文章

LeetCode 83. 删除排序链表中的重复元素

原题链接 解法:通过一个指针从头到尾进行扫描 class Solution { public:ListNode* deleteDuplicates(ListNode* head) {if(!head)return nullptr;auto p1 head;while(p1->next){if(p1->next->val p1->val)p1->nextp1->next->next;else p1 …

后端 java ee_刷新器-Java EE 7后端十大功能

后端 java ee这是我的小型Java EE 7复习系列的第二部分。 在进行了简要概述的第一篇介绍之后,我决定请Arjan Tijms撰写有关Java EE 7中他最喜欢的后端新功能的信息。如果您关注Java EE领域,您将会知道Arjan。 他是Java EE开发人员,JSF和Secur…

java cucumber_为Java + STANDARD值引入Cucumber

java cucumber作为软件开发人员,我们都有最喜欢的工具来使我们成功。 许多人在开始工作时就很适合这份工作,但很快就不见了。 其他人则需要太多的设置和培训才能“将脚趾浸入水中”,只是为了简单地确定它们是否是正确的工具即可。 Cucumber …

文章id 文章标题点击量php,WordPress如何通过文章ID获取文章标题等信息

如果我们想要在某一个主题的php文件中调用文章的标题,内容等信息,而在WordPress中唯一一直不会改变的就是文章发布时生成的ID,我们只需要获取文章的ID,即可通过文章ID来获取我们想要的文章信息。调用方法php$id // 文章的 id$tit…

javaone_JavaOne 2015:高级模块化开发

javaoneJavaOne 2015看到了Project Jigsaw团队关于Java 9中的模块化的一系列讨论 。它们都是非常有趣的,并且充满了宝贵的信息,我敦促每个Java开发人员都注意它们。 除此之外,我想给社区一种搜索和引用它们的方法,因此我在这里总…

spark rest_Spark简介,您的下一个REST Java框架

spark rest我希望您今年Java来了! 今天,我们将研究一个清新,简单,美观且实用的框架,以Java编写REST应用程序。 它将非常简单,甚至根本不会看起来像Java。 我们将研究Spark Web框架。 不,它与Ap…

oracle 授权 增删改查权限_Oracle增删改查与函数

SQL -- 结构化查询语言 关系型数据库分类: DDL DML DCL DQL TCL Oracle 的数据类型:字符 char() varchar2()数字 number(p,s)时间 date timestamp 文件 clob blob 二维表 table 创建表 CREATE create table 表名 ( 列名 数据类型 [约束], 列名 类型 ... …

_用WSL,MobaXterm,Cmder配置linux开发环境

离不开Windows的理由很多,作为后端开发需要使用linux的情况也很多,双系统总归是不方便,而且linux下的GUI体验也没用Win 10好. 如果使用虚拟机,那么文件交换和网络等各种问题也需要解决,对系统的内存要求也更高一些.微软为了让更多的开发人员留在Win10上面,开发了WSL功能.目前的…

php中上传图片怎么显示出来,PHP上传图片类显示缩略图功能

有缩略图功能 但是 感觉不全面,而且有点问题,继续学习,将来以后修改下/*** Created by PhpStorm.* User: Administrator* Date: 2016/6/28* Time: 21:04*/class upload{protected $fileMine;//文件上传类型protected $filepath;//文件上传路径…

javaparser_JavaParser入门:以编程方式分析Java代码

javaparser我最喜欢的事情之一是解析代码并对其执行自动操作。 因此,我开始为JavaParser做出贡献,并创建了两个相关项目: java-symbol-solver和Effectivejava 。 作为JavaParser的贡献者,我反复阅读了一些有关从Java源代码提取信…

wps xml转换表格_这功能WPS卖近百元?教你免费将PDF转成Word

[PConline 应用]PDF文件如何转换成为Word?很多朋友研究这个问题已经很久了,PDF更利于统一格式传播,Word更便于编辑,因此收到PDF文件后、想要修改时要如何将PDF转换成Word可谓是一个刚需。当然,不少办公软件提供了这样的…

睡眠 应该用 a加权 c加权_在神经网络中提取知识:学习用较小的模型学得更好...

在传统的机器学习中,为了获得最先进的(SOTA)性能,我们经常训练一系列整合模型来克服单个模型的弱点。 但是,要获得SOTA性能,通常需要使用具有数百万个参数的大型模型进行大量计算。 SOTA模型(例如VGG16 / 19,ResNet50)…

gpu编程如何一步步学习_如何学习贴片机编程

学习贴片机编程首选要对贴片机有所熟悉了解,另外对常用的电脑编辑软件要会使用。目前通常学习贴片机编程有专门的培训学校,或者跟着生产线上现有的贴片机编程师傅学习熟练后再进行编程操作。下面深圳智驰科技就来分享一下如何学习贴片机编程。对贴片机编…

plotcylinder matlab,Matlab在任意两点之间绘制三维圆柱

Matlab在任意两点之间绘制三维圆柱Matlab在任意两点之间绘制三维圆柱此函数可能存在一些不足,请多多指教!function plotcylinder(u1,u2,color_a,r)Lnorm(u1-u2);RODu2-u1;[X,Y,Z]cylinder(r,100);x1X*0;y1Y*0;z1Z*0;ZL*Z-L/2;ROD_midpoint(u1u2)/2;xROD_…

jdk8和hotspot_HotSpot的-XshowSettings标志的简单性和价值

jdk8和hotspot一个方便的HotSpot JVM标志 ( 选项为Java启动 java )是-XshowSettings选项。 Oracle Java启动器描述页面中对此选项进行了如下描述 : -XshowSettings : category显示设置并继续。 该选项的可能类别参数包括&#xf…

matlab信号分割与比对,matlab测量计算信号的相似度

本示例说明如何测量信号相似度。将回答以下问题:如何比较具有不同长度或不同采样率的信号?如何确定测量中是否存在信号或仅有噪声?有两个信号相关吗?如何测量两个信号之间的延迟?比较具有不同采样率的信号考虑一个音频…

Spring Bootstrap中具有配置元数据的高级配置

在简要介绍了配置元数据并涵盖了我之前的文章《 在Spring Boot中使用配置元数据Pimp您的配置》中的基础知识之后,现在该看看如何进一步执行此步骤并进一步自定义配置。 在这篇文章中,我计划提出对配置属性的弃用,并讨论各种值提供程序&#x…

ssh 与 telnet 有何不同?_采用创新面料Nike Infinalon的全新瑜珈系列究竟有何不同?...

采用创新面料Nike Infinalon的全新瑜珈系列究竟有何不同?无拘无束自由运动——这是耐克瑜伽系列新品的核心设计理念。全新系列为你提供垫上瑜伽时毫无束缚的舒适感,采用了耐克创新型面料:Nike Infinalon。Nike Infinalon应用于耐克最新瑜伽系…

matlab中的导函数驻点,Matlab用导数作定性分析

Matlab用导数作定性分析5.1知识要点:函数作图 —用导数定性描述函数【 clf,xlinspace(-8,8,30);f(x-3).^2./(4*(x-1)); plot(x,f) 】【 fplot((x-3)^2/(4*(x-1)),[-8,8])) 】【 clf,xsym(x); f(x-3)^2/(4*(x-1)); ezplot(f,[-8,8]) ,ti…

原生态基于OpenCV图像处理软件开发

部分功能效果图 GitHub:https://github.com/CnYiXiaoNaiHe/OpenCV- 持续更新