SoapUI、Jmeter、Postman三种接口测试工具的比较分析——灰蓝

 ̄綄美尐妖づ 提交于 2020-04-26 08:58:38

<div class="htmledit_views">

<p align="center"><br></p> <p><span style="color:#0070C0;">前段时间忙于接口测试,也看了几款接口测试工具,简单从几个角度做了个比较,拿出来与诸位分享一下吧。各位如果要转载,请一定注明来源,最好在评论中告知博主一声,感谢。本报告从多个方面对接口测试的三款常用工具进行比较分析,以便于在特定的情况下选择最合适的工具,或者使用自己编写的工具。(不同工具定位不同,我们只是主要从接口功能测试的角度进行分析)。博主对这几款工具也仅仅是浅尝辄止,并未做太过深入的应用,报告中如果有哪些不合适的地方,欢迎指正。</span></p> <p>&nbsp;</p> <p><span style="color:#0070C0;">1.&nbsp; </span><span style="color:#0070C0;">用例组织方式</span></p> <p>首先是用例组织方式的不同,不同的目录结构与组织方式代表不同工具的测试思想,学习一个测试工具应该首先了解其组织方式。</p> <p>SoapUI的组织方式如下图,最上层是WorkSpace,每个窗口只可以打开一个WorkSpace(这是一个xml文件),每个Project也是一个单独的xml文件(为了协同工作,也可以通过设置将其转化为一堆文件集合),所以每个WorkSpace中可以打开多个Project,一个Project也可以在不同的WorkSpace中。</p> <p>Project对应我们的测试项目,其中可添加WSDL、WADL资源、TestSuite以及MockService。</p> <p>TestSuite对应我们的测试模块,比如商户中心,其中可以添加TestCase,TestCase对应我们对某个模块的不同接口,比如订单管理接口。而一个接口可以能需要多个Step完成,变量、数据源、请求等都是一个Step。</p> <p><img src="https://img-blog.csdn.net/20170719165436255?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVpbGFuX3NhbWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt=""><br></p> <p align="center"></p> <p>Jmeter的组织方式相对比较扁平,它首先没有WorkSpace的概念,直接是TestPlan,等价于SoapUI中的Project,TestPlan下创建的Threads Group就相当于TestCase,并没有TestSuite的层级。</p> <p>TheadsGroup中的Sampler、管理器等均相当于SoapUI中的一个Step,如下图:</p> <p><img src="https://img-blog.csdn.net/20170719165508673?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVpbGFuX3NhbWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt=""><br></p> <p align="center"></p> <p>Postman功能上更简单,组织方式也更轻量级,它主要针对的就是单个的HTTP请求。Collection就相当于是Project,而Collection中可以创建不定层级的Folders,可以自己组织TestSuite。每个Request可以当做是一个TestCase或者Step:</p> <p><img src="https://img-blog.csdn.net/20170719165535508?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVpbGFuX3NhbWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt=""><br></p> <p align="center"></p> <p>&nbsp;</p> <p><span style="color:#0070C0;">2.&nbsp; </span><span style="color:#0070C0;">支持的接口类型与测试类型</span></p> <p>从功能上Jmeter最为强大,可以测试各种类型的接口,不支持的也可以通过网上或自己编写的插件进行扩展。SoapUI专门针对HTTP类型的两种接口,其初衷更是专门测试Soap类型接口,对于其他协议的接口不支持。Postman更是轻量级,定位也不同,可用来测试Rest接口。</p> <p>&nbsp;</p> <table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top"> <p align="center"><strong>工具</strong></p> </td> <td valign="top"> <p align="center"><strong>接口类型</strong></p> </td> <td valign="top"> <p align="center"><strong>测试类型</strong></p> </td> </tr><tr><td valign="top"> <p align="center">SoapUI</p> </td> <td valign="top"> <p align="center">Soap、Rest</p> </td> <td valign="top"> <p align="center">功能、压力、安全</p> </td> </tr><tr><td valign="top"> <p align="center">Jmeter</p> </td> <td valign="top"> <p align="center">Rest、Soap等</p> <p align="center">可扩展WebSocket、socket</p> </td> <td valign="top"> <p align="center">功能、压力</p> </td> </tr><tr><td valign="top"> <p align="center">Postman</p> </td> <td valign="top"> <p align="center">Rest</p> </td> <td valign="top"> <p align="center">功能</p> </td> </tr></tbody></table><p>&nbsp;</p> <p><span style="color:#0070C0;">3.&nbsp; </span><span style="color:#0070C0;">配置不同接口类型</span></p> <p>SoapUI可以创建Soap Project或者Rest Project(但Project中添加什么类型的Step则不受影响),可添加wsdl、wadl资源,并能在TestCase里添加Rest或Soap的Step。</p> <p>Jmeter可以在线程组里添加HTTP、TCP或WebSocket的Sampler。</p> <p>Postman仅支持Rest接口。</p> <p>&nbsp;</p> <p><span style="color:#0070C0;">4.&nbsp; </span><span style="color:#0070C0;">自定义变量以及变量的作用域</span></p> <p>除以下表格中所列的变量之外,每个工具都有系统变量,未列在内。</p> <p>&nbsp;</p> <table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top"> <p align="center"><strong>工具</strong></p> </td> <td valign="top"> <p align="center"><strong>变量类型</strong></p> </td> <td valign="top"> <p align="center"><strong>作用域</strong></p> </td> </tr><tr><td rowspan="4" valign="top"> <p align="center">SoapUI</p> </td> <td valign="top"> <p align="center">Project、TestSuite、TestCase的Properties以及Custom Properties</p> </td> <td valign="top"> <p align="center">各自以内的范围内</p> </td> </tr><tr><td valign="top"> <p align="center">TestCase里的Properties</p> </td> <td valign="top"> <p align="center">在整个TestCase内</p> </td> </tr><tr><td valign="top"> <p align="center">TestCase里的Data Source、DataGen等</p> </td> <td valign="top"> <p align="center">在整个TestCase内</p> </td> </tr><tr><td valign="top"> <p align="center">Groovy脚本定义</p> </td> <td valign="top"> <p align="center">看定义方式</p> </td> </tr><tr><td rowspan="4" valign="top"> <p align="center">Jmeter</p> </td> <td valign="top"> <p align="center">TestPlan中用户定义的变量</p> </td> <td valign="top"> <p align="center">所有Threads Group</p> </td> </tr><tr><td valign="top"> <p align="center">配置元件 - 用户定义的变量</p> </td> <td valign="top"> <p align="center">根据元件位置而定</p> </td> </tr><tr><td valign="top"> <p align="center">CSV data set、random variable等</p> </td> <td valign="top"> <p align="center">根据元件位置而定</p> </td> </tr><tr><td valign="top"> <p align="center">前置、后置处理器</p> </td> <td valign="top"> <p align="center">当前Threads Group</p> </td> </tr><tr><td rowspan="3" valign="top"> <p align="center">Postman</p> </td> <td valign="top"> <p align="center">Environment Variable</p> </td> <td valign="top"> <p align="center">当前环境的Collection</p> </td> </tr><tr><td valign="top"> <p align="center">Global Variable</p> </td> <td valign="top"> <p align="center">所有Collections</p> </td> </tr><tr><td valign="top"> <p align="center">CSV/JSON datafile</p> </td> <td valign="top"> <p align="center">Runner当前的Collection</p> </td> </tr></tbody></table><p>&nbsp;</p> <p><span style="color:#0070C0;">5.&nbsp; </span><span style="color:#0070C0;">数据源、生成器,进行参数化</span></p> <p>&nbsp;</p> <table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top"> <p align="center"><strong>工具</strong></p> </td> <td valign="top"> <p align="center"><strong>数据源</strong></p> </td> <td valign="top"> <p align="center"><strong>生成器</strong></p> </td> <td valign="top"> <p align="center"><strong>循环</strong></p> </td> </tr><tr><td valign="top"> <p align="center">SoapUI</p> </td> <td valign="top"> <p align="center">DataSource,数据可来源于文件、目录、数据库、Excel、Grid等</p> </td> <td valign="top"> <p align="center">DataGen</p> </td> <td valign="top"> <p align="center">DataSource Loop</p> </td> </tr><tr><td valign="top"> <p align="center">Jmeter</p> </td> <td valign="top"> <p align="center">CSV Data Set Config读取csv文件</p> </td> <td valign="top"> <p align="center">Random Variable</p> <p align="center">计数器</p> </td> <td valign="top"> <p align="center">ForEach控制器</p> <p align="center">循环控制器</p> <p align="center">While控制器</p> </td> </tr><tr><td valign="top"> <p align="center">Postman</p> </td> <td valign="top"> <p align="center">Runner中运行时,可加载CSV/JSON文件</p> </td> <td valign="top"> <p align="center">无(只能通过脚本)</p> </td> <td valign="top"> <p align="center">Runner中的Iteration</p> </td> </tr></tbody></table><p>&nbsp;</p> <p><span style="color:#0070C0;">6.&nbsp; </span><span style="color:#0070C0;">流程控制</span></p> <p>SoapUI:由Conditioinal Goto控制流程,以及Groovy脚本</p> <p>Jmeter:由Switch控制器、If控制器、随机控制器等一系列控制器实现流程控制,以及Beanshell脚本</p> <p>Postman:通过JavaScript脚本控制</p> <p>&nbsp;</p> <p><span style="color:#0070C0;">7.&nbsp; </span><span style="color:#0070C0;">结果解析、展示</span></p> <p>&nbsp;</p> <table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top"> <p align="center"><strong>工具</strong></p> </td> <td valign="top"> <p align="center"><strong>结果</strong></p> </td> <td valign="top"> <p align="center"><strong>日志</strong></p> </td> <td valign="top"> <p align="center"><strong>报告</strong></p> </td> </tr><tr><td valign="top"> <p align="center">SoapUI</p> </td> <td valign="top"> <p align="center">Project-OverView、TestSuites</p> <p align="center">TestSuite-TestCases</p> <p align="center">TestCase-TestSteps</p> </td> <td valign="top"> <p align="center">SoapUI全局多种log</p> <p align="center">TestSuite log</p> <p align="center">TestCase log</p> <p align="center">Request log</p> </td> <td valign="top"> <p align="center">Project report</p> <p align="center">TestSuite report</p> <p align="center">TestCase report</p> <p align="center">(PDF/HTML/XML/CSV)</p> </td> </tr><tr><td valign="top"> <p align="center">Jmeter</p> </td> <td valign="top"> <p align="center">各种监听器</p> </td> <td valign="top"> <p align="center">统一的Jmeter log</p> </td> <td valign="top"> <p align="center">监听器可导出到文件</p> <p align="center">并可导出JTL、CSV文件、通过插件可导出HTML(Jmeter3自带)</p> </td> </tr><tr><td valign="top"> <p align="center">Postman</p> </td> <td valign="top"> <p align="center">Send可查看Request的Response</p> <p align="center">Runner可查看运行的Result</p> </td> <td valign="top"> <p align="center">Postman console</p> <p align="center">Chrome DevTools</p> </td> <td valign="top"> <p align="center">Request的Response以及Runner的Result均可导出json</p> </td> </tr></tbody></table><p>&nbsp;</p> <p><span style="color:#0070C0;">8.&nbsp; </span><span style="color:#0070C0;">断言</span></p> <p>SoapUI:每个Request可添加Assertion</p> <p>Jmeter:TestPlan、Threads Group、Sampler均可添加断言</p> <p>Postman:请求的Tests中可添加断言</p> <p>&nbsp;</p> <p><span style="color:#0070C0;">9.&nbsp; </span><span style="color:#0070C0;">脚本扩展能力</span></p> <p>SoapUI:Groovy脚本</p> <p>Jmeter:Bean shell(Java)</p> <p>Postman:JavaScript</p> <p>&nbsp;</p> <p><span style="color:#0070C0;">10. </span><span style="color:#0070C0;">团队协作</span></p> <p>SoapUI:本身一个project是一个xml文件,但是可以通过配置变成一系列文件夹,每个Case、每个Suite均是独立的文件,这样可通过svn/git进行团队协作。支持性较好。</p> <p>Jmeter:一个TestPlan也是一个jmx(xml)文件,无法分割,但Jmeter有一个合并的功能,允许将多个文件合并在一起。只能每个团队成员自己建立一个TestPlan,分功能块进行测试。最后整理合并。</p> <p>Postman:有团队协作的功能,需要付费。</p> <p><br></p> <p><span style="color:rgb(0,112,192);">欢迎指正,更多文章,请关注本人博客——<a href="http://blog.csdn.net/huilan_same" rel="nofollow" target="_blank">灰蓝的博客</a>。</span><br></p> <p><br></p> <p>&nbsp;</p> </div>

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!