class LoginTest(unittest.TestCase):
    excel = excel_practice(contants.case_file, "recharge")
    cases = excel.read_excel()
    @classmethod#变成类方法,使全部用例执行完之后才生效
    def setUpClass(cls):
        cls.http_request = Http_Request2()
        cls.mysql = DoMysql()
    @data(*cases)
    def test_recharge(self,case):
        #判断请求之前,是否需要执行sql
        if case.sql is not None:
            sql = eval(case.sql)['sql1']
            member = self.mysql.fetch_one(sql)
            print('before',type(member['LeaveAmount']),member['LeaveAmount'])
            before = member['LeaveAmount']
        case.data = context.replace(case.data)  # 使用封装好的正则表达式替换数据
        resp = self.http_request.request(case.method,case.url,case.data)
        actual_code = resp.json()["code"]
        #actual_code = int(actual_code),或者把actual转成整数也可以
        print(case.title)
        try:
            self.assertEqual(str(case.expected),actual_code)
            self.excel.write_excel(case.case_id + 1, actual_code, "PASS")
            #成功之后,再次判断是否需要执行sql
            if case.sql is not None:
                sql = eval(case.sql)['sql1']
                member = self.mysql.fetch_one(sql)
                print('after',type(member['LeaveAmount']),member['LeaveAmount'])
                after = member['LeaveAmount']
                self.assertEqual(before+int(eval(case.data)['amount']),after)
        except AssertionError as e:
            self.excel.write_excel(case.case_id + 1, actual_code, "FAIL")
            raise e
class LoginTest(unittest.TestCase):
    excel = excel_practice(contants.case_file, "login")
    cases = excel.read_excel()

    @classmethod  #变成类方法,使全部用例执行完之后才生效
    def setUpClass(cls):
        logger.info('测试前置')
        cls.http_request = Http_Request2()

    @data(*cases)
    def test_login(self, case):
        logger.info('开始测试:{0}'.format(case.title))
        case.data = context.replace(case.data)  # 使用封装好的正则表达式替换数据
        resp = self.http_request.request(case.method, case.url, case.data)
        try:

            self.assertEqual(case.expected, resp.text)
            self.excel.write_excel(case.case_id + 1, resp.text, "PASS")
        except AssertionError as e:
            self.excel.write_excel(case.case_id + 1, resp.text, "FAIL")
            logger.error('报错:{}'.format(e))
            raise e
        logger.info('结束测试:{0}'.format(case.title))

    @classmethod
    def tearDownClass(cls):
        logger.info('测试后置')
        cls.http_request.close()
class LoginTest(unittest.TestCase):
    excel = excel_practice(contants.case_file, "withdraw")
    cases = excel.read_excel()

    @classmethod  #变成类方法,使全部用例执行完之后才生效
    def setUpClass(cls):
        cls.http_request = Http_Request2()

    @data(*cases)
    def test_withdraw(self, case):
        case.data = context.replace(case.data)  # 使用封装好的正则表达式替换数据
        resp = self.http_request.request(case.method, case.url, case.data)
        actual_code = resp.json()["code"]
        #actual_code = int(actual_code),或者把actual转成整数也可以
        try:
            self.assertEqual(str(case.expected), actual_code)
            self.excel.write_excel(case.case_id + 1, actual_code, "PASS")
            print("成功案例:", case.title)
        except AssertionError as e:
            self.excel.write_excel(case.case_id + 1, actual_code, "FAIL")
            print("失败案例:", case.title)
            raise e
class LoginTest(unittest.TestCase):
    excel = excel_practice(contants.case_file, "register")
    cases = excel.read_excel()

    @classmethod  #变成类方法,使全部用例执行完之后才生效
    def setUpClass(cls):
        cls.http_request = Http_Request2()
        cls.mysql = do_mysql.DoMysql()

    @data(*cases)
    def test_login(self, case):
        if case.data.find('register_mobilephone'):
            if case.sql is not None:
                sql = eval(case.sql)['sql1']
                # sql = 'select max(mobilephone) from future.member'

                min_phone = self.mysql.fetch_one(sql)[
                    'max(mobilephone)']  # 查询最小手机号码
                # print(self.mysql.fetch_one(sql)['max(mobilephone)'])
                min_phone = int(min_phone) + 1
                min_phone = str(min_phone)
                print('min_phone', min_phone)
                case.data = case.data.replace('register_mobilephone',
                                              str(min_phone))
class InvestTest(unittest.TestCase):
    excel = excel_practice(contants.case_file, "invest")
    cases = excel.read_excel()
    @classmethod#变成类方法,使全部用例执行完之后才生效
    def setUpClass(cls):
        cls.http_request = Http_Request2()
        cls.mysql = do_mysql.DoMysql()
    @data(*cases)
    def test_invest(self,case):
        if case.sql is not None:
            sql = eval(case.sql)['sql1']
            print('before_LeaveAmount',self.mysql.fetch_one(sql)['LeaveAmount'])
            # print('before_LeaveAmount', self.mysql.fetch_one(sql))
            before_LeaveAmount = self.mysql.fetch_one(sql)['LeaveAmount']

        case.data = context.replace(case.data)  # 使用封装好的正则表达式替换数据
        resp = self.http_request.request(case.method,case.url,case.data)
        # print(resp.json())
        actual_code = resp.json()["code"]
        # print(resp.json())
        #actual_code = int(actual_code),或者把actual转成整数也可以
        try:
            self.assertEqual(str(case.expected),actual_code)
            self.excel.write_excel(case.case_id+1,actual_code,"PASS")
            print("成功案例:", case.title)
            if case.sql is not None:
                sql = eval(case.sql)['sql1']
                after_LeaveAmount = self.mysql.fetch_one(sql)['LeaveAmount']
                print('after_LeaveAmount',after_LeaveAmount)
                self.assertEqual(before_LeaveAmount - int(eval(case.data)['amount']), after_LeaveAmount)

            #判断加标成功后,查询数据库,得到loan_id
            if resp.json()['msg'] == '加标成功':
                sql = 'select id from future.loan where MemberID = 375 ORDER BY CreateTime DESC LIMIT 1;'
                loan_id = str(self.mysql.fetch_one(sql)['id'])
                setattr(Context,'loan_id',str(loan_id))