Behave - 数据类型


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

预定义数据类型

Behave 使用解析模块来解析步骤定义中的参数。让我们探讨一些支持步骤定义且不需要像用户定义数据类型那样注册的解析类型。

  • w(str 类型)- 下划线和字母。

  • W(str 类型)- 下划线和非字母。

  • s(str 类型)- 空白。

  • S(str 类型)- 非空白。

  • d(int 类型)- 数字。

  • D(str 类型)- 非数字。

  • n(int 类型)- 具有千位分隔符的数字。

  • %(浮点类型)- 百分比。(转换为值/100.0)

  • f(浮点型) - 固定 - 点数。

  • e (float 类型) - 浮点 - 点数和指数。

  • g(浮点类型)- 数字格式。

  • b(int 类型)- 二进制数字。

  • (int 类型)- 八进制数字。

  • x(int 类型)- 十六进制数字。

  • ti(日期时间类型)- ISO 8601 日期/时间格式的时间。

  • te(日期时间类型)- RFC 2822 电子邮件数据/时间格式的时间。

  • tg(日期时间类型)- 全局数据/时间格式的时间。

  • ta(日期时间类型)- 美国数据/时间格式的时间。

  • tc(日期时间类型)- ctime() 数据/时间格式。

  • th (datetime 类型) - HTTP 日志数据/时间格式的时间。

  • tt(时间类型)

在步骤实现中,我们将传递参数:用“{}”括起来的数据类型。

具有 % 数据类型的特征文件

% 数据类型的特征文件如下 -

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%     |

对应步骤实施文件

该文件如下 -

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)

输出

运行特征文件后获得输出,使用的命令是behave --no-capture -f plain

预定义数据类型

连续输出如下 -

数据类型

输出显示从 % 数据类型获得的 0.8 和 0.9,表示从特征文件传递的 80% 和 90% 值。

用户定义的数据类型

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

特征文件

名为支付流程的功能的功能文件如下 -

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用于注册用户定义的类型,可以在匹配步骤时解析该类型以进行任何类型转换。

对应步骤实施文件

该文件如下 -

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)

输出

运行特征文件后获得输出,使用的命令是behave --no-capture -f plain

用户定义的数据类型

连续输出如下 -

浮点 0 值

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