Пример #1
0
class GetData:
    '''专门来读取路径的值'''

    base_path = os.path.split(os.path.split(os.path.realpath(__file__))[0])[
        0]  #G:\python3_code\sublime_text03\14SoftwareTest\APITest\qcd_ApiTest
    # 测试用例路径
    case_path = os.path.join(base_path, 'test_case', 'test_case.xlsx')
    # 测试报告路径
    report_path = os.path.join(base_path, 'test_result', 'report',
                               'test_api.html')

    # 配置文件路径
    config_path = os.path.join(base_path, 'conf', 'webservice.conf')

    # 日志文件路径
    log_path = os.path.join(base_path, 'test_result', 'log', 'test_log.txt')

    # 未注册手机号
    no_reg_tel = pd.read_excel(case_path, sheet_name='init').ix[0, 1]
    # 未用过的手机号
    reg_name = GetRegName.get_reg_name()

    #获取ip
    ip = GetIp.get_ip()
    # 接口url地址
    sms_service_url = ReadConfig.read_config(case_config_path, 'URL',
                                             'sms_service')
    finance_user_info_url = ReadConfig.read_config(config_path, 'URL',
                                                   'finance_user_info')
Пример #2
0
 def do_mysql(self, sql, db=1):
     '''
     :param sql: SQL语句
     :param db: 选择的数据库
     :return:关于返回值:如果只有单个值单元素,返回单个值,如:1;多元素,返回列表,如:[1, 2, 3]
              如果多个值单元素。返回列表,如:[1, 2, 3];多元素,返回嵌套列表,如:[[33, '支付宝'], [35, '天猫商城']]
     '''
     config = eval(ReadConfig().read_config(db_conf_path, 'DATABASE',
                                            'config'))
     config['database'] = ReadConfig().read_config(db_conf_path, 'DATABASE',
                                                   'database%s' % db)
     cnn = pymysql.connect(**config)
     cursor = cnn.cursor()
     try:
         cursor.execute(sql)
         result = cursor.fetchall()
         if len(result) == 1:
             if len(result[0]) == 1:
                 new_result = result[0][0]
             else:
                 new_result = list(result[0])
         else:
             new_result = []
             for i in result:
                 if len(i) == 1:
                     new_result.append(i[0])
                 else:
                     new_result.append(list(i))
         return new_result
     except Exception as e:
         self.logger.error('查询数据出错了,报错是:%s' % e)
     finally:
         cursor.close()
         cnn.close()
Пример #3
0
    def my_log(self, level, msg):
        my_logger = logging.getLogger(ReadConfig().get('logs', 'logger_name'))
        my_logger.setLevel(ReadConfig().get('logs', 'logger_level'))
        formatter = logging.Formatter(ReadConfig().get('logs', 'formatter'))
        aa_handle = logging.StreamHandler()
        aa_handle.setLevel(ReadConfig().get('logs', 'handle_level'))
        bb_handle = logging.FileHandler(contants.logs_path, encoding='utf-8')
        bb_handle.setLevel(ReadConfig().get('logs', 'file_level'))
        aa_handle.setFormatter(formatter)
        bb_handle.setFormatter(formatter)
        my_logger.addHandler(aa_handle)
        my_logger.addHandler(bb_handle)
        if level == "DEBUG":
            my_logger.debug(msg)
        if level == "INFO":
            my_logger.info(msg)
        if level == "WARNING":
            my_logger.warning(msg)
        if level == "ERROR":
            my_logger.error(msg)
        if level == "CRITICAL":
            my_logger.critical(msg)

        my_logger.removeHandler(aa_handle)
        my_logger.removeHandler(bb_handle)
Пример #4
0
    def my_log(self, level, msg):
        # 创建收集器
        my_logger = logging.getLogger(ReadConfig().get('LOGS', 'logger_name'))
        my_logger.setLevel(ReadConfig().get('LOGS', 'collect_level'))
        #输出格式
        formatter = logging.Formatter(ReadConfig().get('LOGS',
                                                       'export_formatter'))

        #控制台输出设置
        ch = logging.StreamHandler()
        ch.setLevel(ReadConfig().get('LOGS', 'console_handler_level'))
        ch.setFormatter(formatter)

        fh = logging.FileHandler(contants.log_path, encoding='utf-8')
        fh.setLevel(ReadConfig().get('LOGS', 'file_handler_level'))
        fh.setFormatter(formatter)

        my_logger.addHandler(ch)
        my_logger.addHandler(fh)

        if level == 'DEBUG':
            my_logger.debug(msg)
        elif level == 'INFO':
            my_logger.info(msg)
        elif level == 'ERROR':
            my_logger.error(msg)
        elif level == 'WARNING':
            my_logger.warning(msg)
        elif level == 'CRITICAL':
            my_logger.critical(msg)

        my_logger.removeHandler(ch)
        my_logger.removeHandler(fh)
