Esempio n. 1
0
 def register(reg_name='linux超', pwd='123456'):
     """注册帐号"""
     do_mysql = HandleMysql()
     request = HttpRequests()
     register_url = do_conf('URL', 'Host_Url') + '/member/register'
     while 1:
         phone = do_mysql.get_not_exist_phone()
         request_data = {"mobilephone": phone, "pwd": pwd, "regname": reg_name}
         request(method='post',
                 url=register_url,
                 data=request_data
                 )
         sql = 'select Id from member where MobilePhone=%s;'
         member = do_mysql(sql=sql, args=(phone,))
         if member:
             member_id = member['Id']
             break
     user_dic = {
         reg_name: {
             'MemberId': member_id,
             'pwd': pwd,
             'MobilePhone': phone,
             'RegName': reg_name
         }
     }
     do_mysql.close()
     request.close_session()
     log.info('注册{}帐号成功\n帐号信息-userId{},userName{},mobilePhone{}'.
              format(reg_name, member_id, reg_name, phone))
     return user_dic
Esempio n. 2
0
 def setUp(self):
     # 投资人登录充值
     login.login_api(method='post',
                     url=do_conf('URL', 'Host_Url') + '/member/login',
                     data={"mobilephone": str(do_user('Invest', 'mobilephone')),
                           "pwd": (do_user('Invest', 'pwd'))}
                     )
Esempio n. 3
0
 def test_recharge(self, value):
     row = value.CaseId + 1  # 用例ID所在行号
     precondition = value.Precondition  # excel用例的前置条件
     title = value.Title  # 用例标题
     url = do_conf('URL', 'Host_Url') + value.URL  # 用例url
     request_value = value.Data  # 请求参数
     request_method = value.Method  # 请求方法
     select_sql = value.Sql  # 查询充值结果的sql语句
     replace_sql = recharge_parameters(select_sql)
     recharge_expected = HandleJson.json_to_python(value.Expected)  # 期望结果
     log.info('执行充值-测试用例"{}"开始'.format(title))
     request_value = recharge_parameters(request_value)
     before_amount = self.mysql(sql=replace_sql)['LeaveAmount']  # 充值前的金额
     # 切换会话
     if precondition == '用户未登录':
         response = self.request(request_method, url=url, data=request_value)
     else:
         response = request(request_method, url=url, data=request_value)
     after_amount = self.mysql(sql=replace_sql)['LeaveAmount']  # 充值后的金额
     actual_amount = str(after_amount - before_amount)  # 实际金额
     actual_code = response.json()['code']  # 实际code
     # 构造个实际结果的字典
     actual_result = dict(leaveamount=actual_amount, code=actual_code)
     do_excel.write_cell(
         do_conf('SheetName', 'Recharge'),
         row,
         do_conf('ExcelNum', 'Actual_Column'),
         HandleJson.python_to_json(actual_result)
     )
     try:
         self.assertEqual(recharge_expected, actual_result, msg='测试{}失败'.format(title))
     except AssertionError as e:
         do_excel.write_cell(
             do_conf('SheetName', 'Recharge'),
             row,
             do_conf('ExcelNum', 'Result_Column'),
             do_conf('Result', 'Fail'),
             color=RED)
         log.error('{}-测试[{}] :Failed\nDetails:\n{}'.format(inspect.stack()[0][3], title, e))
         raise e
     else:
         do_excel.write_cell(
             do_conf('SheetName', 'Recharge'),
             row,
             do_conf('ExcelNum', 'Result_Column'),
             do_conf('Result', 'Pass'),
             color=GREEN)
         log.info('{}-测试[{}] :Passed'.format(inspect.stack()[0][3], title))
     log.info('执行登录-测试用例"{}"结束'.format(title))
