コード例 #1
0
    def replace_data(self, data):

        param1 = '#(.+?)#'  # 匹配规则1
        param2 = '%(.+?)%'  # 匹配规则2

        while re.search(param1, data):  # 如果从data中能匹配的到,循环
            rd1 = re.search(param1, data)  # 匹配到的内容1
            rdata1 = rd1.group()  # 匹配到的要被替换的数据
            key1 = rd1.group(1)  # 获取数据的键
            if self.section1:
                value1 = ob.getstr(self.section1, key1)  # 获取配置文件存储的值
            else:
                value1 = getattr(ConText, key1)
            data = data.replace(rdata1, str(value1))  # 替换数据

        while re.search(param2, data):  # 如果从data中能匹配的到,循环
            rd2 = re.search(param2, data)  # 匹配到的内容2
            rdata2 = rd2.group()  # 匹配到的要被替换的数据
            key2 = rd2.group(1)  # 获取数据的键
            if self.section2:
                value2 = ob.getstr(self.section2, key2)  # 获取配置文件存储的值
            else:
                value2 = getattr(ConText, key2)
            data = re.sub(rdata2, str(value2), data)  # 替换数据

        return data  # 如果匹配不到直接返回数据
コード例 #2
0
 def setUpClass(cls):
     url = ob.getstr('url', 'url') + '/member/login'
     phone = ob.getstr('login', 'phone')
     pwd = ob.getstr('login', 'pwd')
     login_data = {"mobilephone": phone, "pwd": pwd}  # 登录数据
     print('{}测试开始执行'.format(cls))
     cls.login = HttpSession(url=url, data=login_data).httprequest(
         method='post')  # 登录
     cls.ms = ObMysql()  # 创建数据库操作对象,打开数据库
     cls.mylog1.info('-----充值提现模块开始测试-----')
コード例 #3
0
    def register(self):
        '''注册'''
        url = "http://test.lemonban.com/futureloan/mvc/api/member/register"
        phone = ob.getstr('register', 'phone')
        pwd = ob.getstr('register', 'pwd')
        data = {"mobilephone": phone, "pwd": pwd, "regname": "zhaojian"}
        HttpSession(url=url, data=data).httprequest(method='post')  # 发送请求

        setattr(ConText, "phone", phone)  # 将注册之后的手机号码临时变量当中
        setattr(ConText, "pwd", pwd)  # 将注册之后的密码临时变量当中
        memerid = self.mysql.select(
            'SELECT id FROM member WHERE MobilePhone="{}"'.format(phone))[0][0]
        setattr(ConText, "memberId", memerid)  # 将注册之后的用户id写到临时变量当中
        update_phone()  # 更新配置文件的手机号码
