使用Robot Framework,我打算使用Gherkin样式测试,因为它是BDD / ATDD的通用语言。我可以指定一个这样的测试:
*** Test Cases ***
New alert
Given there were no alerts so far
When there is an alert
Then an alert should be sent with level LOW
和Robot会在没有任何帮助的情况下将此映射到我的测试库中的方法:
def there_were_no_alerts_so_far(self):
assert(self.alert == None)
def there_is_an_alert(self):
self.alert = self.alert_processor.alert()
def an_alert_should_be_sent_with_level(self, level):
assert_not_none(self.alert )
assert_equal(self.alert.level.name, level )
冷却。我可以将level
之类的参数传递给测试库。
但是我不知道该怎么做,是指定一个位于子句中间的参数,如:
There there are 5 alerts sent
我想在测试库中映射到此方法:
def there_is_an_alert_after_seconds(self, seconds):
...
在这种情况下,5
位于子句的中间。
在pytest.bdd中,测试库中有一些装饰器,可用于指定如何解析子句。
机器人中的等价物是什么?
我尝试了这个但无济于事:
*** Keywords ***
there is an alert after ${time} seconds
there is an alert after seconds ${time}
答案 0 :(得分:3)
机器人框架用户指南有一节介绍如何执行此操作。见Embedding arguments into keyword name
使用用户关键字非常简单:您只需在关键字名称中嵌入变量引用,而不是使用[Arguments]
。这是用户指南中给出的示例:
*** Keywords ***
Select ${animal} from list
Open Page Pet Selection
Select Item From List animal_list ${animal}
您可以像预期的那样使用此关键字:
*** Test Cases ***
Example
Select Dog from list
您也可以使用机器人提供的keyword decorator在python中编写关键字。例如:
from robot.api.deco import keyword
@keyword('Select ${animal} from list')
def select_animal_from_list(animal):
...
虽然不是绝对必要,但用引号包围参数被认为是一种好习惯。用户指南中给出的示例如下:
Select ${city} ${team}
如果你用Select Los Angeles Lakers
打电话,机器人将如何知道${city}
是否应匹配“洛杉矶”或“洛杉矶”?在它周围放置引号将解决这个问题:
Select "${city}" "${team}"
当然,这意味着您在调用关键字时也必须提供引号:
Select "Los Angeles" "Lakers"
也可以使用正则表达式来匹配参数。有关如何执行此操作的详细说明,请参阅用户指南。
答案 1 :(得分:0)
这个关键字 - 部分“规则”可以解决问题。 机器人对这种格式非常挑剔。
public function changeState(Request $request)
{
if($request->ajax()){
$usernames = Input::get('usernameSend');
if(isset($usernames)){
$user = User::Where('username', '=', $usernames);
if ( !$user->get() ){
Log::warning("User not found.");
} else {
if(!$user->get()->isEmpty()) { // verify if the user is active
$user->delete(); //soft delete the given user
}else{
$user->restore(); //removes the soft delete for the given user
}
}
}else{
Log::warning("Username doesn't exist on database.");
}
}
}
请注意,应引用该变量。
*** Test Cases ***
Second alert soon after, first escalation
Given there is an alert
When there is an alert after "7" seconds
变量应该在规则(第一行)中的引号中,并且在值(第二行)中前面有2个空格。
这成功映射到:
*** Keywords ***
there is an alert after "${time}" seconds
there is an alert after seconds ${time}