如何简单模拟Web服务

万能Postman搭建模拟Web服务器(Mock Server) 万能Postman搭建模拟Web服务器1,创建Mock Server(模拟服务器)2,设置请求方法名称3,命名测试服务器4,完成模拟服务器创建5,模拟服务器展示界面6,在浏览器中测试生成的路径 1,创建Mock Server(模拟服务器) 正如Postman程序中介绍的一样,模拟服务器允许模拟API战点,而不必设置后端。设置好站点API请求路径,接着输入预期的响应码和响应体完成创建即可。 如果请求中需要带参数,直接点击下图中按钮,选中Request Body。 2,设置请求方法名称 下面以GET方法为例 阅读详情

在SOA环境中,系统不可避免地要与其他系统进行交互,可以是基于SOAP的Web服务,基于RESTful Web服务,基于消息队列,甚至是基于RPC远程调用。随着系统依赖的增长,对单个系统进行测试也变得越来越困难,如何有效地隔离各个系统,对系统进行单独的测试呢?

 

本文会给大家介绍一个简单的测试方法——基于Mock进行测试 !

 

开发过程中常用的测试有单元测试与集成测试,下面也分成两部分来做说明。

 

当然,你可以选择自己实现一些用于模拟Web服务的类,但本文中的方法选择尽量不要为Mock做过多的开发,因此更多地会选择一些辅助工具来帮助测试。

 

一、单元测试中的Mock

 

单元测试本身就要求将被测试类与它的依赖隔离开来,仅测试被测类本身的逻辑,此时可以选择一些Mock工具对接口进行模拟。是否进行了合理的设计也会影响单元测试的编写,例如,应该遵循“面向接口编程 ”的最佳实践。

 

Java中常用的Mock框架包括:

可以根据个人喜好选择一个合适的框架。本文以jMock为例,进行说明。Web服务的接口定义如下:

项目代码Operator类中引用了该服务,需要取得返回值进行后续操作。

 

在编写单元测试时,为SampleService模拟一个对象注入Operator。关于jMock的使用,请参考jMock的《Getting Started 》或者《Cheat Sheet 》。jMock主要是使用录制-回放 的方式,通过预先设定期望的输入与输出实现Mock。

 

单元测试中直接通过编码的途径用jMock模拟了外部系统的逻辑,业务代码并不关注究竟是调用了真是的Web服务,还是Mock对象。同样的,对于DAO等依赖也可以使用同样的方式进行模拟。

 

二、集成测试中的Mock

 

集成测试时同样可以通过编程的方式实现Mock,比如在Spring上下文中加载Mock的Bean而非通过XFire(或其他Web服务框架)引 入的客户端。但这种做法未免过于繁琐,而且在希望改变Mock类返回结果时,可能需要修改代码重新编译发布。更有甚者,上线时如果忘记从测试的配置换回生 产配置,就会出大问题。

 

当然,你可以选择部署一台真实的服务提供方,但有时出于种种原因,这并不是一个很好的选择。

 

相信在测试Web服务时,不少人都是用过soapUI ,但仅限于使用soapUI调用Web服务,其实强大的soapUI还可以Mock服务,根据事先的配置(Groovy脚本、XPath匹配、顺序、随机 等方法)返回不同的结果。其实现原理简单地说就是根据给定的WSDL模拟Web服务,接受请求后根据配置解析请求,随后返回预先设定的结果,这里的请求和 响应都是标准的SOAP报文。

 

简单实现步骤如下:

  1. 创建一个新的soapUI项目,在“New soapUI Project”对话框中输入WSDL地址,随后选中“Create MockService”。
  2. 在“Generate MockService”对话框中选中要模拟的操作,Path和Port尽量和真实的目标服务器保持一致。例如,发布WSDL的路径可能是 http://xxx:8080/services/sampleService?wsdl,那么Path就是/services /cardInfoService,Port为8080。
  3. 编辑应答SOAP报文及返回逻辑。

在MockService的各个方法上点右键可以进入MockOperation Editor或者直接创建新的MockResponse。MockService创建时,每个操作都会有个Response,没有设定规则时,这就是默认应答。

 

可以仅使用一个Response,多次调用需要不同结果时手工修改,但这样一点都不“自动化”,可以通过soapUI的分派机制自动根据规则返回对应结果。

 

soapUI支持的分派机制(详见MockOperations and Responses )有:

  • SCRIPT,使用Groovy脚本。
  • SEQUENCE,按照MockResponse添加的顺序逐个返回。
  • QUERY-MATCH,基于请求内容选择合适的结果返回。可以指定XPath路径及该节点的期望值,如果匹配的话返回对应Response。
  • XPATH,与QUERY-MATCH类似,XPath节点的值就是要返回的MockResponse的名字。
  • RAMDOM,随机返回。

个人认为XPATH和QUERY-MATCH这两种分派机制在复杂情况下比较好用,如果再复杂,可以考虑SCRIPT。以XPATH为例,假设请求报文如下:

