Behave 简明教程

Behave - Data Types

Behave 中存在两种数据类型,即预定义和用户定义。让我们首先了解什么是预定义数据类型。

Pre-defined Data types

Behave 利用解析模块来解析步骤定义中的解析参数。让我们探索一些对步骤定义有支持且无需像用户定义数据类型那样注册的解析类型。

  1. w(类型为 str)- 下划线和字母。

  2. W(类型为 str)- 下划线和非字母。

  3. s(类型为 str)- 空白。

  4. S(类型为 str)- 非空白。

  5. d(类型为 int)- 数字。

  6. D(类型为 str)- 非数字。

  7. n(类型为 int)- 带千位分隔符的数字。

  8. %(类型为 float)- 百分比。(转换为值/100.0)

  9. f(类型为 float)- 定点数字。

  10. e(浮点型)−浮点数连同指数。

  11. g(浮点型)−数字格式。

  12. b(整型)−二进制数。

  13. (整型)−八进制数。

  14. x(整型)−十六进制数。

  15. ti(datetime 型)−ISO 8601 日期/时间格式的时间。

  16. te(datetime 型)−RFC 2822 电子邮件数据/时间格式的时间。

  17. tg(datetime 型)−Global 数据/时间格式的时间。

  18. ta(datetime 型)−US 数据/时间格式的时间。

  19. tc(datetime 型)−ctime() 数据/时间格式。

  20. th(datetime 型)−HTTP 日志数据/时间格式的时间。

  21. tt (of time type)

在步骤实现中,我们将传递以下参数:包含在“{}”中的数据类型。

Feature File with % data type

带有 % 数据类型的功能文件如下所示 −

Feature − Payment Process
   Scenario Outline: Credit card transaction
   Given user is on credit card payment screen
   When user makes a payment of "<p>" percent of total
   Examples: Amounts
      | p      |
      |80%     |
      |90%     |

Corresponding Step Implementation File

文件如下所示 −

from behave import *
@given('user is on credit card payment screen')
def credit_card_pay(context):
   print('User is on credit card payment screen')
#passing parameter in % datatype enclosed in {}
@when('user makes a payment of "{p:%}" percent of total')
def step_impl(context, p):
   print('Number is: ')
   print(p)

Output

在运行功能文件并使用 behave --no-capture -f plain 命令后,即可获得输出。

pre defined data types

后续输出如下所示 −

data types

输出显示 0.8 和 0.9,它们是由 % 数据类型获得的,以表示从功能文件中传递的 80% 和 90% 的值。

User-defined Data types

Behave 还有用户定义的数据类型。register_type 方法用于注册一个用户自定义类型,该类型可在匹配步骤时进行任何类型转换的解析。

Feature File

标题为支付流程的功能文件如下−

Feature − Payment Process
   Scenario Outline: Credit card transaction
      Given user is on credit card payment screen
      When user makes a payment of "<amount>" of total
      Examples: Amounts
         |amount  |
         |75      |
         |85      |

在步骤实现中,我们将传递参数:用“{}”括起用户定义的数据类型。register_type 方法用于注册用户自定义类型,该类型可以在匹配步骤时被解析为任何类型转换。

Corresponding Step Implementation File

文件如下所示 −

from behave import *
from behave import register_type
#convert parsed text to float
def parse_percent(t):
   return float(t)
#register user-defined type
register_type(Float=parse_percent)
@given('user is on credit card payment screen')
def credit_card_pay(context):
   print('User is on credit card payment screen')
@when('user makes a payment of "{amount:Float}" of total')
def step_impl(context, amount):
   print('Number is: ')
   print(amount)

Output

在运行功能文件并使用 behave --no-capture -f plain 命令后,即可获得输出。

user defined data types

后续输出如下所示 −

浮点数 0 值

输出显示 75.085.0 ,它们已转换为浮点值(借助用户定义的转换)。这些参数作为整数类型从功能文件中传递。