初识MeterSphere是通过一篇博客,大概了解了它是做什么的,在好奇心驱使下通过VMware装了个虚拟机部署。对了,忘了介绍我的职业,点工一枚,略懂接口自动化,常见的测试工具算比较熟悉,不过我们公司之前的接口自动化还是以Python居多,jmeter、postman通常只用来调试接口,为什么不用来做接口自动化呢,因为丑,真的太丑,而且巨不符合我的使用习惯,准确的说是不合符整个测试团队的习惯。当然,我们也尝试过去习惯,结果大抵失败了~
在我个人试用没多久后,其他同事也加入了试用行列。试用的结果就是我们一致认为MeterSphere比较符合我们的试用习惯,而且基本满足我们的接口测试场景。最关键的一点是,跟原来使用python相比,大大减少了我们写接口自动化的时间,提升了工作效率。这时候,我们对MeterSphere产生了一点喜欢,这点喜欢不是因为我们可以写更多的接口自动化用例了,而是每天可以更早下班了,哈哈哈哈哈~
当然,它做为一款迭代中的测试产品,肯定有优有劣,这个自行去品味。想要更深入了解它可以通过这篇博客:测试工具平台介绍之MeterSphere_rs勿忘初心的博客-CSDN博客_metersphere。
这篇文章只是我基于近半年的使用,罗列几个它比较好用的功能。
这个功能的名字其实不是很能理解,不知道是哪个起名鬼才的杰作,我觉得可以把它翻译为“一键断言”,适用于通过JSONPATH表达式来断言的接口。这个功能的好处在于,不需要手动输入JSONPATH表达式,只要运行一次,拿到接口响应体,平台会自动格式化响应体,需要断言哪个参数,只要动手点击勾选,是不是非常方便?下面截图看看效果。

这个功能的名字也不太好理解,不过我也想不出更好的名字了。这里解释下它的意思:当我们获取了接口的响应结果后,把响应结果全量复制,粘贴到文档结构断言里,平台会校验响应结果的参数类型和参数值,自动生成对每一个参数的值和类型的断言,可以理解为对响应结果的全量断言。
下面看图说话:

这个功能普通而实用,普通说的是只是一个接口文档分享功能,实用指的是它的接口既可以分享所有接口的整体文档,也可以分享单个接口的文档,并且是根据接口定义自动生成的,不需要人为维护。实用的点在于,遇到某个接口的参数不太明白什么意思,可以直接把接口文档分享给开发。其他成员在平台没有账号的,也可以直接把免登录的接口文档分享给他。

这个功能很好理解,但是比较强大,平台上的大部分事件都支持消息通知。目前该平台支持的消息通知方式包括站内通知、邮件、钉钉机器人、企业微信机器人、飞书机器人和自定义的webhook机器人。平台的通知有一个默认的通知文案模板,当然也支持自定义通知的文案模板,不过这是个收费功能,有预算的可以尝试下。目前我们团队用开源版本的通知也足够了(emm,其实就是没预算)。

这个功能一般适用于接口自动化场景,平台支持接口前后置脚本和自定义脚本,对于一些脚本中经常需要写的代码片段,可以存储到自定义代码片段里,在需要的地方,直接选择自定义代码片段插入脚本,避免重复工作。