Esempio n. 4
0
 def setUpClass(cls):
     cls.mysql = HandleMysql()
     # 管理人员登录
     login.login_api(method='post',
                     url=do_conf('URL', 'Host_Url') + '/member/login',
                     data={
                         "mobilephone": str(do_user('Admin',
                                                    'mobilephone')),
                         "pwd": (do_user('Admin', 'pwd'))
                     })
     # 管理人加标
     add.add_loan_api(method='post',
                      url=do_conf('URL', 'Host_Url') + '/loan/add',
                      data={
                          "memberId": str(do_user('Invest', 'memberid')),
                          "title": "超哥专属标的",
                          "amount": 1000000,
                          "loanRate": 10,
                          "loanTerm": 3,
                          "loanDateType": 0,
                          "repaymemtWay": 4,
                          "biddingDays": 5
                      })
     sql = 'SELECT Id FROM loan WHERE MemberID={0} ORDER BY CreateTime DESC LIMIT 1;'.format(
         str(do_user('Invest', 'memberid')))
     loan_id = str(cls.mysql(sql=sql)['Id'])
     setattr(DataReplace, 'loan_id', loan_id)
     # 管理人审核
     audit.audit_loan_api(method='post',
                          url=do_conf('URL', 'Host_Url') + '/loan/audit',
                          data={
                              "id": loan_id,
                              "status": 4
                          })
     # 投资人登录
     login.login_api(method='post',
                     url=do_conf('URL', 'Host_Url') + '/member/login',
                     data={
                         "mobilephone": str(do_user('Invest',
                                                    'mobilephone')),
                         "pwd": (('Invest', 'pwd'))
                     })
Esempio n. 5
0
 def replace_remain_amount(cls, data):
     if hasattr(DataReplace, 'remain_amount'):
         # 总金额-已投金额 = 需要满标时的投资金额
         amount = str(
             float(do_conf('add_loan_api', 'amount')) -
             getattr(DataReplace, 'remain_amount'))
         data = cls.re_replace(cls.pattern_amount_remain_amount, amount,
                               data)
     else:
         data = cls.re_replace(cls.pattern_amount_remain_amount, '', data)
     return data
Esempio n. 6
0
 def test_add(self, value):
     row = value.CaseId + 1  # 用例ID所在行号
     precondition = value.Precondition  # excel用例的前置条件
     title = value.Title  # 用例标题
     url = do_conf('URL', 'Host_Url') + value.URL  # 用例url
     request_method = value.Method  # 请求方法
     request_value = value.Data  # 请求参数
     select_sql = value.Sql  # 查询数据库中不存在的member id
     add_expected = HandleJson.json_to_python(value.Expected)  # 期望结果
     if precondition == '借款人用户ID不存在':
         not_exist_loan_member_id = str(
             int(self.mysql(select_sql)['Id']) - 1)
         request_value = add_parameters(not_exist_loan_member_id,
                                        request_value)
     else:
         request_value = add_parameters('', request_value)
     log.info('执行加标-测试用例"{}"开始'.format(title))
     response = request(request_method, url=url, data=request_value)
     actual_result = response.json()
     do_excel.write_cell(do_conf('SheetName', 'Add'), row,
                         do_conf('ExcelNum', 'Actual_Column'),
                         response.text)
     try:
         self.assertEqual(add_expected,
                          actual_result,
                          msg='测试{}失败'.format(title))
     except AssertionError as e:
         do_excel.write_cell(do_conf('SheetName', 'Add'),
                             row,
                             do_conf('ExcelNum', 'Result_Column'),
                             do_conf('Result', 'Fail'),
                             color=RED)
         log.error('{}-测试[{}] :Failed\nDetails:\n{}'.format(
             inspect.stack()[0][3], title, e))
         raise e
     else:
         do_excel.write_cell(do_conf('SheetName', 'Add'),
                             row,
                             do_conf('ExcelNum', 'Result_Column'),
                             do_conf('Result', 'Pass'),
                             color=GREEN)
         log.info('{}-测试[{}] :Passed'.format(inspect.stack()[0][3], title))
     log.info('执行加标-测试用例"{}"结束'.format(title))