可以设置两个MockResponse,名字分别为“hi”和“hello”,在编辑器中选择“XPATH” ,设置如下XPATH:

当//fac:in0的值是“hi”时就会返回名为“hi”的MockResponse。“hi”MockResponse内容:

如果使用QUERY_MATCH,除了填写XPath,还要再填写“Expacted Value”,比如“hi”或者“hello”,然后“Dispatch to”中选择合适的MockResponse。

 

在项目中只需要把Web服务的Endpoint地址做成可配置的,就可以方便地调整测试与生产环境的Endpoint,实现Mock与真实服务器的切换。

 

使用Mock可以大大降低测试的成本,工欲善其事必先利其器,选择一个合适的Mock工具,可以帮助你更好的进行测试。So,行动吧~

 

 

 

 

 

 

 

 

 

web服务器模拟 web服务器 立即下载

相关推荐

adb详细教程(四)-使用adb启动应用、关闭应用、清空应用数据、获取设备已安装应用列表

adb对于安卓移动端来说,是个非常重要的调试工具。通过ADB可以操作、管理设备上的应用。

公众号|软件测试老吴 3万+

简单模拟webserver

准备知识 本章节将按照以下内容阐述 一、网络中进程之间是如何通信 二、两种通信协议:TCP、UDP 三、什么是Socket 四、模拟一个webserver 五、请求与响应 六、代码 网络中进程之间是如何通信? 通信嘛,我理解的就是两个进程之间互相收发数据,就像打电话一样。那么进程之间是如何通信的呢,可以参考博客https://www.cnblogs.com/CheeseZH/p/...

赵庆春 1231

mstar PQ软件修改方法

1.修改ADC的值 Static code APIXC_AdcGainOffsetSetting tADCSetting[ADC_SET_NUMS]= #define INIT_ADC_RGB_RED_GAIN               0x1000 #define INIT_ADC_RGB_GREEN_GAIN           0x1000 #define INIT_ADC_RGB

qq_18810259的专栏 2565

web端做弱网测试

web端做弱网测试 怎么用web端做弱网测试: 使用chrom做例子: 1.打开你需要弱网的网页 2.按f12键–network–online–设置你需要的设置的网络速度 设置好之后就可以测试了。

weixin_43746355的博客 6127

Android音频学习(八)——AudioFlinger线程

在 PlaybackThread 的实现中,Flag 用于标识线程的特殊行为或配置。

miemie2014的博客 1399

【FPGA的基础快速入门23--------OV5640摄像头VGA显示】

FPGA的基础学习--------OV5640摄像头VGA显示OV5640简介二级目录三级目录 OV5640简介 OV5640同OV7725一样,都是Omni Vision(豪威科技)公司生产的CMOS图像传感器。 OV5640支持更高的分辨率(500W像素)、采集速率,具有更高的图像处理性能,主要应用在手机、数码相机、电脑多媒体等领域。 OV5640支持LED补光、MIPI(移动产业处理器接口)输出接口和DVP(数字视频并行)输出接口选择、ISP(图像信号处理)以及AFC (自动聚焦控制)等功能。 OV

暮雨中的坚果的博客 7688

自己动手模拟开发一个简单的Web服务器

自己动手模拟开发一个简单的Web服务器 时间 2015-02-01 22:45:00  博客园-原创精华区 原文  http://www.cnblogs.com/edisonchou/p/4266035.html 主题 Web服务器 Socket 开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其

sunday_qh的专栏 3498

基于YOLO26深度学习框架的文档表格识别系统的算法研究实现方法

本文研究了基于YOLO26深度学习框架的文档表格识别系统实现方法。系统采用YOLO26网络架构,通过数据预处理、模型训练、检测推理和表格分析四个模块实现高效表格识别。研究详细阐述了数据归一化、增强等技术处理,以及采用迁移学习策略优化模型训练过程。实验表明,该系统能有效识别多种表格结构并生成结构化数据,为文档自动化处理提供了可靠解决方案。

一键难忘的博客 971

Python实现简单Web服务器及模拟浏览器

笔者在进行操作的时候发现了一个小bug,就是在响应浏览器时,浏览器会默认发起 Favicon.ico 请求,这是一个图标生成器,用于快捷标记网页。超文本传输协议是一种用于分布式、协作式和超媒体信息系统的应用层协议,是万维网WWW(World Wide Web)的数据通信的基础。但是浏览器在访问DNS之前会首先访问本地DNS缓存,也就是hosts文件,如果没有找到对应的IP,浏览器才会访问DNS。请求和响应消息的头以。DNS(域名解析系统)用于将域名转成对应的IP地址,DNS是一台运行在互联网上的服务器。

2401_82928104的博客 2494

华为od 面试八股文_前端_03_含答案

华为od 面试八股文_前端_03_含答案

MISAYAONE的博客 2130

使用Python实现卷积神经网络(CNN)

