Пример #1
0
    def test_run(self, case):
        # 初始化信息,url.data 等数据
        url = ConfigYml().get_conf_url() + case[data_key.url]
        print(url)
        case_id = case[data_key.case_id]
        case_model = case[data_key.case_model]
        case_name = case[data_key.case_name]
        pre_exec = case[data_key.pre_exec]
        method = case[data_key.method]
        params_type = case[data_key.params_type]
        params = case[data_key.params]
        expect_result = case[data_key.expect_result]
        reference = case[data_key.reference]
        headers = case[data_key.headers]
        cookies = case[data_key.cookies]
        code = case[data_key.code]
        db_verity = case[data_key.db_verity]

        # 验证前置条件
        if pre_exec:
            pass
            # 找到执行用例,前置测试用例
            pre_case = data_init.get_case_pre(pre_exec)
            # print("前置条件信息为:%s" % pre_case)
            pre_res = self.run_pre(pre_case)
            headers, cookies = self.get_correlation(headers, cookies, pre_res)
        # 判断headers和cookie是否存在,如果存在json转义,如果不存在无需转义
        header = Base.json_parse(headers)
        cookie = Base.json_parse(cookies)
        url_params = Base.joint_url(case[data_key.params], case[data_key.url])
        res = self.run_api(url, method, url_params, reference, params, header,
                           cookie)
        print("测试用例执行:%s" % res)

        # allure
        allure.dynamic.feature(sheet_name)  # sheet名称   feature 一级标签
        allure.dynamic.story(case_model)  # 模块    story 二级标签
        allure.dynamic.title(case_id + case_name)  # 用例ID+接口名称 title
        # 请求URL 请求类型 期望结果 实际结果描述
        desc = "<font color='red'>请求URL: </font> {}<Br/>" \
               "<font color='red'>请求类型: </font>{}<Br/>" \
               "<font color='red'>期望结果: </font>{}<Br/>" \
               "<font color='red'>实际结果: </font>{}".format(url, method, expect_result, res)
        allure.dynamic.description(desc)

        # 断言验证
        assert_util = AssertUtil()
        assert_util.assert_code(int(res["code"]), int(code))  # 验证状态码
        assert_util.assert_in_body(str(res["body"]),
                                   str(expect_result))  # 验证返回结果内容
        if len(db_verity) > 0:  # 数据库结果断言
            Base.assert_db("db_1", res["body"], db_verity)
Пример #2
0
def joint_url(params, url):
    """
    将url和请求参数拼接
    :param params:
    :param url:
    :return:
    """
    params_data = json.loads(params)  # 将字符串转换为字典
    url_params = ConfigYml().get_conf_url() + url + "?"
    for key in params_data:  # 把请求参数拼接到url地址中
        url_params = url_params + key + "=" + params_data[key] + "&"
    url_params = url_params[:-1]  # 删除最后一个 &
    return url_params
Пример #3
0
def init_db(db_alias):
    """
    初始化配置文件,并初始化mysql对象
    :param db_alias:
    :return:
    """
    db_info = ConfigYml().get_db_conf_info(db_alias)
    host = db_info["db_host"]
    user = db_info["db_user"]
    password = db_info["db_password"]
    db_name = db_info["db_name"]
    charset = db_info["db_charset"]
    port = int(db_info["db_port"])
    conn = Mysql(host, user, password, db_name, charset, port)
    return conn
Пример #4
0
 def run_pre(self, pre_case):
     # 初始化数据
     pass
     url = ConfigYml().get_conf_url() + pre_case[data_key.url]
     method = pre_case[data_key.method]
     params = pre_case[data_key.params]
     reference = pre_case[data_key.reference]
     headers = pre_case[data_key.headers]
     cookies = pre_case[data_key.cookies]
     # 判断headers和cookie是否存在,如果存在json转义,如果不存在无需转义
     header = Base.json_parse(headers)
     cookie = Base.json_parse(cookies)
     url_params = Base.joint_url(pre_case[data_key.params],
                                 pre_case[data_key.url])
     res = self.run_api(url, method, url_params, reference, params, header)
     print("前置用例执行:%s" % res)
     return res
