一、基本介绍
Python+unittest+钉钉+crontab,定时测试API,并发送测试结果到钉钉群,第一时间掌握API状况
二、项目目录结构
2.1 functions.py
该py用于存放项目所需的一些函数,比如钉钉机器人发送消息
def DingDingalert(msg):
"""
send alert info by DingDing
:param msg:要发送的内容
:return:
"""
data = {
'msgtype': 'text',
'text': {
"content": msg
},
}
try:
return requests.post(DINGDING_URL_WEBHOOK, json=data)
except:
traceback.print_exc()
#DINGDING_URL_WEBHOOK就是钉钉群添加机器人,设置里的webhook地址,不懂的可以百度 钉钉群机器人发送消息
def getMessage(filepath):
#读取文件内容
message = ""
for line in open(filepath):
message = message + line
# print(message)
return message
2.2 settings.py
用于存放项目的一些全局变量,比如host,api url
2.3 run_all_cases.py
主函数,项目执行该文件即可
# -*- coding:utf-8 -*-
#服务器一般默认是Python2,所以第一句申明最好加上
import os
import unittest
from functions import *
def all_case():
case_dir = os.path.join(os.getcwd(), "case")#也可以用绝对目录存放测试用例的目录,定时任务时钉钉消息可能不会发,改成绝对目录就好了
print(case_dir)
testcase = unittest.TestSuite()#初始化一个测试套件用来装测试用例
discover = unittest.defaultTestLoader.discover(case_dir, pattern="test*.py", top_level_dir=None)#寻找case_dir下所有test开头的测试用例
testcase.addTests(discover)
print(testcase)
return testcase
if __name__ == "__main__":
# runner = unittest.TextTestRunner()
# runner.run(all_case())
# test report 为了方便发送消息,把测试结果保存到TXT文档里,也可以用HTML报告形式
with open('APITextReport.txt', 'w') as f:
runner = unittest.TextTestRunner(stream=f, verbosity=2)
runner.run(all_case())
# send report to dingding
msg = getMessage("APITextReport.txt")#读取文件内容保存到变量用于钉钉消息发送
print("**************************")
print(msg)
DingDingalert(msg)#调用Dingding函数发消息
2.4 case目录
分了两个目录APP和web,用于区别不同的api 类型,也可以不用
简单举个例子吧
目录下新增py,比如test_getbaidu.py,所有用例命名前缀一定要统一,方便程序收集所有用例,哪个不想执行可以改掉前缀
代码如下
# -*- coding:utf-8 -*-
import json
import unittest
import time
from settings import *
from functions import *
class Test(unittest.TestCase):
def setUp(self):
print("start!")
def test_getbaidu(self):
"""
打开百度
"""
print("执行测试用例:打开百度")
url_baidu = "https://www.baidu.com"
res = requests.post(url_baidu)#这个比较简单,一般接口还有body,header
result = res.text
assert res.status_code == 200
def tearDown(self):
time.sleep(1)
print("end!")
if __name__ == "__main__":
unittest.main()
三、服务器定时任务crontab
3.1 先查看crontab状态
检查cron服务是不是在运行
service crond status
在运行的时候会看到crond is running…
如cron不在运行启动服务
Service cron start
3.2 编辑crontab
输入命令crontab -e
编辑内容如
每5分钟执行一次
*/5 * * * * python /root/apipatrolinspection/run_all_cases.py
每天2点十分执行
10 2 * * * python /root/apipatrolinspection/run_all_cases.py
其他定时规则可百度crontab规则,以上路径最好用绝对路径包括Python
编辑完保存,即可验证程序是否定时执行了,也可以查看执行log
tail -f /var/log/cron.log
若看不到这个log,则有可能是crontab log没配置打开,做如下操作即可:
修改rsyslog文件:
/etc/rsyslog.d/50-default.conf
将 rsyslog 文件中的 #cron.* 前的 # 删掉;
重启rsyslog服务:
service rsyslog restart
重启cron服务:
service cron restart
查看日志文件:
tail -f /var/log/cron.log
四、结束
有问题可以留言