Пример #5
0
    def do_excel(self):

        flag = ReadConfig().read_config(pro_path.conf_path, 'TESTCASE', 'flag')
        case_id_list = ReadConfig().read_config(pro_path.conf_path, 'TESTCASE', 'case_id_list')
        wb = load_workbook(self.file_path)#打开工作簿
        sheet = wb[self.sheet_name]#获取表单
        tel = self.get_tel()#从Excel里获取初始化手机号
        self.update_tel(tel+1)#获取完毕之后  更新初始化的手机号码

        self.used_tel(tel)#调用函数  存储手机号码

        test_data=[] #所有的测试数据放到一个列表里
        for i in range(2,sheet.max_row+1):
            sub_data = {}#每一行数据存入到字典里
            sub_data['CaseId'] = sheet.cell(i,1).value
            sub_data['Title'] = sheet.cell(i, 2).value
            sub_data['Method'] = sheet.cell(i, 3).value
            sub_data['URL'] = sheet.cell(i, 4).value
            sub_data['Param'] = sheet.cell(i, 5).value #请求参数
            if sub_data['Param'].find('${tel}')!=-1:#find函数  如果存在,
                sub_data['Param'].replace('${tel}',str(tel))

            sub_data['ExpectedResult'] = sheet.cell(i, 6).value
            test_data.append(sub_data)#添加数据到列表里面
        #根据配置文件的开关来决定运行哪些测试用例
        if flag=='on':#意味着执行所有的用例
            final_data = test_data
        else:#执行指定列表里面的数据
            final_data=[]#用来存储最后要执行的用例
            for i in eval(case_id_list):
                final_data.append(test_data[i-1])#注意这里的写法?
        return final_data#返回最终的数据
Пример #6
0
 def __init__(self):
     host = ReadConfig().get('mysql','host')
     post = ReadConfig().get_int('mysql', 'post')   #post是一个数值,用getint()方法获取
     usr = ReadConfig().get('mysql', 'usr')
     pwd = ReadConfig().get('mysql', 'pwd')
     try:
         self.db = pymysql.connect(host=host, user=usr, password=pwd, port=post,cursorclass=pymysql.cursors.DictCursor)
     except ConnectionRefusedError as e:
         print('mysql数据库连接错误')
         raise e
Пример #7
0
    def test_login(self, case):

        max_mobilephone = str(
            int(self.mysql_tool.fetch_one(self.sql)['MobilePhone']) +
            1)  # 查询数据库最大手机号+1
        ReadConfig().write_value('MobilePhone', 'max_phone',
                                 max_mobilephone)  # 最大手机号写入配置文件
        my_logger.info('目前正在执行第{0}条用例:{1}'.format(case.case_id, case.title))
        my_logger.info('----------开始检查url请求地址--------')
        url = ReadConfig().get('test_api', 'url_pre') + case.url
        my_logger.info('url接口地址是:{0}'.format(url))
        #将excel读取出来的字符串转换成字典
        my_logger.info('----------开始检查请求参数------------')
        data = case.data
        data = json.loads(SeekReplace().seek_replace(data))
        my_logger.info('开始检查请求参数:{0}'.format(data))
        resp = HttpRequest(method=case.method, url=url, data=data)
        try:
            self.assertEqual(case.expected, resp.get_text())
            Test_result = 'Pass'
        except AssertionError as e:
            Test_result = 'Failed'
            print('断言出错了%s:', e)
            raise e

        my_logger.info('本条用例的测试结果:{}'.format(Test_result))

        # 数据验证

        if int(resp.get_json()['code']) == 10001:  # 注册成功,数据库查询有记录
            sql = 'SELECT * FROM future.member where MobilePhone="{0}"'.format(
                max_mobilephone)
            expected = max_mobilephone
            resp = self.mysql_tool.fetch_one(sql)
            if resp is not None:  # 判断查找数据库数据非空
                self.assertEqual(expected, resp['MobilePhone'])
                my_logger.info('注册成功,数据库查询正确')
            else:  # 如果查询为空,
                my_logger.info('注册成功,数据库查询无数据')
                raise AssertionError

        else:  # 注册不成功,数据库查询为空
            sql = 'SELECT * FROM future.member where MobilePhone="{0}"'.format(
                max_mobilephone)
            member = self.mysql_tool.fetch_one(sql)
            if member is None:  # 如果查询数据库为空
                expected = None
                self.assertEqual(expected, member)
                my_logger.info('注册不成功,数据库查询无增加数据')
            else:  # 查询数据库非空
                my_logger.info('注册不成功,数据库查询增加数据')
                raise AssertionError