コード例 #4
0
 def test(self, items):
     self.pr.sendMCode()  # 发送短信验证码
     rp = Replace()  # 创建替换对象
     case_id = items.case_id  # 获取用例编号
     url = ob.getstr('url', 'url') + items.url
     data = items.data  # 获取数据
     title = items.title  # 获取用例标题
     if "@verify_code@" in data:
         verify_code = int(getattr(ConText, 'verify_code')) + 1
         data = data.replace("@verify_code@",
                             str(verify_code))  # 用最新的验证码去替换
     if title == '验证码超时':
         verify_code = ob.getstr("verify_phone",
                                 "verify_code")  # 拿到已经超时的验证码
         phone = ob.getstr("verify_phone", "phone")  # 拿到发送的手机号
         data = data.replace("<verify_code>", verify_code)  # 替换验证码
         data = data.replace("<phone>", phone)  # 替换手机号码
     client = Client(url)  # 创建连接
     data = eval(rp.replace_data(data))  # 获取请求数据
     print("请求数据为:", data)
     except_result = str(items.except_result)  # 获取预期结果,并转换为字典
     print('第{}条测试用例:{}开始执行'.format(case_id, title))
     re = client.service.userRegister(data)  # 发送请求
     acl_re = str(re.retCode)  # 获取实际结果
     print('实际结果:{}'.format(except_result), type(except_result))
     print('预期结果:{}'.format(acl_re), type(acl_re))
     print(dict(re))
     # 比对实际结果与预期结果
     try:
         self.assertEqual(except_result, acl_re)
         if items.check_sql:
             sql = rp.replace_data(items.check_sql)
             slect_result = self.mysql.find_result(sql)  # 得到查询结果
             self.assertEqual(1, slect_result)
             re_username = data["user_id"]  # 拿到注册过的用户名
             re_phone = data["mobile"]
             setattr(ConText, 're_username', re_username)  # 将注册过后的用户名写进临时变量
             setattr(ConText, 're_phone', re_phone)  # 将注册过后的手机号码写进临时变量
     except AssertionError as e:
         print('{}用例测试未通过'.format(title))
         self.mylog.error('{}用例测试未通过'.format(title))  # 打印日志信息
         self.excle.write(row=case_id + 1, column=8, value='未通过')  # 回写测试结果
         raise e  # 抛出异常
     else:
         print('{}用例测试通过'.format(title))
         self.mylog.info('{}用例测试通过'.format(title))  # 打印日志信息
         self.excle.write(row=case_id + 1, column=8, value='通过')  # 回写测试结果
     finally:
         self.excle.write(row=case_id + 1, column=7, value=acl_re)  # 回写实际结果
コード例 #5
0
 def __init__(self):
     # 建立数据库的链接
     try:
         self.conn = pymysql.connect(host=ob.getstr('mysql', 'host'),
                                     user=ob.getstr('mysql', 'user'),
                                     passwd=ob.getstr('mysql', 'passwd'),
                                     port=ob.getint('mysql', 'port'),
                                     database=ob.getstr(
                                         'mysql', 'database'),
                                     charset='utf8')
     except Exception as e:  # 报错给出提示
         print('出错:{}'.format(e))
     else:
         # 获取操作游标
         self.cursor = self.conn.cursor()
コード例 #6
0
    def test(self, items):
        rp = Replace()  # 创建替换对象

        # 获取测试用例的数据
        case_id = items.case_id  # 用例数据的编号
        title = items.title  # 用例的标题

        method = items.method  # 请求方法
        url = ob.getstr('url', 'url') + items.url  # 请求地址
        except_result = str(items.except_result)  # 获得预期结果
        data = items.data

        if items.check_sql:
            if items.interface == 'generateRepayments':
                result1 = self.mysql.find_result(
                    rp.replace_data(items.check_sql))  # 请求前数据表中记录的个数

        if "@loanId@" in items.data:
            max_loanId = self.mysql.select(sql="SELECT max(Id)From loan",
                                           row=1)[0]  # 查到loan表的最大标id
            data = data.replace("@loanId@", str(max_loanId + 100))
        data = eval(rp.replace_data(data))  # 替换后的申请数据
        print(data)

        print('第{}条用例开始执行:{}'.format(case_id, title))  # 打印信息
        self.mylog.info('第{}条用例开始执行:{}'.format(case_id, title))  # 写进日志
        # 发送请求获取实际结果
        res = HttpSession(url=url,
                          data=data).httprequest(method=method).json()['code']
        # 比对实际与预期结果
        print('预期结果:{}'.format(except_result))
        print('实际结果:{}'.format(res))
        try:
            self.assertEqual(except_result, res)
            if items.check_sql:  # 如果需要数据库校验
                if items.interface == 'bidloan':
                    investId = self.mysql.select(
                        rp.replace_data(items.check_sql))[0][0]  # 竞标得到investId
                    setattr(ConText, 'investId', investId)  # 将investId写进常量类
                if items.interface == 'generateRepayments':
                    select_result = self.mysql.find_result(
                        rp.replace_data(items.check_sql))  # 得到投资之后结果
                    self.assertEqual(1,
                                     select_result - result1)  # 比对查询的结果与预期的结果

        except AssertionError as e:
            print('{}测试用例未通过'.format(title))
            self.mylog.error('{}测试用例未通过,未通过的信息为{}'.format(title, e))  # 打印日志信息
            self.excle.write(row=case_id + 1, column=9, value='未通过')  # 回写测试结果
            raise e  # 抛出异常
        else:
            print('{}测试用例通过'.format(title))
            self.mylog.error('{}测试用例通过'.format(title))  # 打印日志信息
            self.excle.write(row=case_id + 1, column=9, value='通过')  # 回写测试结果
        finally:
            self.excle.write(row=case_id + 1, column=8, value=res)  # 回写实际结果