卷积神经网络是一种专门用于处理具有网格状拓扑结构数据(如图像、声音)的深度学习模型。CNN的核心组件是卷积层和池化层,它们能够有效地从图像中提取特征并实现空间不变性,使得模型能够对图像中的物体进行识别和分类。我们定义一个简单的卷积神经网络模型,包括卷积层、池化层和全连接层。return x# 创建模型实例我们选择交叉熵损失函数作为分类任务的损失函数,并使用随机梯度下降(SGD)作为优化器。

Echo_Wish 4489

自己模拟的一个简单的web服务器

首先我为大家推荐一本书:How Tomcat Works。这本书讲的很详细的,虽然实际开发中我们并不会自己去写一个tomcat,但是对于了解Tomcat是如何工作的还是很有必要的。 Servlet容器是如何工作的 servlet容器是一个复杂的系统。不过,一个servlet容器要为一个servlet的请求提供服务,基本上有三件事要做: 1,创建一个request对象并填充那些

LinkinPark的博客 2871

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

web的demo制造_一个简单的Webservice的demo,简单模拟服务

前段时间一直在学习WCF,匆匆忙忙的把《WCF全面解析》和《WCF服务编程》看了一遍,好多东西都不是很懂,又听了一下WCF分布式开发的网络教程,算是马马虎虎的明白点了。回顾了一下Webservice,将二者进行比较学习。考虑到以后的发展,当时决定学习WCF,希望自己在不久的将来能将WCF学的稍微精通点吧。这几天又将Webservice看了一遍,回想当时学习Webservice处处碰到坑,由于没人指...

weixin_39640543的博客 455

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

剖析web服务原理--简单的Web服务器模拟

Web服务器: import java.net.*; import java.io.*; public class Server {     public static void main(String args[])throws Exception{    ServerSocket server = new ServerSocket(8888);    Socket s

ITSTAR 746

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

python模拟简单浏览器以及Web服务器

1.模拟浏览器 """ 1. 导入模块 2. 创捷套接字 3. 建立连接 4. 拼接请求协议 5. 发送请求协议 6. 接收服务器响应内容 7. 保存内容 8. 关闭连接 """ # 1. 导入模块 import socket # 2. 创捷套接字 tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 3. 建立连接 ...

一只菜鸟的博客 748

Python模拟简单的Web服务器 &1

代码 ## coding=utf-8 import BaseHTTPServer class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): """ 处理请求并返回页面 """ # 页面模板 Page = '''\ <html> <body> <p>Hel

hoofi.xyz 1875

模拟web服务器简单功能

import java.io.*; import java.net.*; public class MyWebServer {        publicstatic void main(String []args) throws Exception{                             ServerSocketss=new ServerSocket(5555);

myoral的专栏 476

手动模拟一个很简单的web server服务器实现

新建一个普通的Java Project项目 创建三个普通类 类的作用 HttpServer :使用 java.net.ServerSocket 监听客户端的请求,与客户端(浏览器)建立连接,获取 java.net.Socket对象以及java.io.InputStream 输入流对象和 java.io.OutputStream 输出流对象。 Request 将客户端请求的数据封装成一个request对象。 Response将服务器端响应的数据封装成一个Response对象。 代码 HttpSer

老照片 1002

理解与模拟一个简单web服务器

  先简单说下几个概念,根据自己的理解,不正确请见谅。 web服务器 首先要知道什么是web服务器,简单说web服务器就是可以使用HTTP传输协议与客户端进行通信的服务器。最初的web服务器只能用来处理静态页面,而tomcat服务器更加强大,不仅可以处理静态页面,还可以运行java类文件,动态创建页面并返回给浏览器,之所以说tomcat是个容器,就是可以运行servle类的容...

weixin_30507269的博客 103

模拟web服务器项目,node.js express搭建简单的web服务器

说明:开发环境使用的是Webstrom1、Express 简介Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。使用 Express 可以快速地搭建一个完整功能的网站。Express 框架核心特性:可以设置中间件来响应 HTTP 请求。定义了路由表用于执行不同的 HTTP 请求动作。可以通过向模板传递参...

weixin_36359110的博客 395

用顺序表模拟简单web服务器实现用户超时处理

具体实现方案: 1:当有新的请求连接到服务器时,经过服务器频率限制模块判断,貌似恶意连接,则使用顺序表来保存此连接的超时数据,超时值用时间戳来表示时间戳是指格林威治时间1970年01月01日00分00秒(相当于北京时间1970年01月01日08时00分00秒)时至现在的总秒数,其结构体定义如下: struct Timeout { int fd; //每一次连接的整数编号 time_t timeout;//用超时时间戳来表示 }; 2:自己设计一个顺序表 以下是自己对顺序表的浅薄认识 (1)..

qq_55164622的博客 247
上一篇: 如何简单模拟Web服务
下一篇: 如何整合JIRA、FishEye、Crucible进行CodeReview
dingx
博客等级 码龄24年 67粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值