python实现自动化Teradata跑批程序测试

DSQL是Teradata数据库跑批程序,是数据仓库集市加工数据最基本最主要的作业程序。随着业务量的增加,室内集市中的DSQL作业数量也早就达到了千位数,并在不断增长。如果生产上DSQL程序报错,不仅浪费和占用服务器资源,也影响下游作业的运行时效,而且增加了后期上线后的维护成本。

因此,每次上线前的统一测试管理规范,不依赖开发人员的自觉测试,保证集市这么多作业正常稳定运行,显得很有意义。

下面简单介绍用python实现自动DSQL跑批程序的测试方案。

准备工作

本地配置DSQL执行环境。

把准备上线的集成包清单对象,DSQL脚本下载下来。

另外需要首先载入开发人员编号,及对应的姓名,方便后续定位得到作业负责人。这里保存在一个字典中。

接着读取作业清单对象,保存DSQL作业清单,及其负责人编号。示例代码如下。

这样我们获取了作业清单列表,在字典的kyes中,其值对应作业负责人姓名。

跑批DSQL脚本

有了作业清单,以及下载好了的DSQL脚本文件。我们可以循环执行这些脚本了。单独的测试一个作业,可以通过如下的cmdline命令放在windows的命令行中执行。

‘dsql -c’后面是配置文件信息,包含teradata数据的登录信息密码。’-f’后面是DSQL脚本的路径。然后后面是实例化日期,及保存日志文件的路径。

通过subprocess模块中Popen()函数,执行每一个DSQL脚本。

下面定义一个函数,根据输入的DSQL作业名,跑批DSQL脚本。

循环遍历上述得到的作业名就可以跑批所以的DSQL作业。

如果作业没有错误,代码中的输出为:

如果程序报错,会输入如下类似信息:

通过查找字符串Failure确定是否成功还是失败。

对月跑作业处理

日跑作业,每天都会跑,一般都会被测试到。月作业每个月只跑一次,或固定某一些天,一般都是在月末,做每个月的月统计。统一设定月末日期,很多作业都能测试到。

但是还有少量作业,不是月末跑数。所以设定的固定月末日期,这样的DSQL脚本就会在程序中间跳出,达不到测试目的。之前就放过了这样的DSQL作业错误到生产上,产生报错。

当然可以从DSQL脚本中做字符串解析判断DSQL作业的运行时间。但是开发人员控制运行日期的位置不固定,方式也不统一。解析起来很困难。

如果程序从中间跳出,生成的日志一般只有原来DSQL脚本的一半大小。根据这个信息可以通过对比日志文件和原程序文件的大小情况,来判断是否是非月末跑数。

这样能够实现对月跑作业的测试。

保存错误

对作业出现的错误,要做自动化的记录。这里写入mysql数据库。

可以统计经常出错点,规避警示后面再犯。也通过邮件周,月,年通报,约束开发人员,使其上线前能认真测试。

在Mysql数据库中创建如下的表,由于数据部是太多,没有设置主键,索引。记录如下信息

作业名称

作业类型

负责人

运行日期

错误代码

错误等级

错误内容

这个表也对依赖关系填写,表清理信息填写的错误等做记录。这里不做讨论。

定义写入数据库的函数如下:

连接起来

主程序对作业列表做一个循环。

这里只给出示例代码,正确运行还需要在本机调整。

最后致谢公司同事周斌,原来运行cmd命令用的os.Popen()不能读取执行状态,需要读DSQL运行日志来判断是否有错误。开始尝试subprocess.Popen()不能获取执行状态。

欢迎关注

让数据实现价值

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180209G1FVN500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券