如何在Behave中仅运行一个场景?

45
我有一个名为“behave”的功能,上面有很多测试。
我只需要运行特定的场景来满足开发需求。
我该怎么做?
(最好是在命令行上完成)
5个回答

47
如果你想对该功能进行单独测试,可以使用-n--name标志,它似乎希望在Scenario: 之后输入文本。
behave -n 'This is a scenario name'

你可以通过使用-i--include标志,然后加上特性文件的名称来运行特性文件。
behave -i file_name.feature

或者:

behave --include file_name

你还可以使用--exclude标志来排除。
behave -e file_name

更多信息请查阅命令行参数的文档。在它们的附录部分中有许多有用的信息。
注意:在我写这篇文章的时候,它不能与Python 3.6和Behave 1.2.5一起使用,因为有这个问题。 (更新:1.2.6已经发布并修复了这个问题,但如果你使用的是Python 3.4,那个版本在pip中不可用,所以你可以通过pip3 install git+https://github.com/behave/behave#1.2.6rc来解决这个问题)。
另外,似乎你应该能够在Feature:之后传入文本作为-i标志,但目前这个功能不起作用。如果它再次起作用,请有人提醒我更新。我还鼓励大家尝试使用wip标志,它允许你在测试中添加@wip,然后-wip不仅会运行测试,还会允许打印/记录语句进行调试。

35

要运行单个场景,可以使用带有场景名称的-n

$ behave -n 'clicking the button "foo" should bar the baz'

我在上面使用单引号,以将场景名称作为-n的一个参数。否则,shell会将场景名称的每个单词作为单独的参数传递。


4
单引号在Windows命令解释器中似乎无法正常工作,此时需要使用双引号。 - danio

4
标签提供了几个选项...
1) 标记慢的,然后通过调用反向来避免,例如:
behave -t '~@slow_tag_name'  

2) 然而,为了最大的灵活性,我个人建议为每个场景打上一个唯一的标识符。例如,我使用一个@YYYY_MM_DD_HHmm_Initials的标签方案,因为它足够唯一并且可追溯性很有用/有趣。然后您可以仅使用该标签来调用并运行场景,例如:

behave @2015_01_03_0936_jh 

1
在编程中,behave非常强大的技巧:
behave --wip

在开发测试时,请使用@wip标记您的测试。除了其他提到的选择测试的方法(--name--tags--include)之外,这将是我的第一选择,但在@Cynic的答案中仍然相当隐蔽。


0

你可能会对this这篇精美的文章感兴趣,它描述了如何在behave中从场景大纲中运行单个测试。

例如:

#This is Gherkin
Feature: Running a single test from a scenario outline

@scenarioGroupName @scenarioGroupName<scenarioName>
Scenario Outline: test running one of many scenarios, iteration <n> / <scenarioName>
  Given test is index <n> for <scenarioName> 
  When we do something with <scenarioParameter>  
  Then all the checks pass


Examples: Test scenarios
 |n | scenarioName  | scenarioParameter
 |1 | Able          | first
 |2 | Baker         | second 
 |3 | Charlie       | third
 #etc

要仅使用场景2/baker的数据来运行此程序,可以执行以下步骤:
# This is shell
behave -k --tags=@scenarioGroupNameBaker

请注意如何构建 scenarioGroupNameBaker 标签。 对于每个示例行,轮廓模板标签 scenarioGroupName<scenarioName> 中的 <scenarionName> 被替换为示例行中的值,以便为每个场景行提供标签名称 :D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接