![](/img/trans.png)
[英]Create a config file to hold values like username password url in python behave
[英]BDD behave Python need to create a World map to hold values
我不太熟悉Python但是我已经使用Python行为设置了BDD框架,我现在想要创建一个包含数据的世界地图类,并且可以在所有场景中检索。
例如,我将有一个世界级,我可以使用:
World w
w.key.add('key', api.response)
在一个场景和另一个场景中,我可以使用:
World w
key = w.key.get('key').
编辑:
或者,如果存在使用上下文或类似行为的内置方式,则可以保存属性,并且可以在所有方案中检索这些属性。
像生菜一样,你可以使用世界http://lettuce.it/tutorial/simple.html
我在场景之间尝试过这种方法,但它似乎并没有捡到它
class World(dict):
def __setitem__(self, key, item):
self.__dict__[key] = item
print(item)
def __getitem__(self, key):
return self.__dict__[key]
在方案A:w中一步设置项目。 setitem ('key',响应)
在方案B的另一个步骤中获取该项目:w。 getitem ('key',)
这显示了一个错误:
Traceback (most recent call last):
File "C:\Program Files (x86)\Python\lib\site-packages\behave\model.py", line 1456, in run
match.run(runner.context)
File "C:\Program Files (x86)\Python\lib\site-packages\behave\model.py", line 1903, in run
self.func(context, *args, **kwargs)
File "steps\get_account.py", line 14, in step_impl
print(w.__getitem__('appToken'))
File "C:Project\steps\world.py", line 8, in __getitem__
return self.__dict__[key]
KeyError: 'key'
似乎世界并没有在运行的步骤之间保留值。
编辑:
我不确定如何使用environment.py,但可以看到它有一种在步骤之前运行代码的方法。 如何调用environment.py中的soap客户端调用,然后将其传递给特定步骤?
编辑:
我在environment.py中发出了请求并对值进行了硬编码,如何将变量传递给environment.py并返回?
它在python行为术语中被称为“上下文”。 步骤定义函数的第一个参数是behave.runner.Context类的一个实例,您可以在其中存储您的世界实例。 请参阅教程的相应部分。
您是否尝试过使用global var
的简单方法,例如:
def before_all(context):
global response
response = api.response
def before_scenario(context, scenario):
global response
w.key.add('key', response)
可以从context
访问猜测feature
,例如:
def before_feature(context, feature):
feature.response = api.response
def before_scenario(context, scenario):
w.key.add('key', context.feature.response)
您正在寻找:
类变量 :由类的所有实例共享的变量。
Q中的代码使用Class Instance变量 。
阅读: python_classes_objects
例如:
class World(dict):
__class_var = {}
def __setitem__(self, key, item):
World.__class_var[key] = item
def __getitem__(self, key):
return World.__class_var[key]
# Scenario A
A = World()
A['key'] = 'test'
print('A[\'key\']=%s' % A['key'] )
del A
# Scenario B
B = World()
print('B[\'key\']=%s' % B['key'] )
输出 :
A['key']=test
B['key']=test
用Python测试:3.4.2
如果这对您有用,请回来并将您的问题标记为已回答,或者为什么不回复。
在before_all钩子中定义global var
变量对我来说不起作用。 如@stovfl所述
但是在我的一个步骤中定义了全局变量。
相反,正如Szabo Peter提到的那样使用上下文。
context.your_variable_name = api.response
,只需在要使用该值的任何位置使用context.your_variable_name
。
为此,我实际上使用了配置文件[config.py]然后我在那里添加了变量并使用getattr检索它们。 见下文:
WSDL_URL = 'wsdl'
USERNAME = 'name'
PASSWORD = 'PWD'
然后检索它们像:
import config
getattr(config, 'USERNAME ', 'username not found')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.