pytest---钉钉机器人发送Allure测试报告

发布时间 2023-06-26 13:32:51作者: 测试-安静

前言

前面小编介绍过如何通过钉钉机器人在钉钉群中发送禅道的缺陷内容,今天小编在这里介绍如何将统计好的测试结果和allure报告一起发送到钉钉群中,这样群里的同事,直接可以点击使用,方便更快的了解到自动化结果的执行情况。

编写用例

小编先编写几个简单的用例,然后通过allure生成测试报告。

# coding:utf-8
import pytest

class TestCase:

    def test_01(self):
        print('---用例01---')
        assert 1
        
    def test_02(self):
        print('---用例02---')
        assert 0
        
    def test_03(self):
        print('---用例03---')
        assert 1
        
    def test_04(self):
        print('---用例04---')
        assert 0

编写完成后,直接在cmd中执行以下命令,生成测试报告

执行报告命令:

pytest test03.py --alluredir ./report/result 
allure generate report/result/ -o report/html --clean

获取Allure结果

测试报告生成后,可以通过查看对应目录下的json文件进行查看测试用例的执行情况,通过分析执行情况,进行分析出来测试结果。

目录:...\report\html\widgets\summary.json(根据报告存放路径自行查看)

{
  "reportName" : "Allure Report",
  "testRuns" : [ ],
  "statistic" : {
    "failed" : 2,
    "broken" : 0,
    "skipped" : 0,
    "passed" : 2,
    "unknown" : 0,
    "total" : 4
  },
  "time" : {
    "start" : 1678778457211,
    "stop" : 1678778457313,
    "duration" : 102,
    "minDuration" : 0,
    "maxDuration" : 10,
    "sumDuration" : 12
  }
}

通过上述json中的statistic参数,分析得到一共执行了4条用例,其中失败的2个,成功的2个,跳过的为0个。这里小编就可以通过python读取json文件将我们的测试结果统计出来了。

# allure报告结果json路径,这里小编直接将路径写死了
file_name = r'D:\test_daily\report\html\widgets\summary.json'
with open(file_name, 'r', encoding='utf-8') as f:
    data = json.load(f)
case_json = data['statistic']
case_all = case_json['total']   # 测试用例总数
case_fail = case_json['failed']     # 失败用例数量
case_pass = case_json['passed']     # 成功用例数量
if case_all >= 0:
    # 计算出来用例执行成功率
    case_rate = round((case_pass / case_all) * 100, 2)
else:
    print('未获取到执行结果')

发送钉钉

测试用例和测试结果都已经都获取到了,接下来就是将我们的测试结果和报告进行汇总,然后通过钉钉机器人发送到钉钉群中,前面小编已经介绍过如何添加钉钉机器人以及如何发送消息,这里就不在介绍。

首先将生成allure的报告的命令封装完成,后面直接进行运行

def allure_report():
    # 运行测试用例,
    os.system('pytest test03.py --alluredir ./report/result ')
    # 生成allure报告
    os.system('allure generate report/result/ -o report/html --clean')
    # 自动打开allure报告,固定端口号
    os.system('allure serve report/result  -p 8210')

将allure报告的结果获取到,和allure的地址直接通过钉钉机器人进行发送

def send_ding():
    # allure报告结果json路径
    file_name = r'D:\test_daily\report\html\widgets\summary.json'
    with open(file_name, 'r', encoding='utf-8') as f:
        data = json.load(f)
    case_json = data['statistic']
    case_all = case_json['total']   # 测试用例总数
    case_fail = case_json['failed']     # 失败用例数量
    case_pass = case_json['passed']     # 成功用例数量
    if case_all >= 0:
        # 计算出来当前失败率
        case_rate = round((case_pass / case_all) * 100, 2)
    else:
        print('未获取到执行结果')
    # 发送报告内容
    text = f"用例通过率:{case_rate}%" \
           f"\n执行用例数:{case_all}个"   \
            f"\n成功用例数:{case_pass}个" \
            f"\n失败用例数:{case_fail}个" \
            # 这里的路径是我本地的路径,如果项目在服务器上运行,可以更改为服务器地址
            f"\n测试报告地址:http://10.72.5.82:9999/index.html"
    data = {"msgtype":
                "text","text":
        {"content":"%s"%text},
            "at": {
                # 要@的人
                "atMobiles": " ",
                # 是否@所有人
                "isAtAll": False
    }
            }
    url = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxx'
    headers = {'Content-Type': 'application/json'}
    r = requests.post(url,headers=headers,data=json.dumps(data))
    print(r.status_code)

错误分析

上述都完成了,进行运行代码执行时候,发现出现了一个问题,由于Allure报告自动打开时,服务没有关闭,导致无法继续执行下面发送钉钉的代码程序,所有这里小编进行通过加入多进程的方式来帮助我们进行运行。下面贴上完整代码

import requests
import os
import json
import multiprocessing
import time

def allure_report():
    # 运行测试用例,
    os.system('pytest test03.py --alluredir ./report/result ')
    # 生成allure报告
    os.system('allure generate report/result/ -o report/html --clean')
    # 自动打开allure报告
    os.system('allure serve report/result  -p 4545')

def send_ding():
    # allure报告结果json路径
    file_name = r'D:\test_daily\report\html\widgets\summary.json'
    with open(file_name, 'r', encoding='utf-8') as f:
        data = json.load(f)
    case_json = data['statistic']
    case_all = case_json['total']   # 测试用例总数
    case_fail = case_json['failed']     # 失败用例数量
    case_pass = case_json['passed']     # 成功用例数量
    if case_all >= 0:
        # 计算出来当前失败率
        case_rate = round((case_pass / case_all) * 100, 2)
    else:
        print('未获取到执行结果')
    # 发送报告内容
    text = f"用例通过率:{case_rate}%" \
           f"\n执行用例数:{case_all}个"   \
            f"\n成功用例数:{case_pass}个" \
            f"\n失败用例数:{case_fail}个" \
            f"\n测试报告地址:http://10.72.5.82:4545/index.html"
    data = {"msgtype":
                "text","text":
        {"content":"%s"%text},
            "at": {
                # 要@的人
                "atMobiles": " ",
                # 是否@所有人
                "isAtAll": False
    }
            }
    url = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxx'
    headers = {'Content-Type': 'application/json'}
    r = requests.post(url,headers=headers,data=json.dumps(data))
    print(r.status_code)
if __name__ == '__main__':
    # 执行生成allure报告
    a = multiprocessing.Process(target=allure_report)
    # 执行发送钉钉机器人
    b = multiprocessing.Process(target=send_ding)
    a.start()
    time.sleep(5)
    b.start()

直接执行程序后,allure报告自动运行打开,钉钉群中也收到了钉钉机器人的消息内容,点击群里的链接,可以直接进入到allure的测试报告,其中这里的ip地址为本机的ip地址,端口号为生成allure报告时设定。

总结

小编通过一个小的例子介绍了如何通过钉钉机器人发送测试报告以及如何统计allure的测试结果。当然通过钉钉机器人发送allure报告的方法不仅仅这一种,后续小编在继续给大家介绍其他方法。感谢您的阅读,希望能给您带来帮助