问题标签 [atdd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bdd - 端到端验收测试应该如何将一个大功能划分为场景?
在他的文章中什么是故事?丹·诺斯(Dan North)提出了许多出色的观点。三个特别是:
场景标题应该说明有什么不同
您应该能够并排排列场景,并仅使用标题来描述它们的不同之处。
场景应该根据给定、事件和结果来描述
这是我在采用 BDD 的团队中看到的最强大的行为转变。只需让业务用户、分析师、测试人员和开发人员采用这种“给定/何时/然后”的词汇,他们就会发现一个模棱两可的世界消失了。
并非所有场景都如此简单。有些最好表示为一系列事件,描述为:当[我做某事]时给定[某些上下文]然后[这发生]当[我做另一件事]然后[这个新事情发生]等等。一个示例是向导式网站,您可以在其中逐步浏览一系列屏幕以构建复杂的数据模型。只要您养成以这些术语思考的习惯,就可以将事件和结果的顺序混合在一起是完全合适的。
故事应该足够小以适应迭代
关于如何做到这一点没有硬性规定,只要你把它分解成可证明的块。一般来说,如果有超过五六个场景,一个故事可能会通过将类似场景组合在一起来分解。
现在假设有人试图描述一些向导式功能的端到端验收测试(就像他在上面考虑的那样)。
通过在使用向导功能开始时状态的不同来定义“场景”是很自然的(实际上这似乎符合他上面的第 1 点和第 2 点)——但列举通过向导的每条路径肯定是不合适的(从头到尾)以完全序列化的形式产生这样的独立场景?这不仅会产生很多场景,而且每个场景都会包含很多步骤(与 Dan 的第 3 点相反)——其中很多步骤会在场景之间重复,只是为了达到它们分歧的状态!
/li>另一方面,在向导功能的每个决策分支开始时为每个可能的状态定义一个场景会更有效—— “事件”只是将功能带到下一个步骤的单个步骤决策分支。但是,这不是将 SUT 移到堆栈中,因此我们将不再定义端到端验收测试,而是定义较低的顺序?此外,遵循和理解测试标准更不自然——这肯定会破坏 BDD 的全部意义吗?
When
如果走这条路,在我看来,将每个决策分支划分为单独的特征似乎更正确;然后在单个功能中仅考虑每个分支的那些场景——这仅强调了我关于 SUT 已向下移动堆栈的观点。
也许这些端到端验收测试过于详细,整个向导(在这个阶段)应该更多地被视为一个黑匣子?但是,我不确定这如何帮助客户了解他们正在调试的内容——尤其是因为此功能的详细步骤是整个系统可接受性的关键。
将此类功能划分为场景的最合适方法是什么?
python-2.7 - Robot Framework 中的 DateTime 库
是否可以在 RobotFrame 版本 2.8.4 中使用 DateTime 库,我已经检查并知道 DateTime 库仅带有 RF 版本 2.8.5。所以,就我而言,我使用的是不支持 DateTime 库的旧版本。我的python版本是2.7.8
testing - 如何从 Robot Framework 中执行 60 天的测试中提取每周报告和日志
我正在使用 Robot Framework 和一些内部库(例如 s2l、os、公告、集合、日期时间和一些自己的内部库)在我的 SUT(被测系统)中运行性能/可靠性/压力(P/S/R)测试脚本库),并且需要运行 60 天来测量预期的 P/S/R 参数。我知道在完成 60 天的执行后(如果 SUT 没有被任何系统或网络问题中断),我会得到日志和报告文件。但是,我需要将其每周执行状态作为日志文件或报告文件。
有没有办法在机器人框架中做到这一点,我只使用机器人框架进行测试。是否有任何内部/外部库可用(除了公告库)来有效地做到这一点。
或者,我是否可以包含一个 python 脚本并将该脚本包含在测试 ENV 中,如果可以,我该怎么做,任何建议。
jenkins - Cucumber:动态标记场景
我想知道是否有人尝试过即时标记场景。
这是一个用例:我们有数百个回归测试场景,其中一些测试可能会失败,因为 API 已关闭(这通常意味着它下次运行时应该通过),或者数据更改(这意味着要么脚本不够健壮,我们需要修复它,要么我们需要更改数据),或者需求发生了变化(这意味着我们需要更改脚本)。
对于后两种情况,相同的场景应该失败多次。
我们需要用@quarantine 标记需要人工干预(重写脚本或更改数据)的那些,并取出@regression 标记,这样它就不会一遍又一遍地运行,而我们知道它无论如何都会失败。
我没有看到有人这样做。这是可行的吗?或者是在 Cucumber 中执行此操作而不使用复杂的 shell 脚本的唯一方法?
cucumber - BDD的附加值是什么?
我现在正在做一个项目,我们使用 cucumber-jvm 来驱动验收测试。
在以前的项目中,我会在 groovy 或 scala 中创建内部 DSL 来推动验收测试。这些 DSL 使用起来相当简单,即使是非技术人员也可以在一点指导下编写测试。
我看到的是 BDD 为测试添加了另一层间接和语义糖,但我看不到附加值,尤其是在非技术人员可以使用内部 DSL 的情况下。
在黄瓜的情况下,stepDefs 似乎将驱动任何给定测试的代码分散在几个不同的类中,使得测试代码难以在特性文件之外阅读和调试。另一方面,将与一个测试相关的所有代码放在单个 stepDef 类中会阻止对 stepDef 的重用。这两种结果都是不可取的,让我问,自然语言的使用有什么值得这些额外的和不直观的间接的?
有什么我想念的吗?就像 ATDD 和 BDD 之间的微妙哲学差异一样?前者是否意味着命令式测试,而后者意味着声明式测试?这些审美差异有内在价值吗?
所以我要问的是,为了证明驱动测试的实际代码的可读性恶化,增加了什么价值是合理的。这种 BDD 的东西真的值得痛苦吗?增值不仅仅是审美?
如果有人能提出一个令人信服的论点来说明为什么 BDD 的收益超过了 BDD 的痛苦,我将不胜感激?
ruby - 如何在 Ruby Cucumber 中计算运行场景的标签?
我有一个功能文件,其中包含多个场景和每个场景的不同标签。我正在使用带有特定标签的 rake 命令运行 Cucumber 测试,并正在创建自定义 HTML 报告。
自定义 HTML 报告是在 After 挂钩中创建的。当我使用 rake 命令运行时,我面临着如何获取场景计数的问题。我用
获取总场景的计数,但这给出了功能文件的总场景计数,我试图只获取带有特定标签的场景计数。
selenium - 部署到 TFS 时,Selenium webdriver 为面包屑文本 (IwebElement) 返回 string.Empty
这是我在 StackOverflow 上的第一篇文章,我希望我能够详细地提供整个问题。如果我需要提供任何其他信息,请告诉我。问题描述:我正在使用常规的面包屑导航,显示从一页到另一页的导航顺序。面包屑具有 html 格式的 id = “divbreadcrumb”。
例如:如果我从主页(Home)导航到预订页面(Bookings),那么导航如下:
首页 > 预订
我希望自动化我对面包屑的测试,并检查页面上显示的面包屑文本与它应该是的实际面包屑文本。我试图通过使用 selenium Webdriver 以及 ATDD 工具来实现这一点,即 Specflow/SpecRun 和 Nunit,使用下面提到的代码。
现在,当我尝试在本地运行测试时,它工作正常,但是当我将代码签入 TFS 并构建它时,VS Test Runner 构建失败,因为它无法从 IwebElement 元素中找到文本,或者它返回文本为 String.Empty。现在,当在我的本地机器上运行相同的测试时,可以很好地给出预期的测试结果和我的 Iwebelement 的预期值(用于面包屑)。此外,上面的面包屑的 HTML 结构正在后端呈现,我可以这么说是因为我试图查看它在运行时使用 webdriver 的 pagesource 属性呈现的 HTML,并将其显示在我的异常消息中。
此外,我的后端 HTML 代码显示为:
PFB 我在自动化脚本中用于检查来自页面上的面包屑的文本的代码:
我得到的错误是
java - 如何在 Bluemix 构建和部署管道中包含 Java BDD?
在我参与的团队中,我们正在研究如何从 bluemix 服务中受益,以改进我们实际的 devops 流程。我们的技术栈基于 Java、Weblogic、Oracle。我们希望团队成员的每一个新的开发贡献一旦在本地编译和验证后都集成在一个由 bluemix 提供支持的集成区域中,然后将结果自动部署在“集成空间”中,然后自动执行 BDD 测试并报告结果。
任何人已经实现/体验过这样的配置?或有关该主题的任何指示?
问候,奥利维尔。
cucumber - 将 BDD 测试应用于批处理场景?
我正在尝试将 BDD 实践应用于我的组织。我在一家银行工作,每晚的批处理作业是一个庞大的编排多系统批处理作业流,它们运行并在彼此之间传递数据。
在我们的测试中,交互式在线测试可能只占测试场景的 40-50%,而其余的则嵌入到批处理作业中。例如,测试场景可能是:
- 鉴于截至晚上 10 点,我的储蓄账户余额为 100 美元
- 当夜间批处理在晚上 11 点运行时
- 然后在批处理运行完成后的凌晨 3 点,我应该回来查看我有 0.001 美元的额外应计利息。
- 并且银行的总分类帐应该有一个额外的应计利息条目 0.001 美元。
如您所见,这是一个非常异步的场景。如果我要使用 Cucumber 来触发它,我可能可以创建一个步骤定义,以便在晚上 10 点之前将 100 美元的余额插入帐户,但是使用 Cucumber 来触发批处理在晚上 11 点运行是不现实的,因为批处理作业是通常由操作员使用自己的调度工具(例如 Control-M)执行。然后让 Cucumber 等待并听几个小时,然后再验证应计利息,我不确定我是否会遇到超时。
这只是一种情况。批量运行对银行来说非常昂贵,我们总是在尽可能多的场景中进行一次批量运行。我们也有老化的场景,我们需要运行 6 个月的批处理,只是为了检查定期存款期限结束时的最终利息是否正确(我绝对不能让 Cucumber 等那么久,可以吗?)
我的问题是,有没有将 BDD 实践应用于诸如此类的大批量场景的示例?一个人将如何解决这个问题?
编辑以解释为什么我不打算在我控制的情况下执行孤立的测试场景:
我们在其中一个测试级别(我们在我的银行中将其称为系统测试)中进行了孤立的场景,并且 BDD 确实在这种情况下工作。但最终,我们需要达到一个具有完整端到端环境的测试级别,通常是在 SIT 中。在这种环境中,并行运行多个测试场景是一个标准,其中没有一个可以完全控制环境。根据项目的范围,此环境最多可运行 200 个应用程序。因此,客户渠道如网上银行将运行交易场景,而在核心银行系统中,将执行诸如计息、自动转账等场景。还会有会计场景,总账系统会合并和平衡环境中的所有账户。
我想要做的是找到一种方法来利用 BDD 框架来自动化测试执行并捕获结果,这样我们就不必在环境中手动跟踪它们。
asp.net - IdentityServer3 xBehave 测试
我想为我的 WebApi 和 IdentityServer 编写验收测试。为了使事情尽可能简单,我从这里复制了整个示例项目,但添加了另一个项目,它基本上与控制台客户端相同,但作为验收测试。
我现在得到的唯一情况是:
我现在总是得到状态代码“未授权”而不是“确定”。当我通过控制台客户端调用两台服务器时,它按预期工作。非常令人沮丧。
更新 我用以下几行替换了“调用服务时”步骤,以增强简单性:
问题还是一样:现在抛出 HttpRequestException(401 未授权)。