Пример #8
0
    def __init__(self, sec_name):
        r = ReadConfig()
        self.conf = r.getValue(sec_name)

        self.connect = pymysql.Connect(host=self.conf['url'],
                                       port=self.conf['port'],
                                       user=str(self.conf['username']),
                                       passwd=str(self.conf['password']),
                                       db=self.conf['db'],
                                       charset='utf8')

        self.cursor = self.connect.cursor()
        logs.info('成功连接数据库')
Пример #9
0
 def __init__(self):
     rc = ReadConfig()
     self.to_addr = rc.get_db("sendemail", "to_addr")  #收信方
     self.from_addr = rc.get_db("sendemail", "from_addr")  #发信方
     self.password = rc.get_db("sendemail", "password")  #发信密码
     self.email_type = self.to_addr.split("@")[1]
     self.smtp_server = "smtp." + self.email_type
     if self.email_type == "qq.com":
         self.port = 465
     elif self.email_type == "163.com":
         self.port = 25
     else:
         print("请配置目标邮箱类型的端口号!")
Пример #10
0
    def read_data(self, section):  #section 配置文件里面的片段名 可以根据你的指定来执行具体的用例
        '''从Excel读取数据,有返回值'''
        #从配置文件里面控制读取哪些用例
        case_id = ReadConfig(project_path.conf_path).get_data(
            section, 'case_id')
        wb = load_workbook(self.file_name)
        sheet = wb[self.sheet_name]

        #唯一的要求是什么?每一行数据要在一起 {} []
        #如何把每一行的数据存到一个空间里面去? []
        #开始读取数据
        #获取存在excel里面的电话号码
        tel = self.get_tel()

        test_data = []
        for i in range(2, sheet.max_row + 1):
            row_data = {}
            row_data['CaseId'] = sheet.cell(i, 1).value
            row_data['Module'] = sheet.cell(i, 2).value
            row_data['Title'] = sheet.cell(i, 3).value
            row_data['Path'] = sheet.cell(i, 4).value
            row_data['Method'] = sheet.cell(i, 5).value
            row_data['Params'] = sheet.cell(i, 6).value
            row_data['sql'] = sheet.cell(i, 7).value  #加上去的sql语句
            row_data['ExpectedResult'] = sheet.cell(i, 8).value
            test_data.append(row_data)
        wb.close()
        final_data = []  #空列表 存储最终的测试用例数据
        if case_id == 'all':  #如果case_id==all 那就获取所有的用例数据
            final_data = test_data  #把测试用例赋值给final_data这个变量
        else:  #否则 如果是列表 那就获取列表里面指定id的用例的数据
            for i in case_id:  #遍历case_id 里面的值
                final_data.append(test_data[i - 1])  #?对应关系??
        return final_data
Пример #11
0
 def read_data(self):
     """读取excel内容,有返回值"""
     case_id = ReadConfig(project_path.conf_path).get_data(
         'CASE', 'case_id')
     wb = load_workbook(self.file_name)
     sheet = wb[self.sheet_name]
     test_data = []
     for i in range(2, sheet.max_row + 1):
         row_data = {}
         row_data['CaseID'] = sheet.cell(i, 1).value
         row_data['Module'] = sheet.cell(i, 2).value
         row_data['Title'] = sheet.cell(i, 3).value
         row_data['Method'] = sheet.cell(i, 4).value
         row_data['Url'] = sheet.cell(i, 5).value
         row_data['Params'] = sheet.cell(i, 6).value
         row_data['ExpectedResult'] = sheet.cell(i, 7).value
         test_data.append(row_data)
     wb.close()
     final_data = []  # 存储最终的测试数据
     if case_id == 'all':  # 如果等于成立,获取所有的用例数据
         final_data = test_data
     else:  # 等于all不成立,就获取指定case_id的数据
         for i in case_id:
             final_data.append(test_data[i - 1])
     return final_data