Esempio n. 7
0
 def test_register(self, value):
     row = value.CaseId + 1  # 用例ID所在行号
     title = value.Title  # 用例标题
     url = do_conf('URL', 'Host_Url') + value.URL  # 用例url
     request_value = value.Data  # 请求参数
     request_method = value.Method  # 请求方法
     log.info('开始执行注册-"{}"测试用例'.format(title))
     # 转json的目的是防止期望结果和实际结果的字符串形式匹配不上(excel 存储的期望结果有空格)
     expected = HandleJson.json_to_python(value.Expected)  # 期望结果
     not_exist_phone = self.mysql.get_not_exist_phone()  # 正向用例的注册账号
     request_value = register_login_parameters(not_exist_phone,
                                               request_value)
     response = self.request(request_method, url=url, data=request_value)
     actual_result = response.json()
     do_excel.write_cell(do_conf('SheetName', 'Register'), row,
                         do_conf('ExcelNum', 'Actual_Column'),
                         response.text)
     try:
         self.assertEqual(expected,
                          actual_result,
                          msg='测试{}失败'.format(title))
     except AssertionError as e:
         do_excel.write_cell(do_conf('SheetName', 'Register'),
                             row,
                             do_conf('ExcelNum', 'Result_Column'),
                             do_conf('Result', 'Fail'),
                             color=RED)
         log.error('{}-测试[{}] :Failed\nDetails:\n{}'.format(
             inspect.stack()[0][3], title, e))
         raise e
     else:
         do_excel.write_cell(do_conf('SheetName', 'Register'),
                             row,
                             do_conf('ExcelNum', 'Result_Column'),
                             do_conf('Result', 'Pass'),
                             color=GREEN)
         log.info('{}-测试[{}] :Passed'.format(inspect.stack()[0][3], title))
     log.info('执行注册-测试用例"{}"结束'.format(title))
Esempio n. 8
0
class TestLoginApi(Base):
    """登录接口"""
    test_data = do_excel.get_name_tuple_all_value(do_conf(
        'SheetName', 'Login'))

    @data(*test_data)
    def test_login(self, value):
        row = value.CaseId + 1  # 用例ID所在行号
        title = value.Title  # 用例标题
        url = do_conf('URL', 'Host_Url') + value.URL  # 用例url
        request_value = value.Data  # 请求参数
        request_method = value.Method  # 请求方法
        expected = HandleJson.json_to_python(value.Expected)  # 期望结果
        not_exist_phone = self.mysql.get_not_exist_phone()  # 逆向用例登录账号
        log.info('开始执行登录-"{}"测试用例'.format(title))
        request_value = register_login_parameters(not_exist_phone,
                                                  request_value)
        response = self.request(request_method, url=url, data=request_value)
        actual_result = response.json()
        do_excel.write_cell(do_conf('SheetName', 'Login'), row,
                            do_conf('ExcelNum', 'Actual_Column'),
                            response.text)
        try:
            self.assertEqual(expected,
                             actual_result,
                             msg='测试{}失败'.format(title))
        except AssertionError as e:
            do_excel.write_cell(do_conf('SheetName', 'Login'),
                                row,
                                do_conf('ExcelNum', 'Result_Column'),
                                do_conf('Result', 'Fail'),
                                color=RED)
            log.error('{}-测试[{}] :Failed\nDetails:\n{}'.format(
                inspect.stack()[0][3], title, e))
            raise e
        else:
            do_excel.write_cell(do_conf('SheetName', 'Login'),
                                row,
                                do_conf('ExcelNum', 'Result_Column'),
                                do_conf('Result', 'Pass'),
                                color=GREEN)
            log.info('{}-测试[{}] :Passed'.format(inspect.stack()[0][3], title))
        log.info('执行登录-测试用例"{}"结束'.format(title))
Esempio n. 9
0
 def __init__(self):
     log.info('初始化数据库...')
     try:
         log.info('start connecting MySQL...')
         self._conn = pymysql.connect(
             host=do_conf('MySQL', 'Host'),
             user=do_conf('MySQL', 'User'),
             password=do_conf('MySQL', 'PassWord'),
             db=do_conf('MySQL', 'Db'),
             port=do_conf('MySQL', 'Port'),
             charset=do_conf('MySQL', 'Charset'),
             cursorclass=pymysql.cursors.DictCursor)
     except Exception as e:
         log.error('连接数据库失败\n错误信息如下\n'.format(e))
     else:
         log.info('连接数据库成功')
         self._cursor = self._conn.cursor()
Esempio n. 10
0
 def replace_amount_not_enough(cls, data):
     amount = str(do_conf('add_loan_api', 'amount'))
     data = cls.re_replace(cls.pattern_amount_not_enough, amount, data)
     return data