コード例 #7
0
 def sendMCode(self):
     mysql = ObMysql(database="sms_db_45")
     url = "http://120.24.235.105:9010/sms-service-war-1.0/ws/smsFacade.ws?wsdl"
     client = Client(url=url)  # 建立连接
     client_ip = ob.getstr('register', 'client_ip')
     phone = ob.getstr('register', 'phone')
     username = ob.getstr('register', 'username')
     pwd = ob.getstr('register', 'pwd')
     data = {"client_ip": client_ip, "tmpl_id": 1, "mobile": phone}
     client.service.sendMCode(data)  # 请求
     verify_code = mysql.select(
         "SELECT Fverify_code FROM t_mvcode_info_6 WHERE Fmobile_no= '{}'".
         format(phone))[0][0]  # 获取短信验证码
     setattr(ConText, 'client_ip', client_ip)  # 将ip地址添加到临时变量
     setattr(ConText, 'phone', phone)  # 将手机号添加到临时变量
     setattr(ConText, 'username', username)  # 将用户名添加到临时变量
     setattr(ConText, 'pwd', pwd)  # 密码添加到临时变量
     setattr(ConText, 'verify_code', verify_code)  # 将短信验证码添加到临时变量
     mysql.close()
     update_phone()  # 更新配置文件
コード例 #8
0
    def test(self, items):
        case_id = items.case_id  # 获取case_id
        title = items.title  # 获取title
        method = items.method  # 获取请求方法
        url = ob.getstr('url', 'url') + items.url  # 获取url地址
        rp = Replace(section2='login')
        data = eval(rp.replace_data(items.data))  # 获取请求数据
        except_result = str(items.except_result)  # 获取预期结果
        print('第{}条用例开始执行:{}'.format(case_id, title))
        self.mylog1.info('第{}条用例开始执行:{}'.format(case_id, title))  # 打印日志
        if items.check_sql:  # 如果需要校验数据库
            sql = rp.replace_data(items.check_sql)  # 获取sql语句
            select_result = self.ms.select(sql)  # 充值或者取现前的查询结果
            leave_amount = select_result[0][0]  # 拿到充值或者取现前的账户余额
            print(leave_amount)
            res = HttpSession(
                url=url, data=data).httprequest(method=method).json()  # 请求
            select_result1 = self.ms.select(sql)  # 充值后的查询结果
            if items.interface == 'recharge':  # 如果为充值接口
                except_leave_amount = leave_amount + Decimal(
                    str(data['amount']))  # 得到预期的充值之后的余额
            elif items.interface == 'withdraw':  # 如果为取现接口
                except_leave_amount = leave_amount - Decimal(
                    str(data['amount']))  # 得到预期提现后的余额
            leave_amount1 = select_result1[0][0]  # 拿到充值或者提现后后的账户余额
            print('充值或者取现前的账户余额为{}'.format(leave_amount))
            print('预期的账户余额为{}'.format(except_leave_amount))
            print('充值或者取现后的账户余额为{}'.format(leave_amount1))
        else:
            res = HttpSession(
                url=url, data=data).httprequest(method=method).json()  # 请求
        res1 = res['code']  # 返回的状态码

        print('实际结果为{}'.format(except_result))
        print('预期结果为{}'.format(res1))
        # 比对实际与预期结果
        try:
            self.assertEqual(res1, except_result)
            if items.check_sql:  # 如果需要校验数据库
                self.assertEqual(except_leave_amount,
                                 leave_amount1)  # 比对预期的充值之后的余额与实际的账户余额
        except AssertionError as e:  # 若实际与预期不符
            print('测试未通过')
            self.excel.write(row=case_id + 1, column=9, value='未通过')  # 回写测试结果
            self.mylog1.error('测试未通过,未通过信息为:{}'.format(e))  # 打印日志
            raise e  # 抛出异常
        else:
            print('测试通过')

            self.excel.write(row=case_id + 1, column=9, value='通过')  # 回写测试结果
            self.mylog1.info('测试通过')  # 打印日志
        finally:
            self.excel.write(row=case_id + 1, column=8, value=res1)  # 回写实际结果
