def send_msg(file_path): # 第一步连接到stmp服务器 smtp = smtplib.SMTP_SSL("smtp.qq.com", 465) smtp.login("需要自己填写邮箱", "需要自己填写邮箱的秘钥") # 第二步构建邮件 smg = MIMEMultipart() text_smg = MIMEText(open(file_path, "r", encoding="utf8").read(), "html") smg.attach(text_smg) file_msg = MIMEApplication(open(file_path, "rb").read()) file_msg.add_header('content-disposition', 'attachment', filename='reports.html') smg.attach(file_msg) smg["Subject"] = "测试报告" # 添加发件人 smg["From"] = "需要自己填写邮箱" # 添加收件人 这里读取配置文件中的邮箱账号 smg["To"] = conf.get("email", "email") # 第三步发送邮件 smtp.send_message(smg, from_addr="需要自己填写邮箱", to_addrs=conf.get("email", "email"))
def setUp(self): self.url = conf.get("env", "base_url") + "/member/login" self.headers = eval(conf.get("env", "headers")) self.data = data.login self.data.update({"mobile_phone": case_data.phone}) self.method = "post" self.requests = SendRequests1()
def __init__(self): # 连接数据库 self.con = pymysql.connect(host=conf.get("mysql", "host"), user=conf.get("mysql", "user"), password=conf.get("mysql", "password"), port=conf.getint("mysql", "port"), charset="utf8") # 创建一个游标 self.cur = self.con.cursor()
def setUp(self): # 准备测试数据 phone1 = "15897749" + str(random.randint(100, 1000)) self.url = conf.get("env", "base_url") + "/member/register" self.headers = eval(conf.get("env", "headers")) self.data = data.regeister self.data.update({"mobile_phone": phone1}) self.method = "post" self.requests = SendRequests1()
def test_register(self, case): # ------第一步:准备用例数据------------ # 请求的参数 # 增加判断 if "#phone#" in case["data"]: # 生成手机号 phone = self.random_phone() # 进行替换 case["data"] = case["data"].replace("#phone#", phone) data = eval(case["data"]) # 请求的方法 method = case["method"] # 请求的地址 url = conf.get("url_project", "url") + case["url"] # 当前用例所在行 row = case["case_id"] + 1 # 请求头(配置文件中读取请求头) headers = eval(conf.get("url_project", "headers")) # 预期结果 expected = eval(case["expected"]) # ------第二步:发送请求到接口,获取实际结果-------- res1 = token_http.send(url=url, method=method, json=data, headers=headers) res = res1.json() # -------第三步:比对预期结果和实际结果----- try: self.assertEqual(eval(expected["code"]), res["code"]) self.assertEqual(expected["msg"], res["msg"]) if res["msg"] == "ok": # 去数据库查询当前账号是否存在 sql = "SELECT * FROM futureloan.member WHERE mobile_phone ={}".format( phone) # 获取数据库中有没有该用户信息 count = self.db.count(sql) # 对数据库中返回的数据做断言,判断数据库中是否有一条数据 self.assertEqual(1, count) except AssertionError as e: self.excel.write_data(row=row, column=8, value="未通过") print("预期结果:{}".format(expected)) print("实际结果;{}".format(res)) Log.info("用例:{}--------->未通过".format(case["title"])) Log.error(e) raise e else: self.excel.write_data(row=row, column=8, value="通过") Log.info("用例:{}--------->通过".format(case["title"]))
def replace_data(data): s=r"#(.+?)#" while re.search(s,data): # 匹配第一个待替换的数据,返回的是对象 res=re.search(s,data) # 提取待替换的内容 item=res.group() # 获取替换内容中的数据项 key=res.group(1) try: data=data.replace(item,conf.get("url_project",key)) except: data=data.replace(item,getattr(testdata,key)) return data
# -*- coding: utf-8 -*- import logging from logging.handlers import TimedRotatingFileHandler from common.contants import LOG_DIR from common.myconfig import conf """该模块是生成日志的""" # 读取配置文件中的数据,方便后续修改直接在配置文件中修改 level = conf.get("logging", "level") f_level = conf.get("logging", "f_level") # 输出道文件等级 s_level = conf.get("logging", "s_level") # 输出到控制台等级 class my_log(): @staticmethod def cteate_logger(): # 创建一个python24日志收集 mylog = logging.getLogger("python24") # 设置日志默认收集等级 mylog.setLevel(level) # 添加输出渠道 # 输出到控制台 sh = logging.StreamHandler() # 设置输出等级 sh.setLevel(s_level) # 将输出渠道绑定到日志收集器上 mylog.addHandler(sh) # 输出到文件
# 第一步创建测试套件"""一定记得后面带括号()"""" suite = unittest.TestSuite() # 加载用例到套件 loader = unittest.TestLoader() suite.addTest(loader.discover(CASE_DIR)) # ——————————————第二种模块加载测试用例类的方式------------------------------------------------- # 第2种,通过模块去加载用例 # 创建一个加载对象 # import testcases #导入模块 # loader = unittest.TestLoader() # suite.addTest(loader.loadTestsFromModule(testcases)) # 配置文件修改报告名称 res = conf.get("report", "filename") dir = os.path.join(REPORTS_DIR, res) with open(dir, "wb") as f: runner = HTMLTestRunner(stream=f, title="接口测试报告", description="测试报告的描述信息", tester="测试人员") # 第四步:运行测试套件 runner.run(suite) # 方式二:生成测试报告 # runner=HTMLTestRunner(stream=open(r"D:\pycharm\test_project\reports\reports.html","wb"),tester="空城",description="进阶3",title="用例报告") # runner.run(suite) # # """生成第二种测试报告样式"""