Esempio n. 11
0
class DataReplace(object):
    pattern_not_exist_phone = re.compile(
        do_conf('Expression', 'Non_exist_phone'))
    pattern_exist_phone = re.compile(do_conf('Expression', 'Existed_phone'))
    pattern_invest_phone = re.compile(do_conf('Expression', 'Invest_phone'))
    pattern_no_login_phone = re.compile(do_conf('Expression', 'NoLogin_phone'))
    # add by linux超 at 2019.06.06
    pattern_exist_loan_member_id = re.compile(
        do_conf('Expression', 'Existed_member_id'))
    pattern_not_exist_loan_member_id = re.compile(
        do_conf('Expression', 'Non_existed_member_id'))
    # add by linux超 at 2019.06.06
    pattern_exist_invest_member_id = re.compile(
        do_conf('Expression', 'Exist_invest_member_id'))
    pattern_not_exist_invest_member_id = re.compile(
        do_conf('Expression', 'Non_exist_invest_member_id'))
    pattern_exist_loan_id = re.compile(do_conf('Expression', 'Exist_loan_id'))
    pattern_not_exist_loan_id = re.compile(
        do_conf('Expression', 'Non_exist_loan_id'))
    pattern_amount = re.compile(do_conf('Expression', 'Amount'))
    pattern_password = re.compile(do_conf('Expression', 'Password'))
    pattern_amount_not_enough = re.compile(
        do_conf('Expression', 'Amount_not_enough'))  # 标的金额不足
    pattern_amount_remain_amount = re.compile(
        do_conf('Expression', 'Remain_amount'))  # 标的剩余金额(用来测试满标)

    def __init__(self):
        pass

    @staticmethod
    def re_replace(re_expression, data, source):
        """
        替换指定字符串
        :param re_expression: 正则表达式
        :param data: 被替换字符串如手机号,密码等
        :param source: 目标源字符串
        :return:
        """
        if isinstance(data, str):
            pattern = re.compile(re_expression)
            if re.search(pattern, source):
                source = re.sub(pattern, data, source)
            log.info("测试数据{}通过正则匹配为: {}".format(source, source))
            return source
        else:
            log.error("正则匹配测试数据失败: data '{}' must be string".format(data))
            raise TypeError("data '{}' must be string".format(data))

    # --------注册与登录接口参数化--------
    @classmethod
    def replace_not_exist_phone(cls, not_exist_phone, data):
        """替换未注册的手机号"""
        data = cls.re_replace(cls.pattern_not_exist_phone, not_exist_phone,
                              data)
        return data

    @classmethod
    def replace_exist_phone(cls, data):
        """替换已经注册的手机号码"""
        exist_phone = str(do_user('Invest', 'MobilePhone'))
        data = cls.re_replace(cls.pattern_exist_phone, exist_phone, data)
        return data

    # -----------充值接口参数化-----------
    @classmethod
    def replace_invest_phone(cls, data):
        """充值接口替换登录的角色帐号"""
        login_phone = str(do_user('Loan', 'MobilePhone'))
        data = cls.re_replace(cls.pattern_invest_phone, login_phone, data)
        return data

    @classmethod
    def replace_no_login_phone(cls, data):
        """充值接口替换未登录的角色帐号"""
        no_login_phone = str(do_user('Loan', 'MobilePhone'))
        data = cls.re_replace(cls.pattern_no_login_phone, no_login_phone, data)
        return data

    # ----------加标接口参数化-------------
    # add by linux超 at 2019.06.06
    @classmethod
    def replace_loan_member_id(cls, data):
        """替换借款人的member id"""
        loan_member_id = str(do_user('Loan', 'memberid'))
        data = cls.re_replace(cls.pattern_exist_loan_member_id, loan_member_id,
                              data)
        return data

    # add by linux超 at 2019.06.06
    @classmethod
    def replace_no_exist_loan_member_id(cls, not_exist_loan_member_id, data):
        """替换不存在的loan member id"""
        data = cls.re_replace(cls.pattern_not_exist_loan_member_id,
                              not_exist_loan_member_id, data)
        return data

    # -----------竞标接口参数化-----------
    @classmethod
    def replace_exist_invest_id(cls, data):
        invest_member_id = str(do_user('Invest', 'memberid'))
        data = cls.re_replace(cls.pattern_exist_invest_member_id,
                              invest_member_id, data)
        return data

    @classmethod
    def replace_exist_loan_id(cls, data):
        exist_loan_id = getattr(DataReplace, 'loan_id')
        data = cls.re_replace(cls.pattern_exist_loan_id, exist_loan_id, data)
        return data

    @classmethod
    def replace_not_exist_invest_id(cls, data):
        if hasattr(DataReplace, 'non_exist_member_id'):
            not_exist_invest_id = getattr(DataReplace, 'non_exist_member_id')
            data = cls.re_replace(cls.pattern_not_exist_invest_member_id,
                                  not_exist_invest_id, data)
        else:
            data = cls.re_replace(cls.pattern_not_exist_invest_member_id, '',
                                  data)
        return data

    @classmethod
    def replace_not_exist_loan_id(cls, data):
        if hasattr(DataReplace, 'non_exist_loan_id'):
            not_exist_loan_id = getattr(DataReplace, 'non_exist_loan_id')
            data = cls.re_replace(cls.pattern_not_exist_loan_id,
                                  not_exist_loan_id, data)
        else:
            data = cls.re_replace(cls.pattern_not_exist_loan_id, '', data)
        return data

    @classmethod
    def replace_password(cls, data):
        pwd = str(do_user('Invest', 'pwd'))
        data = cls.re_replace(cls.pattern_password, pwd, data)
        return data

    @classmethod
    def replace_amount(cls, data):
        amount = '2000'
        data = cls.re_replace(cls.pattern_amount, amount, data)
        return data

    @classmethod
    def replace_amount_not_enough(cls, data):
        amount = str(do_conf('add_loan_api', 'amount'))
        data = cls.re_replace(cls.pattern_amount_not_enough, amount, data)
        return data

    @classmethod
    def replace_remain_amount(cls, data):
        if hasattr(DataReplace, 'remain_amount'):
            # 总金额-已投金额 = 需要满标时的投资金额
            amount = str(
                float(do_conf('add_loan_api', 'amount')) -
                getattr(DataReplace, 'remain_amount'))
            data = cls.re_replace(cls.pattern_amount_remain_amount, amount,
                                  data)
        else:
            data = cls.re_replace(cls.pattern_amount_remain_amount, '', data)
        return data

    @classmethod
    def register_login_parameters_data(cls, not_exist_phone, data):
        """注册与登录参数化"""
        data = cls.replace_not_exist_phone(not_exist_phone, data)
        data = cls.replace_exist_phone(data)
        return data

    @classmethod
    def recharge_parameters_data(cls, data):
        """充值的参数化"""
        data = cls.replace_invest_phone(data)
        data = cls.replace_no_login_phone(data)
        return data

    # add by linux超 at 2019.06.06
    @classmethod
    def add_parameters_data(cls, not_exist_loan_member_id, data):
        """加标的参数化"""
        data = cls.replace_loan_member_id(data)
        data = cls.replace_no_exist_loan_member_id(not_exist_loan_member_id,
                                                   data)
        return data

    @classmethod
    def invest_parameters_data(cls, data):
        """竞标接口的参数化(投资人已经登录标的存在且为竞标状态)"""
        data = cls.replace_exist_invest_id(data)
        data = cls.replace_exist_loan_id(data)
        data = cls.replace_not_exist_invest_id(data)
        data = cls.replace_password(data)
        data = cls.replace_amount(data)
        data = cls.replace_not_exist_loan_id(data)
        data = cls.replace_amount_not_enough(data)
        data = cls.replace_remain_amount(data)
        return data
