def create_logger(): """ 创建日志收集器 :return: 日志收集器 """ # 第一步:创建一个日志收集器 log = logging.getLogger("jcl") # 第二步:设置收集器收集的等级 log.setLevel(conf.get("log", "level")) # 第三步:设置输出渠道以及输出渠道的等级 fh = logging.FileHandler(log_filepath, encoding="utf8") fh.setLevel(conf.get("log", "fh_level")) log.addHandler(fh) sh = logging.StreamHandler() sh.setLevel(conf.get("log", "sh_level")) log.addHandler(sh) # 创建一个输出格式对象 formats = '%(asctime)s -- [%(filename)s-->line:%(lineno)d] - %(levelname)s: %(message)s' form = logging.Formatter(formats) # 将输出格式添加到输出渠道 fh.setFormatter(form) sh.setFormatter(form) return log
def __init__(self): """初始化方法中,连接到数据库""" # 建立连接 self.con = pymysql.connect( host=conf.get("mysql", "host"), port=conf.getint("mysql", "port"), user=conf.get("mysql", "user"), password=conf.get("mysql", "password"), charset="utf8", cursorclass=pymysql.cursors.DictCursor, ) # 创建一个游标对象 self.cur = self.con.cursor()
def login(): """用例执行的前置条件:登录""" # 准备登录的相关数据 url = conf.get("login", "url") data = { "username": conf.get("login", "username"), "password": conf.get("login", "password") } post = conf.get('login', 'post') response = request(method=post, url=url, json=data) res = response.json() token = "JWT" + " " + jsonpath.jsonpath(res, "$..token")[0] # 将提取出来的数据保存为EnvData这个类的属性(环境变量) setattr(EnvData, "token", token)
def test_testcases(self, case): # 第一步:准备用例数据 url = case['url'] method = case["method"] # 准备用例参数 # 替换参数中的用户id # 准备请求头 headers = eval(conf.get("create_project", "headers")) headers["Authorization"] = getattr(EnvData,"token") row = case["case_id"] + 1 # if判断数据中是否需要替换数据 if '#username#' in case['data'] or '#username#' in case['expected']: setattr(EnvData, 'username', self.random_data.random_name()) expected = eval(replace_data(case["expected"])) data = eval(replace_data(case["data"])) # 若没有则正常提取 else: data = eval(case['data']) expected = eval(case["expected"]) # 第二步: 发送请求获取实际结果 response = request(url=url, method=method, json=data, headers=headers) res = response.json() # 通过id判断是否登录成功 若登录成功则获取 if 'id' in res: response_id = str(res['id']) # 第三步:断言预期结果和实际结果 try: # 若需要校验数据库则判断数据库提取的id和name与输入数据断言 # 判断是否需要进行sql校验 if case['check_sql']: # 替换随机生成的用户名,用于数据库查询 case['check_sql'] = replace_data(case['check_sql']) sql = self.db.find_one(case['check_sql']) # 数据库中提取用户名和邮箱 sql_id = str(sql['id']) sql_name = sql['name'] # 将随机生成的用户名和邮箱与数据库中创建成功数据进行断言 self.assertEqual(response_id, sql_id) self.assertEqual(expected['name'], sql_name) print('响应的id:{}和:数据库查询到的id:{}'.format(response_id, sql_id)) print('根据创建用户名查询数据库得到的用户名:{}和:邮箱{}'.format(expected['name'], sql_name)) # 不需要校验数据库则通过响应和期望断言 else: self.assertEqual(res, expected) print('期望返回的数据是:{} \n 响应返回的数据是:{}'.format(res, expected)) except AssertionError as e: # 结果回写excel中 log.error("用例--{}--执行未通过".format(case["title"])) log.debug("预期结果:{}".format(expected)) log.debug("实际结果:{}".format(res)) log.exception(e) self.excel.write_data(row=row, column=8, value="未通过") raise e else: # 结果回写excel中 log.info("用例--{}--执行通过".format(case["title"])) self.excel.write_data(row=row, column=8, value="通过")
def test_interfaces(self, case): # 第一步:准备用例数据 url = case['url'] method = case["method"] # 准备用例参数 # 替换参数中的用户id # 准备请求头 headers = eval(conf.get("interface", "headers")) headers["Authorization"] = getattr(EnvData, "token") row = case["case_id"] + 1 if '#interface#' in case['data'] or '#interface#' in case['expected']: setattr(EnvData, 'interface', self.random_data.random_name()) data = eval(replace_data(case["data"])) expected = eval(replace_data(case["expected"])) else: data = eval(case['data']) expected = eval(case['expected']) # 第二步: 发送请求获取实际结果 response = request(url=url, method=method, json=data, headers=headers) res = response.json() if 'create_time' in res: res_project = res['project'] setattr(EnvData, "project", res_project) print(res) # 第三步:断言预期结果和实际结果 try: # 若需要校验数据库则判断数据库提取的id和name与输入数据断言 if case["check_sql"]: expected_sql = replace_data(case["check_sql"]) project_name = self.db.find_one(expected_sql)["name"] self.assertEqual(res['project'], project_name) self.assertEqual(expected["tester"], res["tester"]) # 不需要校验数据库则通过响应和期望断言 else: self.assertEqual(expected, res) except AssertionError as e: # 结果回写excel中 log.error("用例--{}--执行未通过".format(case["title"])) log.debug("预期结果:{}".format(expected)) log.debug("实际结果:{}".format(res)) log.exception(e) self.excel.write_data(row=row, column=8, value="未通过") raise e else: # 结果回写excel中 log.info("用例--{}--执行通过".format(case["title"])) self.excel.write_data(row=row, column=8, value="通过")
def test_testcases(self, case): # 第一步:准备用例数据 # if判断数据中是否需要替换数据 if '#email#' in case['url'] or '#email#' in case['expected']: setattr(EnvData, 'email', self.random_data.random_email()) expected = eval(replace_data(case["expected"])) url = replace_data(case["url"]) else: # 若没有则正常提取 url = case['url'] expected = eval(case["expected"]) headers = eval(conf.get("create_project", "headers")) headers["Authorization"] = getattr(EnvData, "token") method = case["method"] # 准备用例参数 # 替换参数中的用户id # 准备请求头 row = case["case_id"] + 1 # 第二步: 发送请求获取实际结果 response = request(url=url, method=method, headers=headers) res = response.json() # 第三步:断言预期结果和实际结果 try: # 将随机生成的用户名和邮箱与数据库中创建成功数据进行断言 self.assertEqual(expected['count'], res['count']) self.assertEqual(expected['email'], res['email']) print('期望的数据:{}和:响应的数据:{}'.format(expected, res)) except AssertionError as e: # 结果回写excel中 log.error("用例--{}--执行未通过".format(case["title"])) log.debug("预期结果:{}".format(expected)) log.debug("实际结果:{}".format(res)) log.exception(e) self.excel.write_data(row=row, column=8, value="未通过") raise e else: # 结果回写excel中 log.info("用例--{}--执行通过".format(case["title"])) self.excel.write_data(row=row, column=8, value="通过")
""" -- coding: utf-8 -- @Time : 2020/4/14 19:54 @Author : jcoool @Site : @File : handle_logging.py @Software: PyCharm """ import logging import os from jiekoucs.common.handle_config import conf from jiekoucs.common.handle_path import LOG_DIR log_filepath = os.path.join(LOG_DIR, conf.get("log", "filename")) class HandleLogger: """处理日志相关的模块""" @staticmethod def create_logger(): """ 创建日志收集器 :return: 日志收集器 """ # 第一步:创建一个日志收集器 log = logging.getLogger("jcl") # 第二步:设置收集器收集的等级 log.setLevel(conf.get("log", "level"))