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)
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
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
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
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()
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,
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")
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() # 封装公共方法 # 应用测试发送