
欢迎来到第 87 期!这里记录过去一周我们看到的软件测试及周边的行业动态,周五发布。
本期看点: H5和微信小程序在测试上的区别是什么?支付宝商家体验质量技术如何从1到1.1?优化代码检测平台的血泪史;如何通过线上场景提升回归、压测、攻防的有效性?Google 软件工程之文化篇;面向对象分析与设计的底层逻辑;如何从零开始做性能优化?面试时如何快速区分两个差不多的人?怎么写专利?
·
阅读愉快!
360质量效能

从测试人员的角度来看,H5 本质上是一个 web 页面,所以 web 测试的方法在 H5 测试中同样适用。而小程序本质是一个运行在微信上的应用,所以适用 APP 的很多测试方法,又因为是依赖微信运行,在与微信之间的数据传输功能交互方面需要额外关注。
| 原文地址: https://mp.weixin.qq.com/s/l1LQW2LPGrPq7MBpt2abYA |
|---|
周助(蚂蚁质量AnTest)

支付宝商家体验主要针对商户反馈的痛点,在各大站点部署了商户反馈组件,重点反馈质量建设,不仅在质量分层活动中的用户体验保障层,有了打点的产品和应用场景,解决商户反馈的问题,另一方面,也是在整个定义问题、分析问题、解决问题的一次较好实践,把质量技术真正当做一个业务来做。
再次面对体验的课题,以及有一定基建的基础上,如何从 1 做到 1.1?
| 原文地址: https://mp.weixin.qq.com/s/IRI9eFF6Jogk36zm0ocX-g |
|---|
许秀(酷家乐技术质量)
Litmus 是一个用于检测代码质量的平台。
Litmus 接入 CI 初期,平台存在以下问题:
作者是怎么对其进行优化以满足日益增长的需求呢?
| 原文地址: https://mp.weixin.qq.com/s/ti_YCcGX-EYuESt_oeq_XA |
|---|

上图中包括了:新功能测试、回归、性能测试、灰度、攻防演练五个部分。通过分析可以看出,其中新功能测试、灰度都只跟 “未来” 的线上场景有关,即只有在代码发布后才会有真实的流量进来。剩下的三个部分回归、性能测试、攻防演练都跟当前的线上场景密不可分。
由此,我们要解决的问题就是:如何通过线上场景,来提升回归、压测、攻防的有效性?
| 原文地址: https://my.oschina.net/u/4594489/blog/5515598 |
|---|
Dawei Ma(improve365)

在软件工程的概念被提出之前,IT 行业经历了软件危机。当时 IT 行业开发的软件正在经历从小规模到大规模的过程,而没有系统化的方法论指导大规模软件的开发过程,导致软件工程师之间的协作非常的低效且质量难以得到保证。
直到 IT 行业意识到软件需要一种工程化的方法论来指导开发过程。
软件工程是将系统化的、规范的、可度量的方法用于软件的开发、运行和维护的过程,即将工程化应用于软件开发中。
本文是 Google 软件工程系列的上篇之文化篇,来介绍软件工程最重要的一个基石:文化要素。
| 原文地址: https://mp.weixin.qq.com/s/8ARxKtmFjl-fzO1uv5Sbkw |
|---|
不拔(阿里云云栖号)

面向对象的底层逻辑是**基于现实事物做的抽象映射,**重要的不是要面向对象具体技术的使用上,而是分析问题的思维上,这是最难的,它最大的好处是问题空间到解空间是一一直接映射的,请注意是一一直接映射,它意味着我们在讨论方案的时候,完全可以映射到问题空间,如果是间接映射,也就意味着设计的方案后面会面临重新设计的可能性,因为它是基于场景或功能做出的归纳设计,而且是表层的设计。
真正掌握了面向对象分析和设计的方法,也体会到其中的益处,对理解业务、方案设计、编码开发都有好处。
| 原文地址: https://mp.weixin.qq.com/s/aiMzDm_nJgUXuZAFW-9EQw |
|---|
严选技术

性能优化作为一个老生常谈的项目,能在网上看到各种优化点,但对于一个新手来说,要着手一个完整的性能优化项目,却不知从何下手。
这篇文章将介绍如何从零开始做性能优化,介绍如何将性能优化项目落地、推进、实施,对业务赋能等。
| 原文地址: https://mp.weixin.qq.com/s/Ew7FACBY0pv2E3-ZIrcT6A |
|---|
脱不花(笔记侠)
基本上问这四个问题就够了:
第一,如果你突然有半个月的带薪休假,只有一个条件,就是必须研究一个事儿,你会研究什么?
第二,你正在做的事,行业里最顶尖的人或公司是谁,他们是怎么做的?
第三,你在此之前的人生经历中,做过什么重要的取舍?
第四,针对刚才提到过的某个很重要的项目或者工作,如果你有机会能重新做一遍这件事,会有哪些地方不一样?
| 原文地址: https://mp.weixin.qq.com/s/EIw6J4fVCeQu4IYiWEPVYA |
|---|
billpchen(腾讯大讲堂)
提到专利,你会想到…
“太高大上了,离我太遥远”、“天天都是增删改查,哪有什么想法”、“我倒是有想法,但能写成专利吗?”…新手小伙伴们充满了各种畏惧、困惑,这再也正常不过了。
这篇文章的目的就是为了消除大家的畏惧与困惑,揭开专利的神秘面纱,让大家掌握写专利的“门路”。
| 原文地址: https://mp.weixin.qq.com/s/_ebckk0Zn4KyXLSNVK6MtA |
|---|

该阅读器支持 EPUB、Kindle、PDF、漫画等多种常见文本格式,界面清爽功能丰富,拥有自定义字体、添加笔记、书签、划词翻译、导入图书、数据同步等功能。提供了 Windows、macOS 和 Linux 客户端,还支持网页版可在线使用。
| 开源地址: https://github.com/troyeguo/koodo-reader |
|---|

命令行待办事项工具。用 Python 写的交互式命令行 todo 工具,操作简单支持快捷键和鼠标,界面精致可自定义主题和图标。
| 开源地址: https://github.com/kraanzu/dooit |
|---|
| 1、天下就没有偶然,那不过是化了妆的、戴了面具的必然。 – 钱钟书 |
|---|
| 2、“从你出生的那一刻,端什么碗,吃什么饭,经历什么事,什么时候和谁结婚,都是定数。别太难为自己,顺其自然就好。人生的剧本你早在天堂看了,你之所以选择这个剧本,是因为这一生中有你认为值得的地方。”
| —— 梁晓声 |
|---|
| 3、真正的进步不是焦虑的自我怀疑,而是平静的自我接纳,不是被对自己的不满驱赶着,而是被美好的目标吸引着,真正的进步不那么着急,我们默默耕种,耐心等着他开花结果,相信成长会自然而然的发生。 |
|---|
① 关于垃圾分类,我终于看懂了。



② 怎么说呢?也能用
如果文章对你有帮助,记得留言、点赞、加关注哦!
(完)
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的: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?并散列所有无济于事。
我有一些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
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/
我遵循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
我已经构建了一些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
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
我有:When/^(?:|I)follow"([^"]*)"(?:within"([^"]*)")?$/do|link,selector|with_scope(selector)doclick_link(link)endend我打电话的地方:Background:GivenIamanexistingadminuserWhenIfollow"CLIENTS"我的HTML是这样的:CLIENTS我一直收到这个错误:.F-.F--U-----U(::)failedsteps(::)nolinkwithtitle,idortext'CLIENTS'found(Capybara::Element