コード例 #9
0
    def test(self, items):
        self.pr.userRegister()  # 注册
        rp = Replace(section1="userinfo")  # 创建替换对象
        case_id = items.case_id  # 获取用例编号
        url = ob.getstr('url', 'url') + items.url
        data = items.data  # 获取数据
        title = items.title  # 获取用例标题
        if "@uid@" in data:
            max_uid = self.mysql.select(rp.replace_data(items.check_sql))[0][0]
            print(max_uid)
            data = data.replace("@uid@", str(int(max_uid + 1)))  # 用最新uid去替换
        client = Client(url)  # 创建连接
        data = eval(rp.replace_data(data))  # 获取请求数据
        print("请求数据为:", data)
        except_result = str(items.except_result)
        print('第{}条测试用例:{}开始执行'.format(case_id, title))
        re = client.service.verifyUserAuth(data)  # 发送请求
        acl_re = str(re.retCode)  # 获取实际结果
        print('实际结果:{}'.format(except_result), type(except_result))
        print('预期结果:{}'.format(acl_re), type(acl_re))
        print(dict(re))
        # 比对实际结果与预期结果
        try:
            self.assertEqual(except_result, acl_re)
            if items.check_sql:
                if items.title == "实名认证成功":
                    sql = rp.replace_data(items.check_sql)
                    slect_result = self.mysql.find_result(sql)  # 得到查询结果
                    self.assertEqual(1, slect_result)

        except AssertionError as e:
            print('{}用例测试未通过'.format(title))
            self.mylog.error('{}用例测试未通过'.format(title))  # 打印日志信息
            self.excle.write(row=case_id + 1, column=8, value='未通过')  # 回写测试结果
            raise e  # 抛出异常
        else:
            print('{}用例测试通过'.format(title))
            self.mylog.info('{}用例测试通过'.format(title))  # 打印日志信息
            self.excle.write(row=case_id + 1, column=8, value='通过')  # 回写测试结果
        finally:
            self.excle.write(row=case_id + 1, column=7, value=acl_re)  # 回写实际结果
