10个更好的测试技巧

IT资讯 2018-08-08 88 次浏览 0 条评论

如何充分利用您的测试策略,确保您的网站尽可能最好。

与几年前相比,Web开发现在变得更加复杂。网页设计工具,浏览器功能,前端框架和最佳实践几乎每月都会发生变化,总会有更新内容。这带来了风险。我们怎样才能确定这些变化不会产生意想不到的副作用?

测试就是降低风险。如果用户在使用网站时遇到问题,他们就不太可能回来,更有可能跳转到竞争对手。通过检查在开发网站时做出的每个决定,它减少了用户获得低于标准体验的机会。

显然,用户测试不仅仅是确保代码库没有错误。有一些步骤可以在设计过程中进行测试,以确保创建的所有内容都受到真实用户需求的指导。

01.写很多单元测试

三角形分为端到端,整合和单元

有许多单元测试,但更少的集成和端到端测试,以在速度和效率之间取得平衡

非结构化代码是进一步发展中的错误和问题的先兆。它不仅难以理解而且无法升级,也使得测试变得困难。由于这么多部分都直接相互依赖,因此必须立即对所有代码进行测试。这使得很难确切地看到什么在时机成熟时不起作用。

应用程序的每个部分都应该分解为自己关注的问题。例如,除了样式化输入和按钮之外,登录表单还可以包括数据库查询,身份验证和路由。这些中的每一个都是拥有自己的类,功能或组件的很好的候选者。

坚实的代码库的基础是一组很好的单元测试。这些应涵盖所有代码并快速运行。大多数单元测试及其框架共享相同的结构:

<PRE>
describe(“DateLocale”,function(){
test(“以正确的语言提供日期”),function(){
var date = new DateLocale(“en”);
date.setDate(new Date(1525132800000));
期待(date.getDay())TOBE( “星期二”)。
});
});
</ PRE>
“describe”块表示正在测试的代码段。其中包括许多测试,用于设置场景并将我们的预期结果与实际结果进行比较。如果它们不匹配,则测试失败,我们可以进一步调查。

通过在更改文件时创建和运行单元测试,我们可以确保没有任何意外破坏了每段代码的预期功能。这些部分也可以在需要时放入其他项目中。由于已经为它编写了测试,我们可以确保这个特定的单元从一开始就没有任何问题。

有很多工具可以帮助编写单元测试,例如Jest,Jasmine和AVA。最合适的将取决于每个项目的需求,涉及的任何框架以及最终的开发人员偏好。

02.必要时使用测试双打

sinon.js用户测试

Sinon具有伪造的常用浏览器API方法,例如setInterval和XMLHttpRequest

虽然它看起来可能适得其反,但它可能比原先预期的更容易测试。例如,如果某个函数依赖于外部库,那么来自该库的任何错误都将无法通过其他测试,即使我们编写的代码是正确的。

对此的解决方案是添加占位符 - 或“测试双打” - 这个功能以相同的方式运行,但始终会给我们一个预期的结果。三个主要测试双打是'模拟','存根'和'间谍'。

模拟是一个简单地保存真实地方的类或对象。它们具有相同的界面,但不提供任何实用功能。

存根类似于模拟,但将以预编程的行为进行响应。这些将在需要时用于模拟应用程序的特定部分进行测试。

间谍更关注如何调用该接口中的方法。这些通常用于检查函数何时运行,运行的次数以及执行时提供的参数。这是我们知道正确的事情在正确的时间得到控制。

像Sinon,Testdouble和Nock这样的图书馆提供了很好的现成测试双打。一些套房,如Jasmine也提供内置的双打。

03.检查组件如何协同工作

将代码分解为单独的组件后,我们需要测试它们是否可以一起工作。例如,如果身份验证层无法理解从数据库返回的内容,则无人能够登录。这些称为“集成测试”。他们检查应用程序的一部分如何与另一部分一起工作。虽然单元测试是故意彼此隔离的,但集成测试鼓励这两方之间的通信。

与单元测试一样,集成测试的目标是检查最终结果是否为预期结果。在我们的登录示例中,可能是检查数据库中是否更新了“上次登录”时间戳。

由于一次处理的更多,集成测试通常比单元测试慢。因此,它们应该更少,并且应该减少运行次数。理想情况下,只有在功能完成后才会运行,以确保没有任何变化。

用于单元测试的相同套件可用于编写集成测试,但它们应该能够单独执行以保持快速运行。

04.遵循每个用户的路径

Puppeteer屏幕

Puppeteer可以控制Chrome的无头版本,就好像它是用户一样。它可以生成屏幕截图以显示问题

最高级别的自动技术测试称为“端到端”或“功能”测试。顾名思义,此级别涵盖了用户从开始到结束可以采取的所有操作。它们模拟真实场景以及用户如何与成品交互。

这些测试的结构通常反映了作为开发过程一部分而创建的用户故事。要扩展之前的示例,可能需要进行测试以确保用户可以在登录表单上输入其用户名和密码。

由于他们依赖UI来运行,因此需要在界面更改时进行更新。加载时间过长也会导致问题。如果任何操作无法快速完成,则测试将失败,这将导致误报。

