草庐IT

【建议收藏】Jenkins+postman+newman之API全自动化测试

测试界的吴彦祖 2024-01-11 原文

1 背景

本文要介绍的环境在我司已经投入使用,举个简单的真实使用场景,开发提供了300多个API,每个API都有各种参数,所以我们会先在postman中为这300多个API编写300*n个testcase,然后在jenkins上跑;到此有人可能会问,都在postman中写好testcase了,怎么还要去jenkins中跑,岂不是多此一举?答案是否定的,试想,当开发一直在不停的维护这300多个接口时,难道需要开发每次都告诉我们测试人员该进行测试了吗?显然不是的,这就是jenkins+postman的自动化之处了,开发可以实现一个jenkins的上游job脚本(当接口代码有修改时触发我们这个testcase的下游job),当他们每次修改维护接口时不需要进行任何操作与交流,代码一旦提交jenkins就能自动化个性化地开始执行我们预定于的那些testcase了,然后我们只用关注最终的测试结果邮件即可,这样大大的提高了开发测试效率。

鉴于国内很少测试工程师用postman来测试API,于是写本篇文章分享下。前一个月用postman写了API自动化测试脚本,并用newman命令行运行所有测试案例,觉得没有达到全自动化测试,于是配置jenkins job来运行API自动化测试脚本,使API达到完全自动化测试!

2 环境配置与运行

这部分依次展示了如何安装设置及运行一个基于Postman的自动化工具,具体如下。

2.1 postman 安装

在谷歌浏览器下载postman插件,并安装,下载路径(Chrome应用商店需要翻墙):chrome.google.com/webstore/se… 。这个比较小儿科,一句话带过就行了。(不过要注意,建议最好下载应用,而不是插件,因为功能强大一些)。

2.2 newman 的安装

第一步,安装nodejs。 
第二步,在nodejs命令行安装newman,即命令行输入如下命令:

npm install -g newman复制代码

2.3 jenkins 安装

去官网(jenkins.io/index.html)下载jenkins,各种下一步点击安即可(官网wiki等目录下一般都有不同平台的安装文档,依据文档安装即可)。

2.4 postman 使用与导出

第一步,创建一个放置testCase的文件夹Test,如下: 

第二步,创建第一个testcase,点击下图1处的加号新增一个case,在2处选择你的API请求方式,在3处写上api请求的url,在4处填写该请求的相关参数,具体如下图: 

下面展示了一个依据上图步骤配置后的邮箱地址请求示例,如图: 

第三步,对一个testCase的判断可以写在如下所示位置(判断的意思是指譬如返回的状态码、内容等是不是你期望的值): 

第四步,点击send按钮即可发送一个请求,同时可以看到请求的结果,如图: 

当然,一般Test目录可能有很多的testCase,这种情况下我们可以选中文件夹,然后点击start Test按钮,这样就会自动执行文件夹内的所有testcase并显示测试结果,如图: 

第五步,导出上面在postman中写的testCase文件和设置的环境变量文件(点击下图1处导出testCase文件,点击下图2处导出环境变量文件)。这是最重要最核心的一步,自动化的源头依赖于此步,请务必注意。 

至此postman的基本使用和导出就完事了,关于postman的其他主题设置、登录等等其他功能请自行摸索,其实很多开发也非常喜欢用postman,譬如移动端开发喜欢用postman去请求服务端提供的API,以此来简单快捷验证接口的正确性和Json、xml等数据格式。

2.5 jenkins 配置

在jenkins上配置如下图,这个路径就是上面通过postman导出文件的路径。 

剩下的就是jenkins的常规操作了,譬如设置好邮箱后点击立即构建或者设置多久构建一次,这样自动化就跑起来了,等待自动化测试结束后我们就可以收到测试成功或者失败的测试报告邮件(依赖于你的设置)了。

通过上面这些步骤即可完成基于postman和Jenkins的自动化接口测试。

3 总结

可以看见,其实postman就是一个GUI的工具,我们完全可以手动用它验证接口,但是当有海量接口且有序执行时就比较麻烦了,所以我们可以通过postman将所有接口的测试案例进行编写实现及导出;而由于postman导出的文件想在jenkins上通过命令行执行依赖于newman环境,所以我们安装配置了newman,以此就能解决jenkins只能执行命令行或者脚本的弊端;他们几个的结合就实现了一次测试案例的编写实现个性化自动化的接口测试。

 如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于想做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……加入我的学习交流群一起学习交流讨论把!!!!  

有关【建议收藏】Jenkins+postman+newman之API全自动化测试的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby-on-rails - 建模收藏夹 - 2

    我希望将Favorite模型添加到我的User和Link模型。业务逻辑用户可以有多个链接(即可以添加多个链接)用户可以收藏多个链接(他们自己的或其他用户的)一个链接可以被多个用户收藏,但只有一个所有者我对如何为这种关联建模以及在模型就位后如何创建用户收藏夹感到困惑?classUser 最佳答案 下面的数据模型怎么样:classUser:destroyhas_many:favorite_links,:through=>:favorites,:source=>:linkendclassLink:destroyhas_many:favor

  3. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  4. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  5. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  6. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  7. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  8. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  9. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  10. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

随机推荐