写点什么

Smashtest:专注于速度的 Web 应用测试新 DSL

  • 2019-08-03
  • 本文字数:2039 字

    阅读完需:约 7 分钟

Smashtest:专注于速度的 Web 应用测试新 DSL

Peter Tesler(前迪士尼软件开发测试主管)最近发布了Smashtest的第一个主要版本。Smashtest 是描述和部署测试用例的一种新的领域专属语言。Smashtest 非常注重通过语言简洁地表达开发人员执行的重复性测试任务来提高测试人员的工作效率。新语言带有一个并行运行测试的测试运行器和一个 REPL。


Smashtest 的主要新特性包括允许测试人员以树状格式声明性地描述他们的测试。Smashtest 网站上给出了以下 Smashtest 脚本:


Open ChromeOpen FirefoxOpen Safari
Navigate to 'site.com'
Click 'Sign In'
Type {username:} into 'username box'
{username} is 'joe' {username} is 'bob' {username} is 'mary'
Verify success
{username} is 'baduser'
Verify error
复制代码


一次描述了 3 (Chrome、Firefox 和 Safari 浏览器)x(3 + 1) = 12 个测试,在同一个描述中覆盖了快乐路径(joe、bob、mary)和错误路径(baduser):



因此,Smashtest 是一种对空格敏感的语言,它使用空格将测试组织到树中。要执行的测试是由树的深度优先搜索推导出来的。Smashtest 最好与能够尊重现有空格的编辑器一起使用。该版本中提供了一个Atom编辑器的插件。


Smashtest 语言包含一个模拟 API,尤其是模拟时间和地理位置。网络条件和节流也可以用这种语言来描述(只有 Chrome 浏览器才可以使用这个功能)。该语言还包含一个 API,用于查找页面上的元素,并在其上执行断言。


Smashtest 命令行接口(CLI)包括用于持续集成/持续交付的工具和一个REPL(Read-Eval-Print Loop)解释器。该 CLI 还可以使用自动生成的屏幕截图创建报告:



关于 Smashtest 的价值定位,InfoQ 采访了 Smashtest 的创建者 Peter Tesler。


InfoQ:是什么驱使您编写 Smashtest?为什么要开发一种新的测试语言?


Peter Tesler:我们编写、部署、更新和分解自动化测试的速度是最重要的。软件变化很快,测试需要跟上。我想构建一种测试语言,使速度成为优先考虑的因素。

我还希望它能反映出我们在测试时是如何思考的,即广度优先。也就是说,当我在我的应用程序中处于一个特定的状态时,我想到了接下来可能发生的所有排列。例如,如果我在一个登录框中,我在脑海中列出所有我可以输入的潜在用户名。用户首先考虑的是深度,或者是一系列的线性步骤。传统的测试总是反映出后者,但是反映出前者(将测试作为一个排列树来编写)使你可以更容易地按照你的想法编写测试,查看你所涵盖的内容,并快速地编写(因为要打印的内容要少得多)。


InfoQ:与基于Gherkin的解决方案相比,Smashtest 是如何围绕功能/场景(Feature/Scenario)和 Given/When/Then 三元组来组织的?


Tesler:Smashtest 也处理 Gherkin。但传统的 BDD/TDD 工具并不将测试存储为树。

我们还把我们认为不必要的东西作为步骤本身之外的可选项,例如描述或命名测试。测试有一种与其他测试非常相似的趋势,通常被命名为“cart test 014”之类的无用名称。必须想出名字只会减慢你的速度(尽管如此,如果你愿意,你仍然可以添加名字和描述)。


InfoQ:您提到了测试速度的提高。Smashtest 涉及测试过程的哪些部分?


Tesler:测试编写和维护。现在编写一个功能自动化测试所花费的时间非常长,尤其是当我们讨论 Selenium WebDriver 测试时。开发新测试所需的时间越长,应用程序和/或需求更改的次数就越多,自动化带来的好处就越小。以至于许多组织完全放弃自动化,而倾向于手工测试(在手工测试中,创建测试的成本很低)。


InfoQ:与手工测试或现有的测试解决方案相比,您是否有速度提升的经验指标或硬指标?


Tesler:虽然我们还没有具体的经验度量,但是我花了一些时间,分别使用传统的 webdriverjs 以及 Smashtest 编写了一些测试场景,并看到了大约 10 倍的改进。在 Smashtest 中添加一行代码非常容易,并且可以立即将覆盖的排列加倍。