这些测试也会运行缓慢。瓶颈往往来自运行浏览器,这不像命令行那么快,但是必须模拟正确的环境。因此,这些操作的运行频率低于集成测试 - 通常在将一组更改投入生产之前。

Selenium和Puppeteer等工具可以帮助编写端到端测试。它们使浏览器能够通过代码进行控制,从而自动化重复的手动过程。

05.制定业绩预算

Ping屏幕

Pingdom还可以帮助监控整个访问期间的用户流量,这有助于量化变更的成功程度

现代前端开发通常涉及为每个项目创建具有大量重要资产的捆绑包。不小心,这些可能会对性能产生破坏性影响。

Webpack提供了一种跟踪捆绑和资产大小等性能问题的方法。通过调整webpack.config.js中的“性能”对象,它可以在文件变得过大时发出警告以及如何最好地解决它。这些甚至可以抛出可以阻止构建成功的错误,以确保最终用户不会受到负面影响。

在一系列类似于网站访问者使用的设备上进行测试也很重要。移动优先的设计和开发方法可确保低端设备上的用户不会等待页面呈现。

WebPagetest提供了网站性能的全面概述,以及如何改进网站的提示。 Pingdom等实时服务可以跟踪实时用户对真实数据的性能。

06.开发可访问性

Matt crouch web开发者截图

作为审计过程的一部分,Lighthouse测试一个关于常见可访问性实践的网站,并强调要改进的内容

每个人都应该随时可以访问每个网站。虽然可访问性测试通常指的是残障人士,但通过创建更易于访问且易于浏览的网站,整体上所做的更改将使每个人受益。

有些工具可以自动检测最常见的问题,例如语义标记较差或图像上缺少替代文本。例如,Lighthouse在Chrome开发人员工具中运行,并提供有关其分析页面的可访问性的即时反馈。

自动化工具无法检测到所有内容 - 例如,机器无法知道图像的替代文本是否合适。除了具有各种残疾的用户之外,没有其他替代手动测试。设备将根据用户的独特需求进行设置,我们需要确保满足这些需求。07.努力达到极致

边缘情况是问题的常见原因 - 特别是字符串的长度和内容。默认情况下,长字会拉伸容器并导致页面上出现流量问题。但是,如果有人决定使用不同字母表中的字符或使用表情符号,会发生什么?

将这些字符串存储在数据库中时,问题变得更加永久。长字符串可能会被截断,编码问题最终可能会扭曲消息。所有测试数据都应包括这些检查。

模糊测试是一种自动化技术,它使用随机输入作为压力测试的形式来轰击界面。测试的目的是确保意外 - 但可能 - 用户操作集不会出现意外问题。

这些极端不仅限于内容。那些连接速度慢,低端设备和小屏幕的人不应该等待。始终瞄准更快的性能指标,例如第一次绘画的时间,以满足这些用户的需求。

简而言之,几乎所有发展方面都比预期更加多样化。尽可能在过程的早期使用真实数据,以确保网站能够应对每一个可能发生的事情。

08.留意回归

随着功能的添加或更改,需要重新运行测试。重要的是优先考虑那些可能受到这种变化影响的人。测试套件Jest能够根据Git提交确定已更改的内容。然后,它可以确定首先运行哪些测试以提供最快的反馈。

像PhantomCSS这样的可视化回归工具可以检测样式何时发生变化。 Jest中存在类似的概念,用于称为快照测试的对象或UI组件。这些捕获每个测试的初始状态。当任何更改时,测试将失败,直到确认更改为止。

09.早点测试,经常测试

当严格的计划确定版本时,很容易让开发人员创建产品并让测试人员测试执行。实际上,这可能会导致大量浪费的开发时间。

养成尽早测试每个新功能的习惯意味着可以检查一个想法,以确保它朝着正确的方向前进。通过使用纸质原型和模型,很容易测试一个没有代码的想法。

通过定期测试功能,我们可以确定它能够满足用户的需求。如果需要任何小的调整,它们更容易在较小的阶段实现。

在真实用户身上测试想法也很重要。 alpha和beta测试的轮次可以尽早突出问题,以较少的开销来纠正它们。后续轮次应涉及与最终最终用户相关的目标人口统计数据。

最后,保持这些轮次尽可能小。 Neilsen的一项研究发现,五个用户足以了解哪些有效,哪些无效。如果被测元件保持较小,所获得的反馈范围将足以为下一轮测试提供动力。

10.鼓励测试文化

测试只有在经常使用时才有益。参与项目的每个人都必须参与其中以帮助他们最有效。

在任何更新落入代码库之前,持续集成(CI)工具会自动执行尽可能多的检查。这些可以运行单元测试,检查覆盖范围并自动识别常见问题,并在出现任何问题时标记它们。任何问题的代码都无法添加到项目中。

与功能开发分离的人员可以执行质量保证(QA)测试,这可以作为最终检查,以确保所有必需的功能都存在并且正常工作。

如果错误确实通过各种检查,请确保有一个流程来内部和外部报告它们。这些报告可以构成未来新测试的基础,以确保此问题永远不会重现。

0
小包子

【 飞龙网.com:小包子】为你推荐!我的文章如同我的名字,香甜可口,咸淡适宜,油而不腻,阅后令你回味无穷尽哦~

发表评论