Пример #12
0
 def __init__(self):
     #数据库链接配置
     #数据库连接
     db_config = ReadConfig(config_file).read_config('DB_CONFIG', 'config')
     self.cnn = connect(**eval(db_config))
     #建立游标
     self.cur = self.cnn.cursor()
Пример #13
0
 def __init__(self):
     self.excel_path = ReadConfig().read_config_keyword("excel_path_1")
     self.book = xlrd.open_workbook(self.excel_path)
     self.table = self.book.sheet_by_index(0)
     self.excel_copy = ""
     self.copy_book = ""
     self.copy_table = ""
Пример #14
0
    def test_list(self, case):
        my_logger.info('正在执行第{0}条用例{1}'.format(case.case_id, case.title))
        url = ReadConfig().get('test_api', 'url_pre') + case.url
        my_logger.info('检查url接口地址:{0}'.format(url))
        if hasattr(Context, 'cookies'):
            cookies = getattr(Context, 'cookies')
        else:
            cookies = None
        my_logger.info('---------开始http请求-----------')
        resp = HttpRequest(method=case.method,
                           url=url,
                           data=case.data,
                           cookies=cookies)
        my_logger.info('---------结束http请求-----------')
        my_logger.info('请求接口结果是:{0}'.format(resp.get_json()))

        try:
            self.assertEqual(case.expected, int(resp.get_json()['code']))
            Test_result = 'Pass'
        except AssertionError as e:
            Test_result = 'Failed'
            my_logger.error('出错了{0}'.format(e))
            raise e

        my_logger.info('本条用例执行结果:{0}'.format(Test_result))
        # 数据验证

        if resp.get_json()['code'] == '10001':
            seek_list = 'SELECT COUNT(Id) FROM future.member ;'
            actual = mysql.fetch_one(seek_list)['COUNT(Id)']
            expected = len(resp.get_json()['data'])
            self.assertEqual(expected, actual)
            my_logger.info('请求返回用户列表记录数与查询数据库member表记录数一致')
Пример #15
0
    def test_get_invest_record(self, case):
        my_logger.info('正在执行第{0}条用例{1}'.format(case.case_id, case.title))
        url = ReadConfig().get('test_api', 'url_pre') + case.url
        my_logger.info('检查url接口地址:{0}'.format(url))
        if hasattr(Context, 'cookies'):
            cookies = getattr(Context, 'cookies')
        else:
            cookies = None

        data = DoRegex().replace(case.data)
        data = json.loads(data)

        my_logger.info('---------开始http请求-----------')
        resp = HttpRequest(method=case.method, url=url, data=data, cookies=cookies)
        my_logger.info('---------结束http请求-----------')
        my_logger.info('请求接口结果是:{0}'.format(resp.get_json()))

        try:
            self.assertEqual(case.expected,int(resp.get_json()['code']))
            Test_result = 'Pass'
        except AssertionError as e:
            Test_result = 'Failed'
            my_logger.error('出错了{0}'.format(e))
            raise e

        my_logger.info('本条用例执行结果:{0}'.format(Test_result))

        # 数据验证
        # 如果获取用户投资列表成功,查询返回列表记录数与查询数据库中记录数是否一致
        if resp.get_json()['msg'] == '获取用户投资列表成功':
            seek_invest_record = 'SELECT COUNT(Id) FROM future.invest where MemberID={0};'.format(getattr(Context, 'memberId'))
            actual = mysql.fetch_one(seek_invest_record)['COUNT(Id)']
            expected = len(resp.get_json()['data'])
            self.assertEqual(expected, actual)
            my_logger.info('请求返回获取用户所有投资记录数与查询数据库Invest表中记录数一致')
Пример #16
0
    def do_mysql(self, sql):
        # 数据库连接信息
        config = eval(ReadConfig().read_config(file_path.db_config_path, 'DB',
                                               'config'))

        # 产生数据库连接
        conn = mysql.connector.connect(**config)

        # 获取数据库操作权限

        cursor = conn.cursor()

        # sql = 'select * form coupon'

        # 执行
        cursor.execute(sql)

        # 获取数据

        res = cursor.fetchall()

        # 关闭
        cursor.close()

        conn.close()
        return res
