API巡检怎么做,测试结果发送到钉钉群!又省了一笔开支

一、基本介绍Python+unittest+钉钉+crontab , 定时测试API , 并发送测试结果到钉钉群 , 第一时间掌握API状况
二、项目目录结构
API巡检怎么做,测试结果发送到钉钉群!又省了一笔开支文章插图
2.1 functions.py该py用于存放项目所需的一些函数 , 比如钉钉机器人发送消息
def DingDingalert(msg):"""send alert info by DingDing:param msg:要发送的内容:return:"""data = http://kandian.youth.cn/index/{'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 message2.2 settings.py用于存放项目的一些全局变量 , 比如host , api url
2.3 run_all_cases.py主函数 , 项目执行该文件即可
# -*- coding:utf-8 -*-#服务器一般默认是Python2 , 所以第一句申明最好加上import osimport unittestfrom 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 testcaseif __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 dingdingmsg = getMessage("APITextReport.txt")#读取文件内容保存到变量用于钉钉消息发送print("**************************")print(msg)DingDingalert(msg)#调用Dingding函数发消息2.4 case目录分了两个目录APP和web , 用于区别不同的api 类型 , 也可以不用简单举个例子吧目录下新增py , 比如test_getbaidu.py , 所有用例命名前缀一定要统一 , 方便程序收集所有用例 , 哪个不想执行可以改掉前缀代码如下
# -*- coding:utf-8 -*-import jsonimport unittestimport timefrom settings import *from functions import *class Test(unittest.TestCase):def setUp(self):print("start!")def test_getbaidu(self):"""打开百度"""print("执行测试用例:打开百度")url_baidu = ""res = requests.post(url_baidu)#这个比较简单 , 一般接口还有body , headerresult = res.textassert res.status_code == 200def tearDown(self):time.sleep(1)print("end!")if __name__ == "__main__":unittest.main()三、服务器定时任务crontab3.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
编辑完保存 , 即可验证程序是否定时执行了 , 也可以查看执行logtail -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
四、结束有问题一起交流讨论!
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取
【API巡检怎么做,测试结果发送到钉钉群!又省了一笔开支】python免费学习资料以及群交流解答后台私信小编01即可