![](/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.