我正在尝试为网站的消息传递功能编写测试。在此测试中,我使用一个关键字,该关键字应迭代一个用户列表,找到每个用户的聊天窗口,然后导入一个用Python编写的自定义库,其中包含测试的通过/失败逻辑。定制库应将消息发送者的订阅类型,接收消息的用户的订阅类型以及初始发送的消息作为参数。
测试用例如下所示:
*** Settings ***
Variables ../resources/usersToMessage.py
Variables ../resources/messageSenders.py
Resource ../chatTests/chatTests.resource
*** Test Cases ***
DemoTest
[Documentation] send messages to other users
[tags] demo
[Template] Log in as user and send messages
FOR ${user} IN @{messageSenders}
${user}
END
*** Keywords ***
Log in as user and send messages
[Arguments] ${testcase}
Send Messages
Send Messages
${randomString}= generate string
Set Global Variable ${SENT_MESSAGE} ${randomString}
${arguments}= Create List LogMany conversationBox ${randomString}
Locate Conversations ${arguments} @{usersToMessage}
Locate Conversations
[Arguments] ${arguments} @{users}
FOR ${user} IN @{users}
Log Many ${user} @{arguments}
Log ${user}[username]
Import Library Services.ChatTestCase BASIC ${user}[subscription] ${SENT_MESSAGE}
${expected_chat_message}= expected chat message
Log Many the current user subscription is ${user}[subscription] the expected chat message is ${expected_chat_message}
Log /messages/${user}[userid]
Log ${HOMEPAGE}${messages}${user}[userid]
Run Keyword @{arguments}
END
Send
[Arguments] ${message}
Log The random message is ${message}
ChatTestCase库如下所示:
class ChatTestCase:
ROBOT_LIBRARY_SCOPE = "TEST"
unlimited_messaging_subscriptions = ("VIP","PREMIUMPLUS","PLATINUM","GOLD")
def __init__(self, subscription_of_sender, subscription_of_receiver, sent_message):
self.subscription_of_sender=subscription_of_sender.upper()
self.subscription_of_receiver=subscription_of_receiver.upper()
self.sent_message=sent_message
self.should_deliver_message = True
self.count = 0
def expected_chat_message(self):
self.count+=1
print(f'no of expected_chat_message method passes is {self.count}')
#print(f'value of variable should_deliver_message is {self.should_deliver_message}')
if self.subscription_of_sender == "BASIC" and self.subscription_of_receiver not in self.unlimited_messaging_subscriptions:
self.should_deliver_message = False
elif self.subscription_of_receiver == "BASIC" and self.subscription_of_sender not in self.unlimited_messaging_subscriptions:
self.should_deliver_message = False
if self.should_deliver_message:
print(f'value of variable should_deliver_message is {self.should_deliver_message}')
return self.sent_message
else:
print(f'value of variable should_deliver_message is {self.should_deliver_message}')
self.should_deliver_message = True
return "CONTACT+"
问题在于,在第一次迭代中,“导入库”关键字似乎只实例化了ChatTestCase类。在Robot Framework文档中,它说,如果使用不同的参数多次导入库,它将为FOR循环中的每次迭代实例化该类。
我尝试用虚拟库替换导入的自定义库,并且发生相同的事情
有人知道是否有任何方法可以从FOR循环内部动态导入自定义库吗?
您确定应实例化多次吗?关键字Import Library
未提及任何类似内容。您已经在用户指南的库作用域下阅读了它,但这并不意味着它甚至适用于关键字。
我找到了这个解决方案,但它充其量是笨拙的,但是它可以按您的预期工作,即在运行时在for循环中创建一个库的多个实例。
我的示例库:
from robot.api import logger
class TestLibrary(object):
ROBOT_LIBRARY_VERSION = 1.0
ROBOT_LIBRARY_SCOPE = 'TEST'
def __init__(self, num):
self.count = 0
self.num = num
def log_params(self):
logger.console('count: {0} - num: {1}'.format(self.count, self.num))
self.count += 1
测试用例:
*** Test Cases ***
Library Imports
FOR ${i} IN RANGE 1 5
${name}= Set Variable Test${i}
Import Library ${CURDIR}/../../Libraries/TestLibrary.py ${i} WITH NAME ${name}
Set Library Search Order ${name}
Log Params
END
输出为:
count: 0 - num: 1
count: 0 - num: 2
count: 0 - num: 3
count: 0 - num: 4
这与您self.count
在for循环的每次迭代中递增的情况不同。
这里的关键是我${name}
为每个实例分配一个不同的名称(),并Log Params
从最后创建的实例开始搜索关键字。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句