Пример #17
0
 def test_profile(self, case_name, path, data, method):
     base_url = ReadConfig().get_base_url()
     new_url = base_url + path
     resp = ConfigHttp().run_main(method=method, url=new_url, data=data)
     # 断言状态码:200
     self.assertEqual(resp.status_code, 200)
     # 将响应内容转为字典
     body = resp.json()
     # 将字符串转换为字典
     data = eval(data)
     instrument = data["instrumentName"].lower()
     product_beginner = "course." + instrument + ".beginner"
     product_intermediate = "course." + instrument + ".intermediate"
     # mongodb查询语句
     beginner = {
         "_id": ObjectId(data["userId"]),
         "courseProductId": product_beginner,
         "transactionType": "course"
     }
     intermediate = {
         "_id": ObjectId(data["userId"]),
         "courseProductId": product_intermediate,
         "transactionType": "course"
     }
     result_1 = client.search_to_boolean("transactions", beginner)
     result_2 = client.search_to_boolean("transactions", intermediate)
     # 断言用户的购买状态
     self.assertEqual(
         body['payload']['isStudyPlanProductPurchased']['Primary'],
         result_1)
     self.assertEqual(
         body['payload']['isStudyPlanProductPurchased']['Intermediate'],
         result_2)
Пример #18
0
 def get_data(cls, wbname):
     mode = eval(ReadConfig().read_config(read_path.config_path, 'MODE',
                                          'mode'))  #读取配置文件,返回为一个字典
     wb = load_workbook(wbname)
     test_data = []  #存放收集的每一条用例组合而成的字典
     for key in mode:  #遍历mode里的key值
         sheet = wb[key]
         titles = DoExcel().get_title(wbname, key)
         #mode等于all时读取该sheet下所有用例
         if mode[key] == 'all':
             for j in range(2, sheet.max_row + 1):  #遍历除表头行的其他行
                 test_lists = {}  #存放取出的表格数据组合的key,value值
                 for i in range(1, sheet.max_column + 1):  #遍历每一行
                     # 替换有noreg_tel的参数
                     if str(sheet.cell(j,
                                       i).value).find('${noreg_tel}') != -1:
                         tel = getattr(GetData, 'noreg_tel')  # 利用反射获取初始值
                         # 用初始值替换
                         test_lists[titles[i - 1]] = str(
                             sheet.cell(j, i).value).replace(
                                 '${noreg_tel}', str(tel))
                         # 更新未注册号码
                         DoInitData().updata_initdata(1, 1, int(tel) + 2)
                     # 替换有noreg_tel1的参数
                     elif str(sheet.cell(
                             j, i).value).find('${noreg_tel1}') != -1:
                         tel = int(getattr(GetData, 'noreg_tel')) + 1
                         test_lists[titles[i - 1]] = str(
                             sheet.cell(j, i).value).replace(
                                 '${noreg_tel1}', str(tel))
                     else:
                         test_lists[titles[i - 1]] = sheet.cell(j, i).value
                 test_data.append(test_lists)
         #遍历某个sheet下某几条用例
         else:
             for case_id in mode[key]:  #遍历mode里的value值
                 test_lists = {}
                 for i in range(1, sheet.max_column + 1):  #遍历列
                     if str(sheet.cell(case_id + 1,
                                       i).value).find('${noreg_tel}') != -1:
                         tel = getattr(GetData, 'noreg_tel')
                         test_lists[titles[i - 1]] = str(
                             sheet.cell(case_id + 1, i).value).replace(
                                 '${noreg_tel}', str(tel))  #组合字典
                         DoInitData().updata_initdata(1, 1, int(tel) + 2)
                     elif str(sheet.cell(
                             case_id + 1,
                             i).value).find('${noreg_tel1}') != -1:
                         tel = int(getattr(GetData, 'noreg_tel')) + 1
                         test_lists[titles[i - 1]] = str(
                             sheet.cell(case_id + 1, i).value).replace(
                                 '${noreg_tel1}', str(tel))
                     else:
                         test_lists[titles[i - 1]] = sheet.cell(
                             case_id + 1, i).value
                 test_data.append(test_lists)
     # 替换除loanid以外的所有变量
     test_data = eval(DoRegx.do_regx(str(test_data)))
     return test_data  #返回组装的测试用例
