首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用gherkin场景数据输入运行行为(使用python代码)步骤实现?

如何使用gherkin场景数据输入运行行为(使用python代码)步骤实现?
EN

Stack Overflow用户
提问于 2020-06-12 14:50:58
回答 1查看 255关注 0票数 0

在开始python和TDD时,我想知道如何使用python和场景表来运行以下两个场景的行为步骤:

程序要求用户输入数据(湿度、等级和温度),然后打印这些数据。

  • For第一个场景,用户填写数据,程序打印这些数据(正常情况)。我只想检查是否有数据输入
  • For第二个场景,如果用户填写“文本”程序返回语法错误。

问题是,当我使用asks命令运行步骤时,它要求我输入数据,但我希望程序在gherkin场景中使用数据表。你能帮忙吗?

gherkin设想情况如下:

代码语言:javascript
复制
Feature: As a user I want fill out humidex data to visualize it

 Scenario: user fill out humidex data correctly
    Given a user
    When user fill out humidexdata
      |humidity|temperature|
      |50%     |28C°       |
    Then user visualize
      |humidity|temperature|
      |50%     |28C°       |

 Scenario: user fill out humidex data with text
    Given a user
    When user fill out humidexdata
      |humidity   |temperature|
      |lorem ipsum|lorem ipsum|
    Then user visualize a syntax error "data syntax is wrong retry"

具有行为的step实现:

代码语言:javascript
复制
from behave import *
from fillouthumidexdata import *

@given(u'a user')
def step_impl(context):
    context.user = User()

@when(u'user fill out humidexdata')
def step_impl(context):
    context.user.fillout_humidexData()


@then(u'user visualize')
def step_impl(context):
    context.user.visualize_humidexData()

python代码:

代码语言:javascript
复制
class User():

    def __init__(self):
        self.humidity = []
        self.temperature =[]

    def fillout_humidexData(self):

        print("Enter humidity level (%)")
        input(self.humidity)
        print("Enter temperature (C°)")
        input(self.temperature)

    def visualize_humidexData(self):
        print(self.humidity)
        print(self.temperature)
EN

回答 1

Stack Overflow用户

发布于 2020-06-14 22:10:24

我不知道为什么实际上需要单独的User类,因为所有这些都可以通过简单的步骤来完成,但是按照这种方法,我将首先对User类做一些修改,至少是:

代码语言:javascript
复制
class User():

def __init__(self):
    self.humidity = 0
    self.temperature = 0

def fillout_humidexData(self, humidity, temperature):
    self.humidity = humidity
    self.temperature = temperature

def visualize_humidexData(self):
    print(f'humidity: {self.humidity}')
    print(f'temperature: {self.temperature}')

然后使用以下步骤:

代码语言:javascript
复制
from behave import step, given, when, then
from fillouthumidexdata import *


@given(u'a user')
def step_impl(context):
    context.user = User()


@when(u'user fill out humidexdata')
def step_impl(context):
    humidity, temperature = context.table.rows[0]
    context.user.fillout_humidexData(humidity, temperature)


@then(u'user visualize')
def step_impl(context):
    context.user.visualize_humidexData()

行应该为您提供安装表中第一行的值(2列的值)。我认为这是可行的,但我不确定这是否是你想要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62346768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档