行为驱动开发 - Behave 中未定义的步骤使用 Python 和 Flask
Behaviour Driven Development - Undefined steps in Behave using Python with Flask
我正在学习 Flask 教程,目前正在研究使用 Behave 的行为驱动开发。
我的任务是构建一个非常基本的博客应用程序,允许单个用户使用 BDD 登录、注销和创建博客文章。
功能文件、步骤文件和环境文件我都写好了。然后我编写了代码使用户能够登录和注销。
当我 运行 在本地手动测试应用程序时,它按预期工作,允许用户登录和注销并显示所需的文本("You were logged in" 或 "You were logged out"),所以我假设问题出在功能文件或步骤文件而不是应用程序代码上。
当我运行行为时,最后一步似乎是"undefined"。
特征文件的相关部分是:
Feature: flaskr is secure in that users must log in and log out to access certain features
Scenario: successful login
Given flaskr is setup
When we log in with "admin" and "admin"
Then we should see the alert "You were logged in"
Scenario: successful logout
Given flaskr is setup
and we log in with "admin" and "admin"
When we log out
Then we should see the alert "You were logged out"
我的步骤文件是:
from behave import *
@given(u'flaskr is setup')
def flask_is_setup(context):
assert context.client
@given(u'we log in with "{username}" and "{password}"')
@when(u'we log in with "{username}" and "{password}"')
def login(context, username, password):
context.page = context.client.post('/login',
data=dict(username=username,
password=password),
follow_redirects=True
)
assert context.page
@when(u'we log out')
def logout(context):
context.page = context.client.get('/logout', follow_redirects=True)
assert context.page
@then(u'we should see the alert "{message.encode("utf-8")}"')
def message(context, message):
assert message in context.page.data
来自环境文件:
def before_feature(context, feature):
context.client = app.test_client()
问题似乎出在最后 "then" 步。我试过检查教程解决方案并在其他地方搜索,但我似乎无法解决这部分代码。我必须对消息进行编码,因为我使用的是 Python 3.5 版(如果相关,本教程使用的是 2.7 版)。
任何指点将不胜感激。
移动编码解决了问题。我现在有
@then(u'we should see the alert "{message}"')
def message(context, message):
assert message.encode("utf-8") in context.page.data
我正在学习 Flask 教程,目前正在研究使用 Behave 的行为驱动开发。
我的任务是构建一个非常基本的博客应用程序,允许单个用户使用 BDD 登录、注销和创建博客文章。
功能文件、步骤文件和环境文件我都写好了。然后我编写了代码使用户能够登录和注销。
当我 运行 在本地手动测试应用程序时,它按预期工作,允许用户登录和注销并显示所需的文本("You were logged in" 或 "You were logged out"),所以我假设问题出在功能文件或步骤文件而不是应用程序代码上。
当我运行行为时,最后一步似乎是"undefined"。
特征文件的相关部分是:
Feature: flaskr is secure in that users must log in and log out to access certain features
Scenario: successful login
Given flaskr is setup
When we log in with "admin" and "admin"
Then we should see the alert "You were logged in"
Scenario: successful logout
Given flaskr is setup
and we log in with "admin" and "admin"
When we log out
Then we should see the alert "You were logged out"
我的步骤文件是:
from behave import *
@given(u'flaskr is setup')
def flask_is_setup(context):
assert context.client
@given(u'we log in with "{username}" and "{password}"')
@when(u'we log in with "{username}" and "{password}"')
def login(context, username, password):
context.page = context.client.post('/login',
data=dict(username=username,
password=password),
follow_redirects=True
)
assert context.page
@when(u'we log out')
def logout(context):
context.page = context.client.get('/logout', follow_redirects=True)
assert context.page
@then(u'we should see the alert "{message.encode("utf-8")}"')
def message(context, message):
assert message in context.page.data
来自环境文件:
def before_feature(context, feature):
context.client = app.test_client()
问题似乎出在最后 "then" 步。我试过检查教程解决方案并在其他地方搜索,但我似乎无法解决这部分代码。我必须对消息进行编码,因为我使用的是 Python 3.5 版(如果相关,本教程使用的是 2.7 版)。
任何指点将不胜感激。
移动编码解决了问题。我现在有
@then(u'we should see the alert "{message}"')
def message(context, message):
assert message.encode("utf-8") in context.page.data