def __init__(self): # 建立连接 self.conn = psycopg2.connect( host=myconf.get('postgresql', 'host'), # 数据库地址 port=myconf.getint('postgresql', 'port'), # 端口 user=myconf.get('postgresql', 'user'), # 账号 password=myconf.get('postgresql', 'password'), # 密码 database=myconf.get('postgresql', 'database') # 数据库名 ) # 创建一个游标 self.cur = self.conn.cursor()
def test_PRODCUT(self, case): # 第一步:准备用例数据 url = myconf.get('url', 'url') + case.url interface = case.interface method = case.method # 替换动态化的参数 if "#sessionId#" in case.data: # 将需要格式化的字符串提取出来,替换为格式化的参数 data = eval( case.data.replace('#sessionId#', myconf.get('user', 'sessionId'))) # 第二步:读取配置文件,发送请求,将请求内容输出日志到指定目录,获取请求结果 my_log.info("请求地址:{},请求接口{},请求内容:{}".format(url, interface, data)) response = self.http.request(method, url=url, data=data) res = response.json() # 第三步:对比实际和预期结果 try: self.assertEqual(str(case.excepted_code), res['code']) if case.check_sql: # 将需要格式化的字符串提取出来,替换为格式化的参数 case.check_sql = case.check_sql.replace( '#distributer_no#', myconf.get('user', 'distributer_no')) # 获取当前分销商产品总数 product_count = self.db.fetchone(case.check_sql)[0] print(product_count) # 对比实际分销商产品总数和预期 self.assertEqual(3, product_count) except AssertionError as error: print('测试用例不通过') print('实际响应状态码为:{}'.format(res['code'])) print('预期响应状态码为:{}'.format(case.excepted_code)) self.excel.write_data(row=case.case_id + 1, column=8, value='failed') my_log.info('用例{}执行未通过'.format(case.title)) my_log.exception(error) raise error else: print('测试用例通过') print('实际响应状态码为:{}'.format(res['code'])) print('预期响应状态码为:{}'.format(case.excepted_code)) self.excel.write_data(row=case.case_id + 1, column=8, value='passed') my_log.info('用例{}执行通过'.format(case.title))
def data_replace(data): '''动态替换用例数据''' while re.search(r'#(.+?)#', data): res = re.search(r'#(.+?)#', data) # 提取要替换的内容 re_data = res.group() # 提取要替换的字段 key = res.group(1) try: # 去配置文件中读取字段对应的数据内容 value = myconf.get('data', key) except: value = getattr(ConText, key) # 进行替换 data = re.sub(re_data, str(value), data) # # 替换 # data = re.sub(re_data,value,data) return data
''' import os import unittest from HTMLTestRunnerNew import HTMLTestRunner from interface.common.constant import CASE_DIR, REPORT_DIR from interface.common.mylog import my_log from interface.common.read_config import myconf # 项目开始时输出日志 my_log.info("------开始执行测试运行程序------") # 第一步:创建测试套件 suite = unittest.TestSuite() # 第二步:将用例添加到测试套件 loader = unittest.TestLoader() suite.addTest(loader.discover(CASE_DIR)) # 第三步:执行用例,生成测试报告 # 从配置文件中读取测试报告的名称,并和路径拼接生成一个指定路径指定名称的测试报告 file_name = myconf.get('report', 'file_name') report = os.path.join(REPORT_DIR, file_name) with open(report, 'wb') as new: runner = HTMLTestRunner(stream=new, verbosity=2, title='report01', description='接口测试报告', tester='可乐') runner.run(suite) # 用例执行结束输入日志 my_log.info('------用例执行结束------')
""" =============== author:Administrator time:16:06 E-mail:[email protected] =============== """ import logging import os from interface.common.constant import LOG_DIR from interface.common.read_config import myconf # 读取配置文件中log区域的配置内容 log_level = myconf.get('log','log_level') fh_level = myconf.get('log','fh_level') sh_level = myconf.get('log','sh_level') filename = myconf.get('log','filename') # 拼接日志文件路径 file_path = os.path.join(LOG_DIR,filename) class MyLog(object): def __new__(cls, *args, **kwargs): '''创建对象''' # 第一步:创建日志收集器,根据配置文件获取收集器设置的收集日志的等级 my_log = logging.getLogger('my_log') my_log.setLevel(log_level) # 第二步:创建日志输出渠道,根据配置文件获取渠道设置的收集日志的等级,输出到控制台 sh = logging.StreamHandler() sh.setLevel(sh_level) fh = logging.FileHandler(file_path, 'a', encoding='utf8')