python 接口自动化测试--代码实现(七)

数据库还原脚本:

#! /usr/bin/python
# coding:utf-8
import time
from Engine.SqlEngine import MSSQL
COUNT=1
def restoreRelease():
    global COUNT
    checkConSql = "select spid from sysprocesses where dbid in (select dbid from sysdatabases where name='SOATest')"
    restoreSql = "RESTORE DATABASE SOATest FROM DATABASE_SNAPSHOT = 'SOATest_ss'"
    dbc=MSSQL('192.168.1.2','yht','yht','Master')
    conNum = dbc.ExecQuery(checkConSql)
    if COUNT < 5:
        if len(conNum) == 0:
            print(u'%d条连接数,可以还原数据库,还原中...'%len(conNum))
            dbc.ExecNonQuery(restoreSql)
            print(u'数据库还原完成')
            return True
        else:
            print(u'%d条连接数占用无法还原数据库,5秒后重试'%len(conNum))
            time.sleep(5)
            COUNT=COUNT+1
            restoreRelease()
    else:
        print(u'%d条连接数始终占用,已试过5次依然无法还原数据库'%len(conNum))
        return False
SqlEngine.py
#! /usr/bin/python
# coding:utf-8
import pymssql
import sys
from Engine.DataEngine import decoCatchExcep
reload(sys)
sys.setdefaultencoding('utf-8')
class MSSQL(object):
    """
    对pymssql的简单封装
    pymssql库,该库到这里下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql
    使用该库时,需要在Sql Server Configuration Manager里面将TCP/IP协议开启

    用法:

    """

    def __init__(self,host,user,pwd,db):
        self.host = host
        self.user = user
        self.pwd = pwd
        self.db = db

    def __GetConnect(self):
        """
        得到连接信息
        返回: conn.cursor()
        """
        if not self.db:
            raise(NameError,"没有设置数据库信息")
        self.conn = pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset="utf8")
        cur = self.conn.cursor()
        if not cur:
            raise(NameError,"连接数据库失败")
        else:
            return cur
    @decoCatchExcep
    def ExecQuery(self,sql):

        cur = self.__GetConnect()
        cur.execute(sql)
        resList = cur.fetchall()
        self.conn.close()
        return resList
    @decoCatchExcep
    def ExecNonQuery(self,sql):
        cur = self.__GetConnect()
        self.conn.autocommit(True)
        cur.execute(sql)
        self.conn.autocommit(False)
        self.conn.commit()
        self.conn.close()

装饰器decoCatchExcep:

def decoCatchExcep(func):
    def _decoCatchExcep(*args, **kwargs):
        try:
            ret = func(*args, **kwargs)
            return ret
        except Exception,e:
            print(func.__name__+' : '+str(e).encode('gb18030'))
            LogPro.writeException(str(e).encode('gb18030'))
    return _decoCatchExcep

 

 

 

转载于:https://www.cnblogs.com/hito/p/5680352.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值