def __init__(self): # 建立连接,使用cursor()方法获取操作游标 conf_data=ReadConfig() self.mysql = pymysql.connect(host=conf_data.get_value('db','host'), user=conf_data.get_value('db','user'), password=conf_data.get_value('db','password'), port=conf_data.get_int('db','port')) self.cursor = self.mysql.cursor()
def __init__(self): host = ReadConfig().get('mysql', 'host') port = ReadConfig().get_int('mysql', 'port') user = ReadConfig().get('mysql', 'user') pwd = ReadConfig().get('mysql', 'pwd') try: self.db = pymysql.connect(host=host, user=user, password=pwd, port=port, cursorclass=pymysql.cursors.DictCursor ) # cursorclass设置查询后返回字典格式 except ConnectionError as e: raise e
def test_user_auth(self, case): my_logger.info('正在执行第{}条用例:{}'.format(case.case_id, case.title)) my_logger.info('-----------开始检查url地址-------------') url = ReadConfig().get('test_api', 'url_pre') + case.url my_logger.info('请求url:{}'.format(url)) data = DoRegex().replace(case.data) data = json.loads(data) my_logger.info('-----------开始检查参数-------------') my_logger.info('请求参数:{}'.format(data)) res = WebserviceRequest(url).get_result(case.port_name, data) time.sleep(60) my_logger.info('请求结果:{}'.format(res)) try: self.assertEqual(case.expected, res['retInfo']) do_excel.bace_write_by_case_id('verifiedUserAuth', case.case_id, str(res), 'success') Test_result = 'pass' except AssertionError as e: my_logger.error('出错了,{}'.format(e)) do_excel.bace_write_by_case_id('verifiedUserAuth', case.case_id, str(res), 'fail') Test_result = 'fail' raise e except Exception as e: raise e my_logger.info('本条用例测试结果:{}'.format(Test_result)) # 如果发送短信验证码成功 if res['retCode'] == '0' and case.port_name == 'sendMCode': sql_code = 'SELECT Fverify_code FROM sms_db_20.t_mvcode_info_3 where Fmobile_no={0};'.format( getattr(Context, 'normal_mobile')) verify_code = DoMysql().fetch_one(sql_code)['Fverify_code'] if verify_code: # 如果查到验证码就放入上下文 setattr(Context, 'verify_code', verify_code)
class MyLog: log_dir = os.path.join(project_path.log_dir, get_dir()) info_path = os.path.join(log_dir,'info.log') error_path = os.path.join(log_dir, 'error.log') # 定义输出格式 formatter = logging.Formatter(ReadConfig().get('LOG', 'formatter')) # 定义控制台渠道 ch = logging.StreamHandler() ch.setLevel(ReadConfig().get('LOG', 'console_leave')) ch.setFormatter(formatter) # 定义info级别文件输出渠道 info_handler = logging.handlers.RotatingFileHandler(info_path, maxBytes=10*1024*1024, backupCount=3, encoding='utf-8') info_handler.setLevel('INFO') info_handler.setFormatter(formatter) # 定义error级别文件输出渠道 error_handler = logging.handlers.RotatingFileHandler(error_path, maxBytes=10*1024*1024, backupCount=3, encoding='utf-8') error_handler.setLevel('ERROR') error_handler.setFormatter(formatter) # 定义报表渠道 report_handler = logging.StreamHandler(HTMLTestRunnerNew.stdout_redirector) report_handler.setLevel(ReadConfig().get('LOG', 'report_leave')) report_handler.setFormatter(formatter) @staticmethod def debug(msg): add_handler('debug') logger.debug(msg) remove_handler('debug') @staticmethod def info(msg): add_handler('info') logger.info(msg) remove_handler('info') @staticmethod def error(msg): add_handler('error') logger.error(msg, exc_info=True) remove_handler('error')
def request(self,method,url,data): conf_data = ReadConfig() conf_url = conf_data.get_value('URL', 'pro_url') full_url = conf_url + url method=method.upper() #将方法都转换成大写 if data is not None and type(data)==str: #把excel中的data转换成字典 data=eval(data) #如果是字符串就转成字典 if method=='GET': resp = self.session.request(method,url=full_url,params=data) logger.info('response :{0}'.format(resp.text)) return resp elif method=='POST': resp = self.session.request(method, url=full_url, params=data) logger.info('response :{0}'.format(resp.text)) return resp else: logger.error('不支持此请求方法')
class Context: rf = ReadConfig() client_ip = rf.get('basic', 'client_ip') tmpl_id = rf.get('basic', 'tmpl_id') true_name = rf.get('basic', 'true_name') normal_mobile = mobile_phone.creat_mobile() user_id = random_string.create_str()
def test_register(self, case): my_logger.info('正在执行第{}条用例:{}'.format(case.case_id, case.title)) my_logger.info('-----------开始检查url地址-------------') url = ReadConfig().get('test_api', 'url_pre') + case.url my_logger.info('请求url:{}'.format(url)) # 因注册的用户名不能重复,做随机处理 last_user_id = random_string.create_str() setattr(Context, 'user_id', last_user_id) # 因测试验证码超时需要新的手机号验证 if case.title == '发送短信验证码用于超时': normal_mobile = mobile_phone.creat_mobile() setattr(Context, 'normal_mobile', normal_mobile)
def test_send_Mcode(self, case): my_logger.info('正在执行第{}条用例:{}'.format(case.case_id, case.title)) my_logger.info('-----------开始检查url地址-------------') url = ReadConfig().get('test_api', 'url_pre') + case.url my_logger.info('请求url:{}'.format(url)) data = DoRegex().replace(case.data) data = json.loads(data) my_logger.info('-----------开始检查请求参数-------------') my_logger.info('请求参数:{}'.format(data)) try: resp = WebserviceRequest(url).get_result(case.port_name, data) time.sleep(60) my_logger.info('请求接口结果:{}'.format(resp)) if resp['retCode'] == '0': self.assertEqual(case.expected, resp['retInfo']) do_excel.bace_write_by_case_id('sendMcode', case.case_id, str(resp), 'success') Test_result = 'pass' # 数据验证 sql = 'SELECT * FROM sms_db_20.t_mvcode_info_3 where Fmobile_no={};'.format( getattr(Context, 'mobile')) seek_data = self.do_mysql.fetch_one(sql) actual = { "client_ip": seek_data['Fclient_ip'], "tmpl_id": str(seek_data['Ftmpl_id']), "mobile": str(seek_data['Fmobile_no']) } self.assertDictEqual(data, actual) my_logger.info('发送验证码成功,查询数据库,添加一条数据与请求参数相同') except Exception as e: # 异常测试用例,需要捕捉错误信息进行断言 self.assertIn(case.expected, str(e)) do_excel.bace_write_by_case_id('sendMcode', case.case_id, str(e.__dict__['fault'][1]), 'success') sql = 'SELECT * FROM sms_db_20.t_mvcode_info_3 where Fmobile_no={};'.format( getattr(Context, 'mobile')) seek_data = self.do_mysql.fetch_one(sql) expected = None self.assertEqual(expected, seek_data) my_logger.info('发送验证码成功,数据库查询无数据') Test_result = 'pass' except AssertionError as e: Test_result = 'fail' my_logger.error('出错了,{}'.format(e)) do_excel.bace_write_by_case_id('sendMcode', case.case_id, e, 'fail') raise e my_logger.info('本条用例测试结果:{}'.format(Test_result))
# 步骤: # 1.定义日志收集器和收集级别 # 2.设定输出渠道 # 3.对接 import logging from logging.handlers import RotatingFileHandler import time from common import project_path import os from common.read_conf import ReadConfig import HTMLTestRunnerNew logger = logging.getLogger(ReadConfig().get('LOG','log_name')) logger.setLevel(ReadConfig().get('LOG', 'collect_leave')) # 获取创建日志的目录 def get_dir(): log_dir = os.path.join(project_path.log_dir, get_current()) if not os.path.isdir(log_dir): os.mkdir(log_dir) else: return log_dir # 获取系统当前时间的年月日格式 def get_current(): return time.strftime('%Y%m%d', time.localtime())
def setUpClass(cls): cls.request = Request() # 建立session会话,实例化对象 cls.config = ReadConfig() #为了后边读取配置文件中的数据
""" 用来替换字符串中的标识符方法 """ # s 是目标字符串 # d 是替换的内容 # 找到目标字符串里面的标识符的key,去d里面拿到替换的值 # 替换到s里面去 然后返回 import re from common.read_conf import ReadConfig read = ReadConfig() class Context: # 上下文 数据的准备与记录 admin_user = read.get_value('admin_data', 'admin_user') admin_pwd = read.get_value('admin_data', 'admin_pwd') loan_memberId = read.get_value('loan_data', 'loan_memberId') invest_user = read.get_value('invest_data', 'invest_user') invest_pwd = read.get_value('invest_data', 'invest_pwd') invest_member_id = read.get_value('invest_data', 'invest_member_id') def replace_new(self, s): p = "\${(.*?)}" while re.search(p, s): m = re.search(p, s) key = m.group(1) if hasattr(Context, key): value = getattr(Context, key) # 利用反射动态的获取属性的值 s = re.sub(p, value, s, count=1) else: print('该属性不存在')