一、需求
業務中有一個功能菜單,解析交易所的證券信息文件,導入到數據表中,有些問價會導入幾個數據表當中。
本次自動化設計的目標就是免去人工對比文件數據和數據表數據的過程;
二、已知條件:
1.業務處理流程:
(1)存在接口配置表根據接口ID(ITF_ID)指定文件存在的路徑D:\ITF\hkexzxjc_@CC@YY@MM@DD.txt,假設計算機物理日期是2018/11/28,則文件hkexzxjc_20181128需要存在於服務器D:\ITF路徑下;后續接口導入文件才能成功,否則會找不到該文件;
(2)存在文件導入接口適用於所有類型文件導入,根據”接口配置號“(ITF_CFG_SN)區分不同文件;
2.業務封裝了一個Test Library供使用,該Test Libirary有關鍵字:LBM CALL RET DATA。F5查詢用法為:
Arguments:[server|funcid|fixparam|unfixparam],其中server有約定的寫法;
三、實現思路:
1.證券信息文件對日期有特別要求,每次執行用例之前,都要手動修改hkexzxjc_20181128文件的日期和當前物理日期一致;將同一份文件hkexzxjc_20181128放在兩個位置。
業務后台程序在所服務器:接口調用使用;robotFramwork所在機器:自動化系統程序解析文件使用;
2.自定義系統關鍵字,實現文件解析功能;
3.調用業務接口將文件數據導入數據表之后,和文件解析的數據進行對比,驗證接口處理功能是否正常;
四、實現過程
證券接口配置查詢 | 入參:無,出參:無 | 根據指定的ITF_ID(Test Suite范圍內變量),調用接口查詢出ITF_CFG_SN(關鍵子SET SUITE VARIABLE設置為Test Suite范圍內變量,如果每條用例都有這個步驟可用SET TEST VARIABLE設置為Test Case范圍內變量) |
證券接口文件數據轉入 | 入參:ITF_CFG_SN,出參:無 | 根據ITF_CFG_SN,調用業務接口,將文件導入后台數據表中; |
獲取物理日期 | 入參:無,出參:物理日期 | 返回YYYYMMDD格式的物理日期 |
港股通最小價差文件轉入數據校驗 | 入參:ITF_ID,物理日期, | 1、調用自定義系統關鍵字解析文件,獲取要核對的文件信息; 2、調用業務接口或者數據庫關鍵字查詢數據表信息; 3、將步驟1和步驟2的進行對比,驗證數據的正確性 |
五.RobotFramwork自定義系統關鍵字
(一)文件說明如下,格式是(txt),業務中需要獲取的三個字段是高亮部分。
文件內容示例
我們需要讀取的是股票的價差價位,也就是R0403|01開頭的記錄,一條價差記錄的關鍵信息是(價格下限,價格上限,價差價位)
從數據說明來看,實現思路是:
1.讀取一行的前8個字符,判斷是“R0403|01”的開始后續處理;
2.讀取 “5 起點價格",作為第一條價差記錄的【價格下限】;
3.讀取“ 6 價差組別數量”,獲取一共有多少價差記錄(根據文件說明,下面價差記錄只給出【價格上限(第7位),價差價位(第8位)】,需要進行特殊處理。)
4.根據“ 6 價差組別數量”(count),循環count次讀取【價格上限(第7位),價差價位(第8位)】信息
(二)自定義系統關鍵字
1.Test Library名稱定義為TxtLibrary;
在pythin安裝目錄C:\Python27\Lib\site-packages路徑下新建TxtLibrary文件夾
2.新建txtfileimport.py文件,定義類TextFileImport,在類方法中按照實現思路進行處理;
# -*- coding: utf-8 -*- class TxtFileImport(object): def ProcTxtStkItfFileData(self,itfId,trdDate): """ 文件解析函數,調用方法:ProcTxtStkItfFileData('ITF_SGT_HKEXZXJC','20181123'); """ if(itfId=='ITF_SGT_HKEXZXJC'): """ 深交所最小價差文件hkexzxjc.txt解析 """ fileName="D:\ITF\hkexzxjc_"+trdDate+".txt" priceunitlist=[] #保存所有價差價位記錄的列表 try: f = open(fileName, 'r') for line in f.readlines(): """ 分隔符為豎線,讀取開頭為R0403|01的一行 """ prefix=line[0:8] if(prefix=='R0403|01'): linestr=line.split('|') minprice=float(linestr[4]) count=int(linestr[5]) i=0 for i in range(count): item={} #保存一條價差價位記錄的字典 #價格下限 item['startPrice']=minprice; #價格上限 item['endPrice']=float(linestr[6+3*i]) #價差價位 item['spread']=float(linestr[7+3*i]) #價格下限重新賦值 minprice=item['endPrice'] priceunitlist.append(item) finally: f.close() return priceunitlist if __name__=="__main__": p=TxtFileImport(); list=p.ProcTxtStkItfFileData('ITF_SGT_HKEXZXJC','20181127'); print(list)
3..新建__init__.py文件如下,類TxtLibrary繼承上面的TxtFileImport,RobotFramework啟動時會加載這個文件,從而調用類中定義的方法(關鍵字);
from txtfileimport import TxtFileImport __version__ = '0.6' class TxtLibrary(TxtFileImport): ROBOT_LIBRARY_SCOPE='GLOBAL';
4.重啟Robot Framework,按F5即可搜索到TxtLibrary的關鍵字。;
------------------------------------------------------------xml文件和dbf文件的解析在下一篇說明------------------------------------------------------------------