InfoQ:开发人员、测试人员和产品所有者采用 Smashtest 的三个理由?


Tesler:

1.编写测试的速度。易于阅读。

2.它本身可以做很多处理。UI 和 API 测试、各种模拟,它甚至是一种描述页面应该是什么样子的语言(所以你不需要 20 多个验证步骤,一个接一个)。

3.实时报告。它们在测试运行时进行更新,将类似的故障组合成组(使调试更加容易),显示所有的屏幕截图/日志,而且它们非常漂亮!


InfoQ:开发人员、测试人员和产品所有者不采用 Smashtest 的三个理由?


Tesler:

1.和任何语言一样有学习曲线。

2.你必须打破传统,以一种新的方式编写测试。

3.现在,它内置了对 Web UI(使用 Selenium WebDriver)和 HTTP API 测试的支持。如果你想测试其他内容,就必须编写一些自定义的 js。不过,任何可以在 nodejs 中运行的东西都可以在 Smashtest 中运行。


InfoQ:Smashtest 接下来会带来什么?


Tesler:现在我们专注于传播信息和建立社区。我们可能会根据需要添加对更多编辑器和语言的支持。


原文链接:


Smashtest, New Webapp Testing DSL Focusing on Speed


2019-08-03 08:003767
用户头像

发布了 756 篇内容, 共 497.9 次阅读, 收获喜欢 1560 次。

关注

评论

发布
暂无评论
发现更多内容

『CDN』让你的网站访问起来更加柔顺丝滑

古时的风筝

CDN

DevSecOps安全检查清单

啸天

安全 DevSecOps 应用安全

关心群众生活,注意工作方法 Jan 15, 2021

王泰

28天写作

架构师训练营第十三周作业

李日盛

PageRank

敏捷里为何倡导固定迭代周期?

万事ONES

敏捷开发 研发管理 迭代

当音乐学博士搞起编程...

程序猿DD

Spring Frame

“反垄断”来袭,对产业区块链有什么启发

CECBC

市场垄断

矿机挖矿APP系统模式开发平台

v16629866266

同事试用期没过就被劝退,我比他还难受

熊斌

职场 成长笔记 28天写作 职场新人

遇到代码缺陷不要慌,马上教你快速检测和修复

华为云开发者联盟

代码 bug 缺陷检测 代码缺陷

面试官:你真的了解Redis分布式锁吗?

鄙人薛某

redis 分布式锁 线程安全 RedLock

Kubernetes概念篇:基本概念和术语

xcbeyond

Kubernetes 容器 pod 28天写作 Kubernetes从入门到精通

即构小程序直播组件集成教程

ZEGO即构

「产品经理训练营」第一章作业

Sòrγy_じò ぴé

产品经理训练营

解决div里面img图片下方有空白的问题

德育处主任

CSS html html5 大前端 28天写作

生产者与消费者模式,数组阻塞队列(ArrayBlockingQueue)

李尚智

Java 学习 架构 并发编程

特斯拉自建ERP的背后

明道云

一文带你探究Sentinel的独特初始化

华为云开发者联盟

redis sentinel 框架

用AI「驯服」人类幼崽,手头有娃的可以试试

博文视点Broadview

人工智能 联邦学习 强化学习 集成学习 技术宅

区块链科普系列:区块链是什么?

CECBC

区块链

第十三周课后练习

晴空万里

架构师训练营第2期

来不及解释!Linux常用命令大全,先收藏再说

华为云开发者联盟

Linux 编程 命令行 命令

一文解析DDD中台和微服务设计

欧创新

中台 微服务 领域驱动设计 DDD

自动量化搬砖套利交易机器人系统软件APP开发

系统开发

区块链十年与传统金融的变化

CECBC

区块链 金融

为什么我认为 Deno 是一个迈向错误方向的 JavaScript 运行时?

hylerrix

typescript rust nodejs deno V8

不同公司产品经理岗位对比

LouisN

架构师训练营W13作业

Geek_f06ede

古有诸葛亮八卦阵阻敌,今有iptables护网安

华为云开发者联盟

安全 防火墙 网络 iptables 数据包

万字多图 | UML 入门指南

白色蜗牛

Java 程序员 后端 架构设计 UML

Volcano架构设计与原理介绍

华为云原生团队

大数据 AI 云原生 高性能 批量计算

Smashtest:专注于速度的 Web 应用测试新 DSL_大前端_Bruno Couriol_InfoQ精选文章