Пример #19
0
 def setUp(self):  #获取期望结果放在setUp,充值前先取出leavemount
     sql = ReadConfig().get('SQL', 'LeaveAmount')
     global leavemount1
     global mysql
     mysql = MysqlTool()
     leavemount1 = mysql.fetch_one(sql)['LeaveAmount']
     mylogger.info('充值前账户余额:{0}'.format(leavemount1))
     return leavemount1
Пример #20
0
 def commit_mysql(self, sql, db=1):
     config = eval(ReadConfig().read_config(db_conf_path, 'DATABASE',
                                            'config'))
     config['database'] = ReadConfig().read_config(db_conf_path, 'DATABASE',
                                                   'database%s' % db)
     cnn = pymysql.connect(**config)
     cursor = cnn.cursor()
     try:
         cursor.execute(sql)
         cnn.commit()
     except Exception as e:
         self.logger.error('数据库执行失败')
         cnn.rollback()
         raise e
     finally:
         cursor.close()
         cnn.close()
Пример #21
0
    def setUp(self):

        self.mysql = MysqlTool()
        # 投资前用户余额
        self.seek_mount = ReadConfig().get('SQL', 'LeaveAmount')
        self.leaveamount1 = self.mysql.fetch_one(
            self.seek_mount)['LeaveAmount']  # 投资前余额
        my_logger.info('投资前用户账户余额:{0}'.format(self.leaveamount1))
Пример #22
0
 def cnn_db(cls,sql):
     ReadConfig().read_config(config_path, 'DB', 'db_config')
     #数据库配置
     db_config=eval(ReadConfig().read_config(config_path, 'DB', 'db_config'))
     #创建一个数据库连接
     cnn=pymysql.Connect(**db_config)
     #创建游标
     cursor=cnn.cursor()
     #写一个sql语句----字符串
     qurey_sql=sql
     #执行语句
     cursor.execute(qurey_sql)
     #获取结果 打印结果
     res=cursor.fetchone()    #结果为一个元组
     # res1=cursor.fetchall()     #结果为包含多个元组的元组
     #关闭游标
     cursor.close()
     return res
Пример #23
0
class Context:
    config = ReadConfig()
    normal_phone = config.get('basic', 'normal_phone')  # 从配置文件读取放在context中
    pwd = config.get('basic', 'pwd')
    memberId = config.get('basic', 'memberId')
    password = config.get('basic', 'password')
    admin_user = config.get('basic', 'admin_user')
    admin_pwd = config.get('basic', 'admin_pwd')
    borrow_member_id = config.get('basic', 'borrow_member_id')
Пример #24
0
 def __init__(self):
     host, user, password, port, database = [
         v for k, v in ReadConfig("host").read_config_items().items()
     ]
     self.conn = pymysql.connect(host=host,
                                 user=user,
                                 password=password,
                                 port=int(port),
                                 database=database)
     self.cursor = self.conn.cursor()
Пример #25
0
 def tearDown(self):
     sql = ReadConfig().get('SQL', 'LeaveAmount')
     leavemount2 = mysql.fetch_one(sql)['LeaveAmount']
     mysql.close()
     mylogger.info('充值后账户余额:{0}'.format(leavemount2))
     if resp.get_json()['msg'] == '充值成功':
         recharge_mount = data['amount']
         mylogger.info('请求参数中充值金额:{0}'.format(recharge_mount))
         add_leavemount = leavemount2 - leavemount1  #充值成功增加余额
         mylogger.info('账户余额增加金额:{0}'.format(add_leavemount))
Пример #26
0
class Context:
    config = ReadConfig()
    normal_user = config.get("basic", "normal_user")  # 类变量
    normal_pwd = config.get("basic", "normal_pwd")
    admin_user = config.get("basic", "admin_user")  # 类变量
    admin_pwd = config.get("basic", "admin_pwd")
    loan_member_id = config.get("basic", "loan_member_id")
    normal_member_id = config.get("basic", "normal_member_id")

    loan_id = config.get("basic", "loan_member_id")
    loan_member_id_1 = config.get("basic", "loan_member_id_1")
Пример #27
0
class MysqlUtil():
    host = ReadConfig().get_value("datebase", "host")
    user = ReadConfig().get_value("datebase", "user")
    password = ReadConfig().get_value("datebase", "password")
    mysql = pymysql.connect(host=host, user=user, password=password, port=3306)
    cursor = mysql.cursor()  #在此新建一个查询页面,调用fetch_one函数可进行多次查询

    def fetch_one(self, sql):
        self.cursor.execute(sql)
        result = self.cursor.fetchone()
        return result

    def fetch_all(self, sql):
        self.cursor.execute(sql)
        results = self.cursor.fetchall()
        return

    def close(self):
        self.cursor.close()
        self.mysql.close()
