Beispiel #1
0
    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
Beispiel #2
0
 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()
Beispiel #3
0
 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)
Beispiel #4
0
    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="通过")
Beispiel #5
0
    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="通过")
Beispiel #6
0
    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="通过")
Beispiel #7
0
"""
-- 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"))