自动化测试中,不管是UI自动化,还是接口自动化,最终会执行测试用例执行文件,如命名为:run_test_case.py的文件,现整理一下该文件的通用代码实现,也可以根据自己的实际需要进行增减
本文将呈现的是:用Pyhthon+unittest+BSTestRunner+DingtalkChatbot实现执行自动化测试,生成测试报告并发送钉钉机器人
要想彻底解放双手,可以再结合Jenkins构建定时任务,帮你定时、周期的执行run_test_case.py,下面的内容主要是代码的实现
1、指定测试用例和测试报告的路径
2、定义测试报告文件格式
3、加载测试用例
4、运行测试用例并生成测试报告
5、获取测试报告url
6、chrome无头浏览器,打开测试报告url
7、检测报告内容是否有接口fail,有则发送通知到钉钉机器人
8、关闭浏览器
import unittest
import time
from BSTestRunner import BSTestRunner
from selenium import webdriver
from selenium.webdriver.chrome.options import Options #定义chrome无头浏览器
from dingtalkchatbot.chatbot import DingtalkChatbot #发送通知到钉钉机器人
# 指定测试用例和测试报告的路径
test_case_dir = './XXX_test_case'
test_reports_dir = './XXX_test_reports'
# 定义测试报告文件格式
now = time.strftime('%Y-%m-%d %H_%M_%S')
test_report_name = test_reports_dir+'/'+now+' XXX_test_resport.html'
# 加载测试用例
print('开始执行测试用例')
discover = unittest.defaultTestLoader.discover(test_case_dir,pattern='XXX_test.py')
# 运行测试用例并生成测试报告
print('开始生成测试报告...')
with open(test_report_name,'wb') as f:
runner = BSTestRunner(stream=f,title='XXX接口自动化测试报告',description='这是关于XXX的接口测试报告')
runner.run(discover)
f.close()
# 获取测试报告url
test_reports_url = 'file:///D:/your_object_path'+test_report_name
print('测试报告的地址是:{}'.format(test_reports_url))
# chrome无头浏览器,打开测试报告url
chrome_options = Options()
chrome_options.add_argument('- -headless')
chrome_options.add_argument('- -disable-gpu')
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get(test_reports_url)
time.sleep(5)
print('测试报告的名称是:{}'.format(driver.title))
# 检测报告内容是否有接口fail,有则发送通知到钉钉机器人
element = driver.find_element_by_xpath('//*[@id="result_table"]/tbody/tr[1]/td[4]')
fail_text = element.get_attribute('textContent')
print('报错接口数量有: {} 个'.format(fail_text))
if fail_text != '0':
# 发送通知到钉钉机器人
print ('报告已生成,但有异常接口,开始发送通知到钉钉机器人...' )
webhook = 'https://oapi.dingtalk.com/robot/send?access_token=your_token' #用你的实际token替换your_token
xiaoding = DingtalkChatbot ( webhook )
xiaoding.send_text (
msg="《{}》已生成,有 {} 个异常接口!请用浏览器打开查看详情,链接是:{}".format(driver.title ,fail_text,test_reports_url))
else:
print('《{}》已生成,无异常接口,很棒!'.format(driver.title))
# 关闭浏览器
driver.quit()