背景
RF這個自動化框架在很早的時候我就有看劈狐,不過當(dāng)時被網(wǎng)絡(luò)上坑爹的教程欺騙了,所有的網(wǎng)絡(luò)教程寫的都是用它的ride來編寫腳本县匠,局限性太大,當(dāng)時也很懶撒轮,并沒有去看官方文檔乞旦,所以一直感覺這框架很無聊,不如直接去敲代碼题山。
最近換工作兰粉,新工作要求使用RF來寫自動化腳本,沒辦法顶瞳,硬著頭皮去看了一下官方文檔玖姑,然后自己寫了幾個demo,發(fā)現(xiàn)完全不是以前自己認(rèn)識的那么回事慨菱。
新接觸框架焰络,還是建議先看看官方文檔。
結(jié)構(gòu)
Robot Framework的結(jié)構(gòu)其實就是通過代碼中的關(guān)鍵字符喝,映射到框架中闪彼,然后執(zhí)行對應(yīng)的方法,可以簡單整理為如下的結(jié)構(gòu)
所以Robot Framework實際上就是執(zhí)行Python的代碼协饲。
示例
我們來看一個簡單的示例:
- 創(chuàng)建一個字典
- 給字典賦值
- 把字典打印出來
用Python的代碼來實現(xiàn)非常簡單畏腕。
dict = {
"a": "1",
"b": "2",
"c": "3"
}
print dict
我們來看Robot Framework的代碼
*** Settings ***
Library Collections
*** Test Cases ***
TestCase001
${dict} create dictionary
set to dictionary ${dict} a=1 b=2 c=3
log ${dict}
執(zhí)行結(jié)果如下
Robot Framework的代碼實現(xiàn)起來確實有點麻煩,用Python直接寫明顯是簡單粗暴的茉稠。
我們來看Robot Framework的底層實現(xiàn)方式描馅,比如set to dictionary
這個方法,在Python中代碼是這樣的:
def set_to_dictionary(self, dictionary, *key_value_pairs, **items):
if len(key_value_pairs) % 2 != 0:
raise ValueError("Adding data to a dictionary failed. There "
"should be even number of key-value-pairs.")
for i in range(0, len(key_value_pairs), 2):
dictionary[key_value_pairs[i]] = key_value_pairs[i+1]
dictionary.update(items)
return dictionary
封裝后的方法是不區(qū)分大小寫的而线,也就是說set to dictionary
和Set To Dictionary
和SET TO DICTIONARY
是等效的铭污,調(diào)用的都是同一個方法。
代碼可以對應(yīng)Robot Framework的實現(xiàn)方法吞获,需要傳入一個字典况凉,然后是k-v對形式做拆分谚鄙,變?yōu)橐粋€一個單獨的值各拷,以列表的形式傳入,再用for循環(huán)用步長為2進(jìn)行迭代闷营,按順序生成一個字典然后返回烤黍。
關(guān)于Ride
這個東西貌似所有教程都在推薦知市,反正我是不喜歡用,寫起來很麻煩速蕊,我還是習(xí)慣了用Pycharm來寫嫂丙,裝一個IntelliBot的插件就可以高亮語法,也可以直接執(zhí)行腳本规哲。用Pycharm來寫RF的方法請查看這里跟啤。
編寫方式
官方文檔推薦的編寫方式就是用txt文本來編寫。
Robot Framework test data is defined in tabular format, using either hypertext markup language (HTML), tab-separated values (TSV), plain text, or reStructuredText (reST) formats. The details of these formats, as well as the main benefits and problems with them, are explained in the subsequent sections. Which format to use depends on the context, but the plain text format is recommended if there are no special needs.
最優(yōu)一句說的很明白了唉锌,如果沒有特殊的需求隅肥,推薦使用plain text格式來寫,也就是txt格式袄简。
不建議用ride的表格形式來填寫腥放,效率極其低下,而且我也有遇到過提示出錯的情況绿语。
中文編程
這點應(yīng)該是看到最奇怪的點了秃症,剛剛接手項目代碼的時候,我一直以為中文是方法的說明吕粹,看的我一度在懷疑人生种柑,結(jié)果和同事聊了一下發(fā)現(xiàn),RF是支持中文關(guān)鍵字的匹耕,比如如下代碼是可以正常執(zhí)行的莹规。
*** Settings ***
Library Collections
*** Keywords ***
打印字典
[Documentation] 傳入字典參數(shù),自動打印
[Arguments] ${dict}
set to dictionary ${dict} a=1 b=2 c=3
log ${dict}
*** Test Cases ***
TestCase001
${dict_test} create dictionary
打印字典 ${dict_test}
執(zhí)行結(jié)果如下
D:\Python27\Scripts\pybot.bat -d results test1.txt
==============================================================================
Test1
==============================================================================
TestCase001 | PASS |
------------------------------------------------------------------------------
Test1 | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
Output: C:\Users\Administrator\PycharmProjects\RobotFramework\Chapter1\results\output.xml
Log: C:\Users\Administrator\PycharmProjects\RobotFramework\Chapter1\results\log.html
Report: C:\Users\Administrator\PycharmProjects\RobotFramework\Chapter1\results\report.html
恩泌神,我感覺回到了以前寫易語言的時代良漱,只要封裝的好,也可以用中文來寫Python了欢际。
總結(jié)
Robot Framework是一個不錯的框架母市,尤其是在封裝好一定的庫和或者關(guān)鍵字后,可以提供給不會寫代碼的同事來寫自動化腳本损趋。
規(guī)范化的東西都有局限性患久,必然會有對應(yīng)的學(xué)習(xí)成本。直接用Python寫確實是更靈活方便浑槽,但是框架的東西就非常有規(guī)范蒋失,只要懂了這個規(guī)范,所有人都能拿來就上手桐玻。