コード例 #10
0
    def test(self, items):
        rp = Replace()  # 创建替换对象

        # 获取测试用例的数据
        case_id = items.case_id  # 用例数据的编号
        title = items.title  # 用例的标题

        method = items.method  # 请求方法
        url = ob.getstr('url', 'url') + items.url  # 请求地址
        except_result = str(items.except_result)  # 获得预期结果
        data = items.data

        if "@memberId@" in items.data:
            max_memberId = self.mysql.select(sql="SELECT max(Id)From member",
                                             row=1)[0]  # 查到member表的最大标id
            data = data.replace("@memberId@", str(max_memberId + 100))
        data = eval(rp.replace_data(data))  # 替换后的申请数据
        print(data)

        print('第{}条用例开始执行:{}'.format(case_id, title))  # 打印信息
        self.mylog.info('第{}条用例开始执行:{}'.format(case_id, title))  # 写进日志
        # 发送请求获取实际结果
        res = HttpSession(url=url,
                          data=data).httprequest(method=method).json()['code']
        # 比对实际与预期结果
        print('预期结果:{}'.format(except_result))
        print('实际结果:{}'.format(res))
        try:
            self.assertEqual(except_result, res)
        except AssertionError as e:
            print('{}测试用例未通过'.format(title))
            self.mylog.error('{}测试用例未通过,未通过的信息为{}'.format(title, e))  # 打印日志信息
            self.excle.write(row=case_id + 1, column=9, value='未通过')  # 回写测试结果
            raise e  # 抛出异常
        else:
            print('{}测试用例通过'.format(title))
            self.mylog.error('{}测试用例通过'.format(title))  # 打印日志信息
            self.excle.write(row=case_id + 1, column=9, value='通过')  # 回写测试结果
        finally:
            self.excle.write(row=case_id + 1, column=8, value=res)  # 回写实际结果
コード例 #11
0
 def test(self, items):
     case_id = items.case_id  # 获取case_id
     title = items.title  # 获取title
     method = items.method  # 获取请求方法
     url = ob.getstr('url', 'url') + items.url  # 获取url地址
     rp = Replace(section1='register', section2='login')  # 创建替换对象
     data = eval(rp.replace_data(items.data))  # 替换后的数据
     except_result = items.except_result  # 获取预期结果
     print('第{}条用例开始执行:{}'.format(case_id, title))
     self.mylog.info('第{}条用例开始执行:{}'.format(case_id, title))  # 打印日志
     res = HttpRequest(url=url,
                       data=data).httprequest(method=method).content.decode(
                           'utf8')  # 请求获取实际结果
     print('实际结果为{}'.format(except_result))
     print('预期结果为{}'.format(res))
     # 比对实际与预期结果
     try:
         self.assertEqual(res, except_result)
         if items.check_sql:  # 如果需要数据库校验
             sql = rp.replace_data(items.check_sql)
             sql_result = self.ms.find_result(sql)  # 数据库查询结果
             if sql_result == 1:  # 如果注册成功
                 ob.write('login', 'phone',
                          data['mobilephone'])  # 将手机号写进配置文件
                 ob.write('login', 'pwd', data['pwd'])  # 将密码写进配置文件
             self.assertEqual(1, sql_result)  # 比对查询结果
     except AssertionError as e:  # 若实际与预期不符
         print('测试未通过')
         self.excel.write(row=case_id + 1, column=9, value='未通过')  # 回写测试结果
         self.mylog.error('测试未通过,未通过信息为:{}'.format(e))
         raise e  # 抛出异常
     else:
         print('测试通过')
         self.excel.write(row=case_id + 1, column=9, value='通过')  # 回写测试结果
         self.mylog.info('测试通过')  # 打印日志
     finally:
         self.excel.write(row=case_id + 1, column=8, value=res)  # 回写实际结果
コード例 #12
0
 def test(self, items):
     rp = Replace(section1='register')  # 创建替换对象
     case_id = items.case_id  # 获取用例编号
     url = ob.getstr('url', 'url') + items.url
     client = Client(url)  # 创建连接
     title = items.title  # 获取用例标题
     data = eval(rp.replace_data(items.data))  # 获取请求数据
     print("请求数据为:", data)
     except_result = str(items.except_result)  # 获取预期结果
     print('第{}条测试用例:{}开始执行'.format(case_id, title))
     try:
         re = client.service.sendMCode(data)  # 发送请求
     except suds.WebFault as e:
         acl_re = str(e.fault.faultstring)  # 请求有误,返回实际结果
     else:
         acl_re = str(re.retCode)  # 请求通过, 返回实际结果
     print('实际结果:{}'.format(except_result))
     print('预期结果:{}'.format(acl_re))
     # 比对实际结果与预期结果
     try:
         self.assertEqual(except_result, acl_re)
         if items.check_sql:
             sql = rp.replace_data(items.check_sql)
             slect_result = self.mysql.find_result(sql)  # 得到查询结果
             self.assertEqual(1, slect_result)
     except AssertionError as e:
         print('{}用例测试未通过'.format(title))
         self.mylog.error('{}用例测试未通过'.format(title))  # 打印日志信息
         self.excle.write(row=case_id + 1, column=8, value='未通过')  # 回写测试结果
         raise e  # 抛出异常
     else:
         print('{}用例测试通过'.format(title))
         self.mylog.info('{}用例测试通过'.format(title))  # 打印日志信息
         self.excle.write(row=case_id + 1, column=8, value='通过')  # 回写测试结果
     finally:
         self.excle.write(row=case_id + 1, column=7, value=acl_re)  # 回写实际结果