Esempio n. 12
0
from common.SendRequests import request
from common.ParseConfig import do_conf
from common.RecordLog import log

# 审核标的


class AuditLoanApi(object):
    request = request  # 登录时的会话

    def audit_loan_api(self, method, url, data):
        response = self.request(method=method, url=url, data=data)
        return response

    def close(self):
        log.info('关闭添加标的请求...')
        self.request.close_session()


audit = AuditLoanApi()

if __name__ == '__main__':
    audit = AuditLoanApi()
    audit.audit_loan_api(method='post',
                         url=do_conf('URL', 'Host_Url') + '/member/login',
                         data={
                             "mobilephone": "18987560249",
                             "pwd": "123457"
                         })
    audit.request.close_session()
Esempio n. 13
0
class TestAddApi(Base):
    """加标接口"""
    test_data = do_excel.get_name_tuple_all_value(do_conf('SheetName', 'add'))

    def setUp(self):
        # 管理员登录加标
        login.login_api(method='post',
                        url=do_conf('URL', 'Host_Url') + '/member/login',
                        data={
                            "mobilephone": str(do_user('Admin',
                                                       'mobilephone')),
                            "pwd": (do_user('Admin', 'pwd'))
                        })

    @data(*test_data)
    def test_add(self, value):
        row = value.CaseId + 1  # 用例ID所在行号
        precondition = value.Precondition  # excel用例的前置条件
        title = value.Title  # 用例标题
        url = do_conf('URL', 'Host_Url') + value.URL  # 用例url
        request_method = value.Method  # 请求方法
        request_value = value.Data  # 请求参数
        select_sql = value.Sql  # 查询数据库中不存在的member id
        add_expected = HandleJson.json_to_python(value.Expected)  # 期望结果
        if precondition == '借款人用户ID不存在':
            not_exist_loan_member_id = str(
                int(self.mysql(select_sql)['Id']) - 1)
            request_value = add_parameters(not_exist_loan_member_id,
                                           request_value)
        else:
            request_value = add_parameters('', request_value)
        log.info('执行加标-测试用例"{}"开始'.format(title))
        response = request(request_method, url=url, data=request_value)
        actual_result = response.json()
        do_excel.write_cell(do_conf('SheetName', 'Add'), row,
                            do_conf('ExcelNum', 'Actual_Column'),
                            response.text)
        try:
            self.assertEqual(add_expected,
                             actual_result,
                             msg='测试{}失败'.format(title))
        except AssertionError as e:
            do_excel.write_cell(do_conf('SheetName', 'Add'),
                                row,
                                do_conf('ExcelNum', 'Result_Column'),
                                do_conf('Result', 'Fail'),
                                color=RED)
            log.error('{}-测试[{}] :Failed\nDetails:\n{}'.format(
                inspect.stack()[0][3], title, e))
            raise e
        else:
            do_excel.write_cell(do_conf('SheetName', 'Add'),
                                row,
                                do_conf('ExcelNum', 'Result_Column'),
                                do_conf('Result', 'Pass'),
                                color=GREEN)
            log.info('{}-测试[{}] :Passed'.format(inspect.stack()[0][3], title))
        log.info('执行加标-测试用例"{}"结束'.format(title))

    def tearDown(self):
        login.close()
