在行为中,如何只运行一个场景?

问题描述 投票:0回答:5

我有一个“行为”功能,对其进行了大量测试。

我只需要运行特定的场景来满足开发需求。

我该怎么做?

(最好在命令行上)

python bdd python-behave
5个回答
45
投票

如果您想对该功能运行单个测试,请使用

-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

one
参数。否则,shell 会将场景名称的每个单词作为单独的参数传递。


4
投票

标签提供了几个选项...

1)标记慢的,然后通过调用逆函数来避免,例如

behave -t '~@slow_tag_name'  

2)但是,为了获得最大的灵活性,我个人建议使用唯一的 ID 标记每个场景。例如我使用

@YYYY_MM_DD_HHmm_Initials
标签方案,因为它足够独特,并且可追溯性很有用/有趣。然后,您始终可以简单地使用标签调用并让它运行场景,例如

behave @2015_01_03_0936_jh 

1
投票

behave
中非常强大的技巧:

behave --wip

并暂时用

@wip
标记您正在开发的测试。除了其他提到的选择测试的方法(
--name
--tags
--include
)之外,这将是我的#1答案,但在@Cynic的答案中还隐藏着很多。


0
投票

您也可能对这篇漂亮的文章感兴趣,它描述了如何从行为场景大纲中运行单个测试。

例如

#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/面包师的数据来运行此程序,可以这样做

# This is shell
behave -k --tags=@scenarioGroupNameBaker

注意

scenarioGroupNameBaker
标签是如何构建的。 对于每个示例行,大纲/模板标记
scenarioGroupName<scenarioName>
<scenarionName>
替换为示例行中的值,以给出每个场景行的标记名称:D

© www.soinside.com 2019 - 2024. All rights reserved.