BDD - Python Behave 配置文件 behave.ini
- 引言
- behave.ini
- 配置参数的类型
- 配置项
- behave.ini 应用
- feature 文件
- step 文件
- 创建 behave.ini
- 执行 Behave
- 查看配置默认值 behave -v
引言
前面文章 《BDD - Python Behave Runner Script》就是为了每次执行 Behave 时不用手动敲一长串选项,其实还有另外一种实现方式,那就是通过配置文件指定 Behave 的命令行参数和设置。今天就来了解一下 Behave 的配置。
想了解更多 Behave 相关的文章,欢迎阅读《Python BDD Behave 系列》,持续更新中。
behave.ini
behave.ini 文件是 Behave 的配置文件,用于设置 Behave 命令行选项,配置文件必须以标签 “[behave]” 开头。
配置参数的类型
- text 文本
将提供的任何文本分配给配置设置
tags=smoke
- bool 布尔值
为配置设置分配一个布尔值。文本描述当值为 true 时的功能。
True 值为" 1 “,” yes ", " True “和” on "。
False 值为“0”、“no”、“False”和“off”。
dry_run = false
- sequence
系列文本
字段在新行上接受一个或多个值,例如 tags 的配置
tag 带不带 @, Behave 都无所谓能识别到。
tags=@foo,~@bar
@zap
相当于 --tags= @foo,~@bar --tags=@zap
配置项
基本上 Behave 的配置项跟 Behave 命令行选项是对应的,但是这里请注意配置项的名字并不是一一对应的
,具体可参考官方文档 Behave Configuration
例如:
命令选项 –dry-run,配置项名字却是 dry_run
命令选项 –o 或 --outfile,配置项名字却是 outfiles
查看 Behave 命令行选项
执行命令:behave -h
PS C:\Automation\Test> behave -h
usage: behave [options] [ [DIR|FILE|FILE:LINE] ]+
Run a number of feature tests with behave.
positional arguments:
paths Feature directory, file or file location (FILE:LINE).
optional arguments:
-h, --help show this help message and exit
-c, --no-color Disable the use of ANSI color escapes.
--color Use ANSI color escapes. This is the default behaviour. This switch is
used to override a configuration file setting.
-d, --dry-run Invokes formatters without executing the steps.
-D NAME=VALUE, --define NAME=VALUE
Define user-specific data for the config.userdata dictionary. Example:
-D foo=bar to store it in config.userdata["foo"].
-e PATTERN, --exclude PATTERN
Don't run feature files matching regular expression PATTERN.
-i PATTERN, --include PATTERN
Only run feature files matching regular expression PATTERN.
--no-junit Don't output JUnit-compatible reports.
--junit Output JUnit-compatible reports. When junit is enabled, all stdout and
stderr will be redirected and dumped to the junit report, regardless of
the "--capture" and "--no-capture" options.
--junit-directory PATH
Directory in which to store JUnit reports.
-f FORMAT, --format FORMAT
Specify a formatter. If none is specified the default formatter is
used. Pass "--format help" to get a list of available formatters.
--steps-catalog Show a catalog of all available step definitions. SAME AS:
--format=steps.catalog --dry-run --no-summary -q
-k, --no-skipped Don't print skipped steps (due to tags).
--show-skipped Print skipped steps. This is the default behaviour. This switch is used
to override a configuration file setting.
--no-snippets Don't print snippets for unimplemented steps.
--snippets Print snippets for unimplemented steps. This is the default behaviour.
This switch is used to override a configuration file setting.
-m, --no-multiline Don't print multiline strings and tables under steps.
--multiline Print multiline strings and tables under steps. This is the default
behaviour. This switch is used to override a configuration file
setting.
-n NAME, --name NAME Only execute the feature elements which match part of the given name.
If this option is given more than once, it will match against all the
given names.
--no-capture Don't capture stdout (any stdout output will be printed immediately.)
--capture Capture stdout (any stdout output will be printed if there is a
failure.) This is the default behaviour. This switch is used to
override a configuration file setting.
--no-capture-stderr Don't capture stderr (any stderr output will be printed immediately.)
--capture-stderr Capture stderr (any stderr output will be printed if there is a
failure.) This is the default behaviour. This switch is used to
override a configuration file setting.
--no-logcapture Don't capture logging. Logging configuration will be left intact.
--logcapture Capture logging. All logging during a step will be captured and
displayed in the event of a failure. This is the default behaviour.
This switch is used to override a configuration file setting.
--logging-level LOGGING_LEVEL
Specify a level to capture logging at. The default is INFO - capturing
everything.
--logging-format LOGGING_FORMAT
Specify custom format to print statements. Uses the same format as used
by standard logging handlers. The default is
"%(levelname)s:%(name)s:%(message)s".
--logging-datefmt LOGGING_DATEFMT
Specify custom date/time format to print statements. Uses the same
format as used by standard logging handlers.
--logging-filter LOGGING_FILTER
Specify which statements to filter in/out. By default, everything is
captured. If the output is too verbose, use this option to filter out
needless output. Example: --logging-filter=foo will capture statements
issued ONLY to foo or foo.what.ever.sub but not foobar or other logger.
Specify multiple loggers with comma: filter=foo,bar,baz. If any logger
name is prefixed with a minus, eg filter=-foo, it will be excluded
rather than included.
--logging-clear-handlers
Clear all other logging handlers.
--no-summary Don't display the summary at the end of the run.
--summary Display the summary at the end of the run.
-o FILE, --outfile FILE
Write to specified file instead of stdout.
-q, --quiet Alias for --no-snippets --no-source.
-s, --no-source Don't print the file and line of the step definition with the steps.
--show-source Print the file and line of the step definition with the steps. This is
the default behaviour. This switch is used to override a configuration
file setting.
--stage STAGE Defines the current test stage. The test stage name is used as name
prefix for the environment file and the steps directory (instead of
default path names).
--stop Stop running tests at the first failure.
-t TAG_EXPRESSION, --tags TAG_EXPRESSION
Only execute features or scenarios with tags matching TAG_EXPRESSION.
Pass "--tags-help" for more information.
-T, --no-timings Don't print the time taken for each step.
--show-timings Print the time taken, in seconds, of each step after the step has
completed. This is the default behaviour. This switch is used to
override a configuration file setting.
-v, --verbose Show the files and features loaded.
-w, --wip Only run scenarios tagged with "wip". Additionally: use the "plain"
formatter, do not capture stdout or logging output and stop at the
first failure.
-x, --expand Expand scenario outline tables in output.
--lang LANG Use keywords for a language other than English.
--lang-list List the languages available for --lang.
--lang-help LANG List the translations accepted for one language.
--tags-help Show help for tag expressions.
--version Show version.
behave.ini 应用
下面通常简单的实例来应用一下 Behave 的配置,项目结构如下:
feature 文件
创建 shopping_cart.feature,加上一些 tags
# shopping_cart.feature
Feature: Shopping Cart and Order Process
@cart @smoke
Scenario: Guest user adds items to the cart
Given the user is on the home page
When the user adds an item to the cart
Then the user should see the item in the cart
@cart @regression
Scenario: Registered user removes items from the cart
Given the user is logged in
And the user has items in the cart
When the user removes an item from the cart
Then the user should see the updated cart
@order @smoke
Scenario: Guest user places an order
Given the user is on the home page
When the user adds an item to the cart
And the user proceeds to checkout
And the user completes the order
Then the user should receive an order confirmation
@order @regression
Scenario: Registered user tracks an order
Given the user is logged in
And the user has placed an order
When the user checks the order status
Then the user should see the current order status
step 文件
创建 calculator_steps.py 文件
# calculator_steps.py
from behave import given, when, then
@given('the calculator is turned on')
def step_calculator_turned_on(context):
context.calculator_on = True
@when('I add {num1:d} and {num2:d}')
def step_add_numbers(context, num1, num2):
context.result = num1 + num2
@then('the result should be {expected_result:d}')
def step_check_result(context, expected_result):
assert context.result == expected_result, f"Actual result: {context.result}, Expected result: {expected_result}"
创建 behave.ini
这里将配置文件和 feature, steps 文件夹是同级的, 配置了一些常用的 Behave 命令选项:
- 配置 feature 的路径:paths=BDD/Features/tag_example
- disable dry-run 执行步骤:dry_run = false
- 配置标签为 smoke 且 为 cart 的测试用例:tags=smoke
cart - 配置 format 为自定义的 my_html:format = my_html
- 配置输出文件为 my_report.html :outfiles = my_report.html
- 配置自定义输出格式 my_html
[behave.formatters]
my_html = behave_html_formatter:HTMLFormatter
上面就是配置自定义的 my_html 的输出格式是 behave_html_formatter
behave.formatters 模块是 Behave 框架中用于处理格式化输出的模块,可以自定义。它包含了一些用于定义和管理不同输出格式的类。这些类负责将测试结果以各种方式呈现,比如在终端上显示、生成报告文件等。详情请参考 Behave Formatter
所以整个配置内容如下:
# behave.ini
[behave]
paths=BDD/Features/tag_example
dry_run = false
tags=smoke
cart
format = my_html
outfiles = my_report.html
[behave.formatters]
my_html = behave_html_formatter:HTMLFormatter
执行 Behave
只需执行命令 behave,不用敲那么命令了,只有 BDD/Features/tag_example 文件夹下的 标签为 smoke 且为 cart 的测试用例执行了,并且生成了自定义的 html 测试报告。
PS C:\Automation\Test> behave
Feature: Shopping Cart and Order Process # BDD/Features/tag_example/shopping_cart.feature:3
@cart @smoke
Scenario: Guest user adds items to the cart # BDD/Features/tag_example/shopping_cart.feature:6
Given the user is on the home page # BDD/steps/shopping_cart_steps.py:27
When the user adds an item to the cart # BDD/steps/shopping_cart_steps.py:40
Then the user should see the item in the cart # BDD/steps/shopping_cart_steps.py:61
@cart @regression
Scenario: Registered user removes items from the cart # BDD/Features/tag_example/shopping_cart.feature:12
Given the user is logged in # None
And the user has items in the cart # None
When the user removes an item from the cart # None
Then the user should see the updated cart # None
@order @smoke
Scenario: Guest user places an order # BDD/Features/tag_example/shopping_cart.feature:19
Given the user is on the home page # None
When the user adds an item to the cart # None
And the user proceeds to checkout # None
And the user completes the order # None
Then the user should receive an order confirmation # None
@order @regression
Scenario: Registered user tracks an order # BDD/Features/tag_example/shopping_cart.feature:27
Given the user is logged in # None
And the user has placed an order # None
When the user checks the order status # None
Then the user should see the current order status # None
1 feature passed, 0 failed, 0 skipped
1 scenario passed, 0 failed, 3 skipped
3 steps passed, 0 failed, 13 skipped, 0 undefined
Took 0m0.000s
生成了 html 测试报告:
查看配置默认值 behave -v
如果您想知道 behave 从哪里获得其配置默认值,您可以使用 “-v” 命令行参数,它会告诉您。
PS C:\Automation\Test> behave -v
Loading config defaults from "./behave.ini"
Using defaults:
color False
show_snippets True
show_skipped True
dry_run False
show_source True
show_timings True
stdout_capture True
stderr_capture True
log_capture True
logging_format %(levelname)s:%(name)s:%(message)s
logging_level 20
steps_catalog False
summary True
junit False
stage None
userdata {}
default_format pretty
default_tags
scenario_outline_annotation_schema {name} -- @{row.id} {examples.name}
format ['my_html']
outfiles ['my_report.html']
paths ['BDD\\Features\\tag_example']
tags ['smoke', 'cart']
more_formatters {'my_html': 'behave_html_formatter:HTMLFormatter'}
Supplied path: "BDD\Features\tag_example"
Trying base directory: C:\Automation\Test\BDD\Features\tag_example
Trying base directory: C:\Automation\Test\BDD\Features
Trying base directory: C:\Automation\Test\BDD
Feature: Shopping Cart and Order Process # BDD/Features/tag_example/shopping_cart.feature:3
@cart @smoke
Scenario: Guest user adds items to the cart # BDD/Features/tag_example/shopping_cart.feature:6
Given the user is on the home page # BDD/steps/shopping_cart_steps.py:27
When the user adds an item to the cart # BDD/steps/shopping_cart_steps.py:40
Then the user should see the item in the cart # BDD/steps/shopping_cart_steps.py:61
@cart @regression
Scenario: Registered user removes items from the cart # BDD/Features/tag_example/shopping_cart.feature:12
Given the user is logged in # None
And the user has items in the cart # None
When the user removes an item from the cart # None
Then the user should see the updated cart # None
@order @smoke
Scenario: Guest user places an order # BDD/Features/tag_example/shopping_cart.feature:19
Given the user is on the home page # None
When the user adds an item to the cart # None
And the user proceeds to checkout # None
And the user completes the order # None
Then the user should receive an order confirmation # None
@order @regression
Scenario: Registered user tracks an order # BDD/Features/tag_example/shopping_cart.feature:27
Given the user is logged in # None
And the user has placed an order # None
When the user checks the order status # None
Then the user should see the current order status # None
1 feature passed, 0 failed, 0 skipped
1 scenario passed, 0 failed, 3 skipped
3 steps passed, 0 failed, 13 skipped, 0 undefined
Took 0m0.000s