Pytest执行用例之后,将结果发送到企业微信,告知具体用例通过个数和失败个数,并@对应负责人
1、获取Pytest执行的结果
方法1.conftest.py中重写pytest_terminal_summary方法
import time
from utils.send_WeChat import Enterprise_WeChat_notification
def pytest_terminal_summary(terminalreporter, exitstatus, config):
total = terminalreporter._numcollected
passed = len(terminalreporter.stats.get('passed', []))
failed = len(terminalreporter.stats.get('failed', []))
error = len(terminalreporter.stats.get('error', []))
skipped = len(terminalreporter.stats.get('skipped', []))
wechat = Enterprise_WeChat_notification(total=total, passed=passed, failed=failed, error=error,
skipped=skipped) # 获取企业微信,暂时不需要看
print("total:", terminalreporter._numcollected)
# terminalreporter._sessionstarttime 会话开始时间
duration = time.time() - terminalreporter._sessionstarttime
print('total times:', duration, 'seconds')
wechat.send() # 企业微信发送消息,暂时不需要看
方法2.conftest.py中重写pytest_sessionfinish方法
def pytest_sessionfinish(session):
# with open(f"{project_path}/config/environment.properties", "r") as f:
# r = f.readlines()
# r[0] = f"Runtime={time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())}\n"
# r[1] = f"Platform={sys.platform}\n"
# r[2] = f"python.Version={platform.python_version()}"
# with open(f"{project_path}/config/environment.properties", "w") as fw:
# fw.writelines(r)
# os.system(f"cp {project_path}/config/environment.properties {project_path}/report/result")
# cmd = "{} generate {} -o {} -c".format(report_action.allure, result_dir, allure_report)
# # cmd_server = f"{report.allure} open -h 127.0.0.1 -p 3333 {allure_report}"
# subprocess.call(cmd, shell=True)
# logger.info("allure报告生成完毕!")
terminalreporter = session.config.pluginmanager.get_plugin('terminalreporter')
total_case = terminalreporter._numcollected
pass_case = len([i for i in terminalreporter.stats.get('passed', []) if i.when != 'teardown'])
fail_case = len([i for i in terminalreporter.stats.get('failed', []) if i.when != 'teardown'])
error_case = len([i for i in terminalreporter.stats.get('error', []) if i.when != 'teardown'])
skip_case = len([i for i in terminalreporter.stats.get('skipped', []) if i.when != 'teardown'])
pass_rate = round((len(terminalreporter.stats.get('passed', [])) / (total_case - skip_case) * 100), 2)
# run_time = round((time.time() - terminalreporter._sessionstarttime), 2)
duration = round((time.time() - terminalreporter._sessionstarttime), 2)
wechat = Enterprise_WeChat_notification(passed=pass_case, failed=fail_case, error=error_case, skipped=skip_case,
total=total_case, duration=duration)
wechat.send() # 企业微信发送消息ss
# logger.info("测试结果发送完毕!")
该方法名称固定,是pytest 执行用例之后,固定执行的方法,其中terminalreporter 类中的stats中存放用例执行之后的各种数据,失败和成功的个数也是从里面获取
这样有了数据之后,就可以准备企业微信了。
2、Python发送消息到企业微信
简单的说:
1、在企业微信中添加群机器人,获取webhook地址,webhook就是一个url,通过post请求访问
2、编辑想要发送的消息,一种是文本类型,一种是Markdown类型(更好看)
3、最后通过post请求该企业微信的url
import requests
from utils.const import WECHAT_URL
class Enterprise_WeChat_notification():
def __init__(self, total, passed, failed, error, skipped):
self.url = WECHAT_URL
self.header = {'Content-Type': 'application/json'}
message = "自动化已完成,总共 {}条,通过 <font color=\"info\">{}条</font>,失败 <font color=\"warning\">{}条</font>,error <font color=\"red\">{}条</font>,skipped <font color=\"blue\">{}条</font>".format(
total, passed, failed, error, skipped)
self.payload = {
"msgtype": "markdown",
"markdown": {
"content": message,
}
}
self.remind = {
"msgtype": "text",
"text": {
"mentioned_list": ["人1", "人2"],
"mentioned_mobile_list": ["123456", "654321"]
}
}
def send(self):
requests.post(url=self.url, headers=self.header, json=self.payload)
requests.post(url=self.url, headers=self.header, json=self.remind)
3、用例颜色
<font color = red>1.我是文本 红色red</font>
<font color = blue>2.我是文本 蓝色</font>
<font color = pink>3.我是文本 粉红</font>
<font color = purple>4.我是文本 紫色</font>
<font color = black>5.我是文本 黑色</font>
<font color = Orange>6.我是文本 橙色</font>
<font color = gray>7.我是文本 灰色</font>
<font color = green>8.我是文本 绿色</font>
<font color = #FF0000>8.我是文本 红色#FF0000</font>