2011-05-18 29 views
2

我繼承了一堆測試腳本,是這個樣子的:實現自己更高層次的測試腳本語言

 
// make connection on standard port (FD) 
ot 11 02 00 0F FD 
// wait for ACK 
in 12 ackValue 
// wait for connection confirmation 
in 13 ackValue 09 88 
//send 5 bytes of arbitary data 
ot 21 ackValue 05 01 02 03 04 05 

等。

我想我自己寫的simpiler測試腳本在上面的上面,並且可以對其進行解析,自動產生上述腳本層,從而使得我的腳本看起來是這樣的:

 
MAKE_STANDARD_CONNECTION 
SEND_DATA (01,02,03,04,05) 

所以當解析MAKE_STANDARD_CONNECTION時,它將產生前腳本中的前六行。這將允許我快速更新所有腳本,如果標準端口應該從0xFD更改爲其他...

我猜測有工具可以做到這一點,但它們是什麼?我是一名程序員,所以如果需要使用python作爲我選擇的語言,我可以對其進行編碼。

感謝您的幫助,

巴里

回答

3

我建議你實現它在Python之上的內部DSL。使它成爲:

MAKE_STANDARD_CONNECTION() 
SEND_DATA('01','02','03','04','05') 

它是一個真正的Python代碼,可以自動生成您的專有腳本。 Python的可讀性和可讀性非常好,並且通過將其作爲內部DSL使用,您可以隨時掌握Python的所有功能。例如,你可以這樣做:

values = [somefunc(i) for i in range(5)] 
MAKE_STANDARD_CONNECTION() 
SEND_DATA(*values) 

somefunc是一個任意的計算。要在外部DSL(即您自己的腳本語言)中實現此功能,您必須實現循環和更多構造。 Python免費提供給你,這只是這個功能的一個小例子。

如果這聽起來很有趣,谷歌有點「外部DSL」與「內部DSL」,以瞭解我在說什麼。在這個世界上有足夠奇怪的,專有的,執行不力的「腳本語言」。生出另一個通常是一個壞主意。

2

pyParsingPLY是兩種比較流行的庫在Python中寫解析器,你可以通過編寫生成輸出簡單的功能創建自己的語法等

交替,你能做到這一點的純Python你想:

make_standard_connection() 
send_data(1,2,3,4,5) 
9

你不需要任何特殊的分析器這樣簡單的測試。只需使用Python。一個簡單的解決方案可以這樣開始:

class TestGen(object): 

    def __init__(self, filename): 
     self._filename = filename 

    def __enter__(self): 
     self._file = open(self._filename, 'w') 
     return self 

    def __exit__(self, *args): 
     self._file.close() 

    def make_standard_connection(self): 
     self._write('ot 11 02 00 0F FD') 
     self._write('in 12 ackValue') 
     self._write('in 13 ackValue 09 88') 

    def send_data(self, *data): 
     data_str = ' '.join(data) 
     self._write('ot 21 ackValue 05 %s' % (data_str,)) 

    def _write(self, line): 
     self._file.write('%s\n' % line) 


def script_one(): 
    with TestGen('output1.txt') as g: 
     g.make_standard_connection() 
     g.send_data('01', '02', '03', '04', '05') 

運行script_one()會產生這些內容的文件:

ot 11 02 00 0F FD 
in 12 ackValue 
in 13 ackValue 09 88 
ot 21 ackValue 05 01 02 03 04 05 
+0

++的努力,真正實現這個;-) – 2011-05-18 14:08:12