Пример #28
0
    def __init__(self):
        read_config = ReadConfig()
        self.in_level = read_config.get_value('log', 'in_level')
        self.out_level = read_config.get_value('log', 'out_level')
        self.file_level = read_config.get_value('log', 'file_level')
        self.format = read_config.get_value('log', 'formatter')
        self.file_path = contants.log_dir

        # 收集器 -----创建一个日志收集器
        self.my_logger = logging.getLogger(
            'python')  # getLogger 是个函数,必须传一个参数,作为自己的日志收集器的名字,否则还是会用root logger
        self.my_logger.setLevel(
            self.in_level
        )  # 给日志收集器设置level   (相当于第一次过滤)  设置了日志收集器的level,上面加不加名字都可以。但是一般还是要加上名字

        # 输出格式   Formatter 是个类  规定日志输出的格式
        self.formatter = logging.Formatter(self.format)

        # 输出渠道 -----指定输出渠道
        self.ch = logging.StreamHandler()  # 创建一个输出到控制台的渠道
        self.ch.setLevel(self.out_level)  # 给自己设置的渠道设置level  (相当于第二次过滤)
        self.ch.setFormatter(self.formatter)

        # 输出渠道 -----输出到指定文件  文件路径 绝对路径和相对路径都可以
        self.fh = logging.FileHandler(
            self.file_path, encoding='utf-8')  # 指定参数,默认a模式。有文件,追加。没文件,新建
        self.fh.setLevel(self.file_level)
        self.fh.setFormatter(self.formatter)
Пример #29
0
    def test_add(self, case):
        global Cookies
        my_logger.info('正在执行第{0}条用例{1}'.format(case.case_id, case.title))
        url = ReadConfig().get('test_api', 'url_pre') + case.url
        my_logger.info('检查url接口地址:{0}'.format(url))
        data = DoRegex().replace(case.data)
        data = json.loads(data)
        my_logger.info('检查请求参数{0}'.format(data))
        my_logger.info('---------开始http请求-----------')
        resp = HttpRequest(method=case.method,
                           url=url,
                           data=data,
                           cookies=Cookies)
        my_logger.info('---------结束http请求-----------')
        my_logger.info('请求接口结果是:{0}'.format(resp.get_json()))
        try:
            self.assertEqual(case.expected, int(resp.get_json()['code']))
            Test_result = 'Pass'
        except AssertionError as e:
            Test_result = 'Failed'
            my_logger.error('出错了,{0}'.format(e))
            raise e

        if resp.get_cookie():
            Cookies = resp.get_cookie()

        my_logger.info('执行本条用例测试结果:{0}'.format(Test_result))

        # 数据验证
        # 当加标成功,根据借款人Id查询数据库load表是否有一条项目记录
        if resp.get_json()['msg'] == '加标成功':
            expected = case.data
            seek_load_sql = 'select * from future.loan where MemberID={0} ORDER BY CreateTime DESC;'.format(
                Context.borrow_member_id)
            loan = self.mysql.fetch_one(seek_load_sql)
            if loan:  # 查询标的记录非空
                actual = {
                    'memberId': str(loan['MemberID']),
                    'title': loan['Title'],
                    'amount': int(loan['Amount']),
                    'loanRate': float(loan['LoanRate']),
                    'loanTerm': loan['LoanTerm'],
                    'loanDateType': loan['LoanDateType'],
                    'repaymemtWay': loan['RepaymemtWay'],
                    'biddingDays': loan['BiddingDays']
                }
                self.assertDictEqual(expected, actual)
                my_logger.info('加标成功!查询load表新增一条项目记录')
            else:  # 如果查询标的记录为空,测试不通过
                raise AssertionError
Пример #30
0
 def do_mysql(self, sql, data):
     config = eval(ReadConfig().read_config(project_path.db_conf_path,
                                            'DATABASE', 'config'))
     cnn = mysql.connector.connect(**config)
     cursor = cnn.cursor()
     try:
         cursor.execute(sql, data)
         result = cursor.fetchone()
         return result
     except Exception as e:
         logger.error('查询数据出错了,报错是:%s' % e)
     finally:
         cursor.close()
         cnn.close()