コード例 #13
0
class MyLog(object):
    '''日志类'''
    log_in = ob.getstr('loglevel', 'log_in')  # 日志收集等级
    ch_log_out = ob.getstr('loglevel', 'ch_log_out')  # 控制台输出等级
    fh_log_out = ob.getstr('loglevel', 'fh_log_out')  # 文件输出等级
    save_log = cons.LOGS_DIR  # 日志文件存储位置

    def __init__(self, logname):
        '''
        初始化
        :param logname: 收集器的名字
        '''
        self.logname = logname

    def mylog(self, level, msg):
        '''
        日志方法
        :param level: 输出的等级
        :param msg: 输出的信息
        :return:
        '''

        logger = logging.getLogger(self.logname)  # 创建收集器
        logger.setLevel(self.log_in)  # 设置收入日志的等级
        formatter = logging.Formatter(
            datefmt='%Y-%m-%d %H:%M:%S',
            fmt='%(asctime)s-[%(filename)s-->line:%(lineno)d]'
            '-%(levelname)s-%(name)s-日志输出的信息:'
            '%(message)s')
        now = time.strftime('%Y-%m-%d')  # 获取一下当前的时间
        ch = logging.StreamHandler()  # 创建控制台输出渠道
        ch.setLevel(self.ch_log_out)  # 设置控制台输出日志等级
        ch.setFormatter(formatter)  # 设置控制台日志输出格式
        logger.addHandler(ch)  # 将控制台输出渠道添加到收集器当中
        try:
            path = os.path.join(self.save_log,
                                'log_{}.log'.format(now))  # 设置一下日志的存储路径
            fh = logging.FileHandler(path, 'a',
                                     encoding='utf8')  # 创建日志输出到文件的渠道
        except FileNotFoundError:  # 若不存在文件夹创建log文件夹
            os.mkdir(self.save_log)
            path = os.path.join(self.save_log,
                                'log_{}.log'.format(now))  # 设置一下日志的存储路径
            fh = logging.FileHandler(path, 'a',
                                     encoding='utf8')  # 创建日志输出到文件的渠道
        fh.setLevel(self.fh_log_out)  # 设置文件的输出日志等级
        fh.setFormatter(formatter)  # 设置文件的输出格式
        logger.addHandler(fh)  # 将文件输出渠道添加到收集器当中

        if level == 'DEBUG':  # 如果输出日志等级等于DEBUG调用debug输出方法
            logger.debug(msg)
        elif level == 'INFO':  # 如果输出日志等级等于INFO调用info输出方法
            logger.info(msg)
        elif level == 'WARNING':  # 如果输出日志等级等于WARNING调用warning输出方法
            logger.warning(msg)
        elif level == 'ERROR':  # 如果输出日志等级等于ERROR调用error输出方法
            logger.error(msg)
        elif level == 'CRITICAL':  # 如果输出日志等级等于CRITICAL调用critical输出方法
            logger.critical(msg)

        logger.removeHandler(ch)  # 回收控制台渠道
        logger.removeHandler(fh)  # 回收文件渠道

    def debug(self, msg):
        '''
        debug方法
        :param msg: 输出的内容
        :return:
        '''
        self.mylog("DEBUG", msg)

    def info(self, msg):
        '''
        info方法
        :param msg: 输出的内容
        :return:
        '''
        self.mylog('INFO', msg)

    def warning(self, msg):
        '''
        warning 方法
        :param msg: 输出的内容
        :return:
        '''
        self.mylog('WARNING', msg)

    def error(self, msg):
        '''
        error方法
        :param msg: 输出的内容
        :return:
        '''
        self.mylog("ERROR", msg)

    def critical(self, msg):
        '''
        critical方法
        :param msg: 输出的内容
        :return:
        '''
        self.mylog('CRITICAL', msg)