Пример #5
0
def send_mail(report_html_path="", content="", title="测试"):
    """
    发送邮件
    :param report_html_path:
    :param content:
    :param title:
    :return:
    """
    email_info = ConfigYml().get_email_info()
    smtp_addr = email_info["smtpserver"]
    username = email_info["username"]
    password = email_info["password"]
    recv = email_info["receiver"]
    email = SendEmail(smtp_addr=smtp_addr,
                      username=username,
                      password=password,
                      recv=recv,
                      title=title,
                      content=content,
                      file=report_html_path)
    email.send_mail()
Пример #6
0
from config.Conf import ConfigYml
from config import Conf
import os
from common.EXcelData import Data
from utils.LogUtil import my_log
from common import ExcelConfig
from utils.RequestsUtil import Request
import json
import pytest
from common import Base
from utils.AssertUtil import AssertUtil
import allure

# 1、初始化信息
case_file = os.path.join(Conf.get_data_path(),
                         ConfigYml().get_excel_file())  # 初始化测试用例文件
sheet_name = ConfigYml().get_excel_sheet()  # 初始化测试用例sheet名称
# 获取运行测试用例列表
data_init = Data(case_file, sheet_name)
run_list = data_init.get_run_data()
log = my_log()  # 日志
data_key = ExcelConfig.DataConfig  # 初始化DataConfig


# 2、测试用例方法,参数化运行
class TestExcel:
    def run_api(self,
                url,
                method,
                url_params,
                reference,
Пример #7
0
            fh_file.setLevel(log_l[self.log_level])
            fh_file.setFormatter(formatter)
            # 添加handler
            self.logger.addHandler(fh_stream)
            self.logger.addHandler(fh_file)


# 1、初始化参数数据
# 日志文件名称,日志文件级别
# 日志文件名称 = logs目录 + 当前时间 + 扩展名
# Log目录
log_path = Conf.get_log_path()
# 当前时间
current_time = datetime.datetime.now().strftime("%Y-%m-%d")
# 扩展名
log_extension = ConfigYml().get_conf_log_extension()
logfile = os.path.join(log_path, current_time + log_extension)
# print(logfile)
# 日志文件级别
loglevel = ConfigYml().get_conf_log()
# print(loglevel)
# 2、对外方法,初始log工具类,提供其他类使用


def my_log(log_name=__file__):
    return Logger(log_file=logfile, log_name=log_name,
                  log_level=loglevel).logger


if __name__ == '__main__':
    my_log().debug("this is a debug")
Пример #8
0
        if self.file:
            # MIMEText读取文件
            att = MIMEText(open(self.file).read())
            # 设置内容类型
            att["Content-Type"] = 'application/octet-stream'
            # 设置附件头
            att["Content-Disposition"] = 'attachment;filename="%s"' % self.file
            # 将内容附加到邮件主体中
            msg.attach(att)
        # 登录邮件服务器
        self.smtp = smtplib.SMTP(self.smtp_addr, port=25)
        self.smtp.login(self.username, self.password)
        # 发送邮件
        self.smtp.sendmail(self.username, self.recv, msg.as_string())


if __name__ == "__main__":
    # 初始化类(self,smtp_addr,username,password,recv,
    #     title,content=None,file=None):
    from config.Conf import ConfigYml

    email_info = ConfigYml().get_email_info()
    smtp_addr = email_info["smtpserver"]
    username = email_info["username"]
    password = email_info["password"]
    recv = email_info["receiver"]
    email = SendEmail(smtp_addr, username, password, recv, "测试")
    email.send_mail()
    # 封装公共方法
    # 应用测试发送