以上是目前阶段觉得比较好用的五个功能,其实这个平台的功能挺多,我还没有尝试完所有功能。当然不好的地方也有,就不用在这里说了,他们有官方的开源用户支持群,可以去群里吐槽,也可以直接在github上给他们提bug,建议有问题提bug,因为有专人处理,响应速度还挺快,哈哈。
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
在Rails自动生成的功能测试(test/functional/products_controller_test.rb)中,我看到以下代码:classProductsControllerTest我的问题是:方法调用products()在哪里/如何定义?products(:one)到底是什么意思?看代码,大概意思是“创建一个产品”,但是它是如何工作的呢?注意我是Ruby/Rails的新手,如果这些是微不足道的问题,我深表歉意。 最佳答案 如果您查看test/fixtures文件夹,您会看到一个products.yml文件。这是在您创建
在我的一些Controller中,我有一个before_filter检查用户是否登录?用于CRUD操作。application.rbdeflogged_in?unlesscurrent_userredirect_toroot_pathendendprivatedefcurrent_user_sessionreturn@current_user_sessionifdefined?(@current_user_session)@current_user_session=UserSession.findenddefcurrent_userreturn@current_userifdefine
require'pp'p*1..10这会打印出1-10。为什么这么简洁?您还可以用它做什么? 最佳答案 它是“splat”运算符。它可用于分解数组和范围并在赋值期间收集值。这里收集赋值中的值:a,*b=1,2,3,4=>a=1b=[2,3,4]在此示例中,内部数组([3,4])中的值被分解并收集到包含数组中:a=[1,2,*[3,4]]=>a=[1,2,3,4]您可以定义将参数收集到数组中的函数:deffoo(*args)pargsendfoo(1,2,"three",4)=>[1,2,"three",4]
我读过的关于Ruby符号的每一篇文章都在谈论符号相对于字符串的效率。但是,这不是1970年代。我的电脑可以处理一些额外的垃圾收集。我错了吗?我拥有最新最好的奔腾双核处理器和4GBRAM。我认为这应该足以处理一些字符串。 最佳答案 您的计算机可能能够处理“一点点额外的垃圾收集”,但是当“一点点”发生在运行数百万次的内部循环中时呢?如果它在内存有限的嵌入式系统上运行呢?有很多地方你可以随意使用字符串,但在某些地方你不能。这完全取决于上下文。 关于ruby-现代计算机的功能是否不足以处理字符串
我正在使用Windows并尝试运行一个现有的功能包,该功能包最初是在MacOS上构建的,这允许他们通过使用带空格的"\"来解决问题。我正在使用Ruby2.2.3和Cucumber。功能名称包含空格,我无法更改它。我尝试使用""和''来绕过空白,但每次都有同样的问题。这是问题的一个例子。如果我运行:cucumberfeatures/'Namecontainingwhitespaces.feature'它工作正常。但是当我运行时:cucumber-pmy_profile和cucumber.yml包含:my_profile:features/'Namecontainingwhitespace
单元测试的好方法是测试脚本在执行之间保持正确数据的能力——在使用Ctrl-C终止脚本然后重新运行之后?是否有针对执行类似操作的现有模块或脚本的任何测试可以针对最佳实践进行审查? 最佳答案 像http://avdi.org/devblog/2010/07/19/greenletters-painless-automation-and-testing-for-command-line-applications/一样使用库或者期望、运行、终止并重新运行您的程序,并检查它是否运行正确。好的做法是将程序设计为独立的模块,每个模块都经过良好测试
目录一、什么是Websocket二、WebSocket部分header介绍三、HTTPVSWebSocket四、什么时候使用WebSockets五、关于SockJS和STOMP一、什么是Websocket根据RFC6455标准,Websocket协议提供了一种标准化的方式在客户端和服务端之间通过TCP连接建立全双工、双向通信渠道。它是一种不同于HTTP的TCP协议,但是被设计为在HTTP基础上运行。Websocket交互始于HTTP请求,该请求会通过HTTPUpgrade请求头去升级请求,进而切换到Websocket协议。请求报文如下:GET/spring-websocket-portfoli
平时开发中我们经常会遇到这样的需求,在一个不限高度的盒子中会有很多内容,如果全部显示用户体验会非常不好,所以可以先折叠起来,当内容达到一定高度时,显示展开更多按钮,点击即可显示全部内容,先来看看效果图: 这样做用户体验瞬间得到提升,接下来看看具体细节。0">主要操作在内容这里{{item.username}},……展开更多样式大家可依据自己项目需求进行设计,这里就不贴了,主要说几个关键的。1、在data中定义三个属性isShowMore:false, //控制展开更多的显示与隐藏textHeight:null, //框中内容的高度status:false, //内容状态是否打开2.计算内容是否