Esempio n. 14
0
from config.config import (ENVIRONMENT, USER_PATH, REPORT_DIR, CASE_DIR)
from business.CreateUser import register
from common.ParseConfig import do_conf
from common.CreatePath import ModelsClass


def create_user_info_config_file(filename):
    """创建3个角色用户配置文件"""
    if not os.path.exists(filename):
        register.create_uer_info()



def tc_suite():
    """测试套件"""
    discover = unittest.defaultTestLoader.discover(CASE_DIR, 'test_*.py')
    return discover


if __name__ == '__main__':
    create_user_info_config_file(USER_PATH)
    report_dir = ModelsClass.create_dir(REPORT_DIR)
    report_file_name = ModelsClass.file_name('html')
    with open(report_dir + '/' + report_file_name, 'wb') as f:
        runner = HTMLTestRunnerNew.HTMLTestRunner(stream=f,
                                                  description=ENVIRONMENT,
                                                  title=do_conf('Project', 'PRO_NAME'),
                                                  tester=do_conf('Project', 'Tester'),
                                                  verbosity=2)
        runner.run(tc_suite())
Esempio n. 15
0
 def test_bid_loan(self, value):
     row = value.CaseId + 1  # 用例ID所在行号
     precondition = value.Precondition  # excel用例的前置条件
     title = value.Title  # 用例标题
     url = do_conf('URL', 'Host_Url') + value.URL  # 用例url
     request_method = value.Method  # 请求方法
     request_value = value.Data  # 请求参数
     select_sql = value.Sql
     audit_expected = HandleJson.json_to_python(value.Expected)  # 期望结果
     if precondition == '投资人不存在':
         not_exist_member_id = str(int(self.mysql(select_sql)['Id']) - 1)
         setattr(DataReplace, 'non_exist_member_id', not_exist_member_id)
         request_value = invest_parameters(request_value)
     elif precondition == '标的不存在':
         not_exist_loan_id = str(int(self.mysql(select_sql)['Id']) - 1)
         setattr(DataReplace, 'non_exist_loan_id', not_exist_loan_id)
         request_value = invest_parameters(request_value)
     elif precondition == '标的非竞标状态':
         # 设置标的为非竞标状态
         audit.audit_loan_api(method='post',
                              url=do_conf('URL', 'Host_Url') +
                              '/loan/audit',
                              data={
                                  "id": getattr(DataReplace, 'loan_id'),
                                  "status": 1
                              })
         request_value = invest_parameters(request_value)
     elif precondition == '标的金额不足':
         audit.audit_loan_api(method='post',
                              url=do_conf('URL', 'Host_Url') +
                              '/loan/audit',
                              data={
                                  "id": getattr(DataReplace, 'loan_id'),
                                  "status": 4
                              })
         request_value = invest_parameters(request_value)
     elif precondition == '标的满标':  # 这里不确定测试的对不对
         sql = invest_parameters(select_sql)
         remain_amount = float(
             self.mysql(sql=sql)["invest_amount"])  # 标的剩余金额
         setattr(DataReplace, 'remain_amount',
                 remain_amount)  # 给DataReplace添加一个剩余金额类属性
         request_value = invest_parameters(request_value)
         request(request_method, url=url, data=request_value)
     else:
         request_value = invest_parameters(request_value)
     log.info('执行竞标-测试用例"{}"开始'.format(title))
     response = request(request_method, url=url, data=request_value)
     actual_result = response.json()
     do_excel.write_cell(do_conf('SheetName', 'invest'), row,
                         do_conf('ExcelNum', 'Actual_Column'),
                         response.text)
     try:
         self.assertEqual(audit_expected,
                          actual_result,
                          msg='测试{}失败'.format(title))
     except AssertionError as e:
         do_excel.write_cell(do_conf('SheetName', 'invest'),
                             row,
                             do_conf('ExcelNum', 'Result_Column'),
                             do_conf('Result', 'Fail'),
                             color=RED)
         log.error('{}-测试[{}] :Failed\nDetails:\n{}'.format(
             inspect.stack()[0][3], title, e))
         raise e
     else:
         do_excel.write_cell(do_conf('SheetName', 'invest'),
                             row,
                             do_conf('ExcelNum', 'Result_Column'),
                             do_conf('Result', 'Pass'),
                             color=GREEN)
         log.info('{}-测试[{}] :Passed'.format(inspect.stack()[0][3], title))
     log.info('执行竞标-测试用例"{}"结束'.format(title))