コード例 #14
0
    def test(self, items):
        rp = Replace()  # 创建替换对象

        # 获取测试用例的数据
        case_id = items.case_id  # 用例数据的编号
        title = items.title  # 用例的标题

        method = items.method  # 请求方法
        url = ob.getstr('url', 'url') + items.url  # 请求地址
        except_result = str(items.except_result)  # 获得预期结果
        data = items.data

        if items.check_sql:
            result1 = self.mysql.find_result(rp.replace_data(
                items.check_sql))  # 查询投资之前invest投资该标记录的个数
            amount = self.mysql.select(
                "SELECT LeaveAmount FROM member WHERE MobilePhone= '{}'".
                format(getattr(ConText, 'phone')))[0][0]  # 查询投资用户投资之前的余额
        if "@memberId@" in items.data:
            max_memberid = self.mysql.select(sql="SELECT max(Id)From member",
                                             row=1)[0]  # 查到用户表的最大id
            data = data.replace("@memberId@", str(max_memberid + 100))
        if "@loanId@" in items.data:
            max_loanId = self.mysql.select(sql="SELECT max(Id)From loan",
                                           row=1)[0]  # 查到loan表的最大标id
            data = data.replace("@loanId@", str(max_loanId + 100))
        data = eval(rp.replace_data(data))  # 替换后的申请数据
        print(data)

        print('第{}条用例开始执行:{}'.format(case_id, title))  # 打印信息
        self.mylog.info('第{}条用例开始执行:{}'.format(case_id, title))  # 写进日志
        # 发送请求获取实际结果
        res = HttpSession(url=url,
                          data=data).httprequest(method=method).json()['code']
        # 比对实际与预期结果
        print('预期结果:{}'.format(except_result))
        print('实际结果:{}'.format(res))
        try:
            self.assertEqual(except_result, res)
            if items.check_sql:  # 如果需要数据库校验
                select_result = self.mysql.find_result(
                    rp.replace_data(items.check_sql))  # 得到投资之后结果
                amount1 = self.mysql.select(
                    "SELECT LeaveAmount FROM member WHERE MobilePhone= '{}'".
                    format(getattr(ConText, 'phone')))[0][0]  # 查询投资用户投资之后的余额
                bd_amount = Decimal(str(data['amount']))  # 拿到充值金额
                self.assertEqual(1, select_result - result1)  # 比对查询的结果与预期的结果
                self.assertEqual(bd_amount,
                                 amount - amount1)  # 比对余额的减少是否与投资的金额相等

        except AssertionError as e:
            print('{}测试用例未通过'.format(title))
            self.mylog.error('{}测试用例未通过,未通过的信息为{}'.format(title, e))  # 打印日志信息
            self.excle.write(row=case_id + 1, column=9, value='未通过')  # 回写测试结果
            raise e  # 抛出异常
        else:
            print('{}测试用例通过'.format(title))
            self.mylog.error('{}测试用例通过'.format(title))  # 打印日志信息
            self.excle.write(row=case_id + 1, column=9, value='通过')  # 回写测试结果
        finally:
            self.excle.write(row=case_id + 1, column=8, value=res)  # 回写实际结果