RobotFramework自定义系统关键字解析txt,csv,dbf,xml格式文件(上)

一、需求

业务中有一个功能菜单,解析交易所的证券信息文件,导入到数据表中,有些问价会导入几个数据表当中。

本次自动化设计的目标就是免去人工对比文件数据和数据表数据的过程;

二、已知条件:

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文件的解析在下一篇说明------------------------------------------------------------------

posted @ 2019-02-26 14:27  三云  阅读(1978)  评论(0编辑  收藏  举报