Esempio n. 16
0
class TestBidLoanApi(Base):
    """竞标接口"""
    test_data = do_excel.get_name_tuple_all_value(
        do_conf('SheetName', 'invest'))

    @classmethod
    def setUpClass(cls):
        cls.mysql = HandleMysql()
        # 管理人员登录
        login.login_api(method='post',
                        url=do_conf('URL', 'Host_Url') + '/member/login',
                        data={
                            "mobilephone": str(do_user('Admin',
                                                       'mobilephone')),
                            "pwd": (do_user('Admin', 'pwd'))
                        })
        # 管理人加标
        add.add_loan_api(method='post',
                         url=do_conf('URL', 'Host_Url') + '/loan/add',
                         data={
                             "memberId": str(do_user('Invest', 'memberid')),
                             "title": "超哥专属标的",
                             "amount": 1000000,
                             "loanRate": 10,
                             "loanTerm": 3,
                             "loanDateType": 0,
                             "repaymemtWay": 4,
                             "biddingDays": 5
                         })
        sql = 'SELECT Id FROM loan WHERE MemberID={0} ORDER BY CreateTime DESC LIMIT 1;'.format(
            str(do_user('Invest', 'memberid')))
        loan_id = str(cls.mysql(sql=sql)['Id'])
        setattr(DataReplace, 'loan_id', loan_id)
        # 管理人审核
        audit.audit_loan_api(method='post',
                             url=do_conf('URL', 'Host_Url') + '/loan/audit',
                             data={
                                 "id": loan_id,
                                 "status": 4
                             })
        # 投资人登录
        login.login_api(method='post',
                        url=do_conf('URL', 'Host_Url') + '/member/login',
                        data={
                            "mobilephone": str(do_user('Invest',
                                                       'mobilephone')),
                            "pwd": (('Invest', 'pwd'))
                        })

    @data(*test_data)
    def test_bid_loan(self, value):
        row = value.CaseId + 1  # 用例ID所在行号
        precondition = value.Precondition  # excel用例的前置条件
        title = value.Title  # 用例标题
        url = do_conf('URL', 'Host_Url') + value.URL  # 用例url
        request_method = value.Method  # 请求方法
        request_value = value.Data  # 请求参数
        select_sql = value.Sql
        audit_expected = HandleJson.json_to_python(value.Expected)  # 期望结果
        if precondition == '投资人不存在':
            not_exist_member_id = str(int(self.mysql(select_sql)['Id']) - 1)
            setattr(DataReplace, 'non_exist_member_id', not_exist_member_id)
            request_value = invest_parameters(request_value)
        elif precondition == '标的不存在':
            not_exist_loan_id = str(int(self.mysql(select_sql)['Id']) - 1)
            setattr(DataReplace, 'non_exist_loan_id', not_exist_loan_id)
            request_value = invest_parameters(request_value)
        elif precondition == '标的非竞标状态':
            # 设置标的为非竞标状态
            audit.audit_loan_api(method='post',
                                 url=do_conf('URL', 'Host_Url') +
                                 '/loan/audit',
                                 data={
                                     "id": getattr(DataReplace, 'loan_id'),
                                     "status": 1
                                 })
            request_value = invest_parameters(request_value)
        elif precondition == '标的金额不足':
            audit.audit_loan_api(method='post',
                                 url=do_conf('URL', 'Host_Url') +
                                 '/loan/audit',
                                 data={
                                     "id": getattr(DataReplace, 'loan_id'),
                                     "status": 4
                                 })
            request_value = invest_parameters(request_value)
        elif precondition == '标的满标':  # 这里不确定测试的对不对
            sql = invest_parameters(select_sql)
            remain_amount = float(
                self.mysql(sql=sql)["invest_amount"])  # 标的剩余金额
            setattr(DataReplace, 'remain_amount',
                    remain_amount)  # 给DataReplace添加一个剩余金额类属性
            request_value = invest_parameters(request_value)
            request(request_method, url=url, data=request_value)
        else:
            request_value = invest_parameters(request_value)
        log.info('执行竞标-测试用例"{}"开始'.format(title))
        response = request(request_method, url=url, data=request_value)
        actual_result = response.json()
        do_excel.write_cell(do_conf('SheetName', 'invest'), row,
                            do_conf('ExcelNum', 'Actual_Column'),
                            response.text)
        try:
            self.assertEqual(audit_expected,
                             actual_result,
                             msg='测试{}失败'.format(title))
        except AssertionError as e:
            do_excel.write_cell(do_conf('SheetName', 'invest'),
                                row,
                                do_conf('ExcelNum', 'Result_Column'),
                                do_conf('Result', 'Fail'),
                                color=RED)
            log.error('{}-测试[{}] :Failed\nDetails:\n{}'.format(
                inspect.stack()[0][3], title, e))
            raise e
        else:
            do_excel.write_cell(do_conf('SheetName', 'invest'),
                                row,
                                do_conf('ExcelNum', 'Result_Column'),
                                do_conf('Result', 'Pass'),
                                color=GREEN)
            log.info('{}-测试[{}] :Passed'.format(inspect.stack()[0][3], title))
        log.info('执行竞标-测试用例"{}"结束'.format(title))

    @classmethod
    def tearDownClass(cls):
        login.close()
        cls.mysql.close()