python接口自动化测试日常构建项目分享:docker+jenkins+python+allure+nginx+飞书通知(下)

一、背景

        上篇分享了如何在服务器中部署docker+jenkins+python+allure+nginx,在这些环境准备好后,本篇继续分享如何使用jenkins实现日常构建接口自动化测试,并将测试简报发送到飞书通知

二、jenkins任务的创建及执行

2.1 新建jenkins任务

添加Git仓库信息后,每次构建任务都会先从仓库拉取所配置的最新分支代码来执行

使用浏览器打开jenkins页面并登录

复制代码仓库链接

 添加Git仓库的账号密码或者其它验证方式

配置任务时若找不到Git选项,或Git选项无法正常使用,可前往系统管理-插件管理更新或安装Git插件

 选择所保存的账密,Repository URL下方的红字消失,表示验证通过

默认master分支

添加构建步骤-执行shell

 命令python3 run.py会在jenkins容器中的工程目录下执行

 可以加一个pwd验证一下执行命令的路径

最后保存配置!

2.2 构建任务

此处贴一下我的run.py文件中的运行命令

先执行pytest框架的接口自动化脚本

然后执行allure命令读取report/tmp下的测试数据,生成html测试报告保存到report/html目录下

上文的执行shell可根据你的run.py所执行的命令具体调整

点击立即构建验证配置

        静待任务执行完成,进入到刚刚的构建记录,点击控制台输出,可以看到控制台日志以及pwd命令输出的当前执行路径

2.3 修改nginx配置

使用jenkins-allure插件生成的报告,在访问时需要登录jenkins账号,nginx代理的不需要登录

在构建jenkins任务时使用pwd已经看到了项目根目录路径,run.py文件中我将生成的html测试报告存在report/html,将两者拼接到一起,就是我的html测试报告所在的路径(其中/apitest是jenkins任务名,如果你jenkins容器的启动命令及生成测试报告的路径和我一样,那下面这个路径也是一样的)

/var/jenkins_home/workspace/apitest/report/html

修改nginx配置文件

vim /usr/local/src/nginx/conf/nginx.conf

listen的端口号在上篇时已经修改过了,现在只需要修改查找html文件的根目录

将默认的html替换为测试报告所在的路径,并保存

 2.4 重载nginx配置

# nginx运行中时使用,重新加载nginx配置文件
nginx -s reload

再次使用浏览器访问<服务器ip:nginx端口号>,请求到的就是allure测试报告

2.5 修改时区

jenkins默认使用的是格林尼治时间,与北京时间有8个小时时差,因此在做定时构建前需要先修改时区

这里介绍一个比较简单,不需要修改配置文件的方法

时区的修改分为两个,一个是用户时区,一个是定时构建时区(配置定时构建时一并进行)

这里就是用户时区,现在显示的是格林尼治时间,比北京时间快8小时

进入系统管理 

 点击管理用户

 选择修改当前登录的用户

 

 在最下方找到time zone,将其修改为上海Asia/Shanghai,并保存

 完成修改用户时区后,界面看到的时间已经更新为了国内的北京时间

  

2.6 jenkins定时构建

进入任务,修改配置

Git信息在上篇已经配置过了

先使用TZ=Asia/Shanghai定义构建使用的是国内时区(如果修改过jenkins配置文件的时区,这里就不用定义了)

0 10 * * * 代表着每天10:00执行一次

第一位的0是分钟,例:5 * * * * 代表每5分钟执行一次

第二位的10是小时,第三位的*是一个月的第几天,第四位的*是一年中的第几月,第五位的*是一周中的第几天,具体根据你的需求来设置

执行的shell中我增加了每次运行前先删除测试结果数据的文件夹,保证测试结果都是最新的

生成allure报告的命令allure generate report/tmp -o report/html --clean中,--clean清除的是输出报告路径report/html

保存以上配置,我们的接口自动化测试脚本就会在每天的10点执行,allure测试报告也会保持最新的测试结果

三、测试结果通知

3.1 效果预览

有这样一个测试结果简报,我们可以及时知道自动化测试执行了没有,通过率如何,如果全通过且耗时正常就不需要查看详细的allure报告

3.2 飞书配置

 参考飞书官方文档:开发文档 - 飞书开放平台

首先得有一个飞书群,可以新建一个单人群作调试用

在飞书群的右上角···点开设置,添加群机器人

 webhook地址需要保存下来,我这里开启了签名校验

这样我们就成功在群里添加了通知机器人,并获得了webhook地址

测试通知请阅读上方的飞书开发者文档,不再赘述

3.3 webhook代码

jenkins有webhook插件,但不易自定义消息内容,要想实现测试结果简报的内容,我们可以使用python自定义推送的内容

其中有一个ENVIRONMENT是从配置文件传递过来,其它的将密钥、webhook地址、allure报告地址更换一下即可使用

直接贴上webhook.py内容

# -*- coding: utf-8 -*-

import requests, time, datetime
import hashlib
import base64
import hmac
from config.setting import ENVIRONMENT


secret = "xxxxxxxxxxxxxxxxxxxx"     # 飞书机器人密钥
url = "https://open.feishu.cn/open-apis/bot/v2/xxxxxxxxxxxxxxxxxx"   # 飞书webhook地址
server_url = "http://120.xx.xx.xxx:9091"  # allure地址,即服务器ip:nginx端口号

def buildresult():
    '''
    获取构建结果的概要数据,以发送简略报告文本到飞书
    '''
    report_hearder = {"Accept": "application/json, text/javascript, */*; q=0.01"}
    test_res = requests.get(server_url + "/widgets/summary.json", headers=report_hearder)   # 获取用例执行情况
   
    total = test_res.json()['statistic']['total']   # 执行用例总数
    passed = test_res.json()['statistic']['passed']   # 通过数
    skipped = test_res.json()['statistic']['skipped']   # 跳过数
    failed = test_res.json()['statistic']['failed'] + test_res.json()['statistic']['broken']   # 失败数,我将失败和故障的均算在了失败数
    try:
        passed_rate = f'{round(passed / total * 100)}%'   #通过率
        exetime_0 = round((test_res.json()['time']['duration'] / 1000), 2)  # 执行时长
        exetime = f'{exetime_0}秒'
    except:
        passed_rate = exetime = '执行失败啦!!!快检查下!!!'
    return total, passed, skipped, failed, passed_rate, exetime

def gen_sign(timestamp, secret):
    '''
    签名校验,若飞书机器人未开启签名校验,则可忽略这一步
    '''
    # 拼接timestamp和secret
    string_to_sign = '{}\n{}'.format(timestamp, secret)
    hmac_code = hmac.new(string_to_sign.encode("utf-8"), digestmod=hashlib.sha256).digest()

    # 对结果进行base64处理
    sign = base64.b64encode(hmac_code).decode('utf-8')

    return sign

def feishu_webhook():
    timestamp = int(time.time())
    print(timestamp)
    sign = gen_sign(timestamp, secret)
    print(sign)
    total, passed, skipped, failed, passed_rate, exetime = buildresult()
    header = {"Content-Type": "application/json"}
    data = {
        "timestamp": timestamp,
        "sign": sign,
        "msg_type": "post",
        "content": {
            "post": {
                        "zh_cn": {
                                "title": f"接口自动化测试执行完成",
                                "content": [
                                        [{
                                                        "tag": "text",
                                                        "text": "简略测试报告 \n"
                                                                f"- 执行环境:{ENVIRONMENT} \n"
                                                                f"- 通过率:{passed_rate} \n"
                                                                f"- 测试用例总数:{total} \n"
                                                                f"- 通过数:{passed} \n"
                                                                f"- 失败数:{failed} \n"
                                                                f"- 总耗时:{exetime} \n"
                                                                f"- Allure测试报告:"
                                                },
                                                {
                                                        "tag": "a",
                                                        "text": "查看详细测试报告",
                                                        "href": f"{server_url}"
                                                }
                                        ]
                                ]
                        }
                }
        }
    }
    res = requests.post(url=url, headers=header, json=data)
    print(res.json())

if __name__ == '__main__':
    feishu_webhook()

然后在run文件中输出测试报告后加上webhook.py的运行命令,即可实现报告生成后自动发送报告到飞书

现在,将代码推到远程仓库,立即构建jenkins任务试试吧,有问题欢迎评论区留言

四、总结

        至此,jenkins会在设置好的时间点,自动拉取Git仓库中最新的代码分支,构建执行自动化脚本,测试完成之后发送测试报告到飞书群这一工作流程。

欢迎评论区指正与讨论!

  • 22
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建一个接口自动化测试框架可以使用以下工具和技术: 1. Python:作为主要开发语言,可以使用Python来编写测试脚本和测试用例。 2. Pytest:一款功能强大的Python测试框架,可以用于编写和运行测试用例,并提供丰富的断言和报告功能。 3. Allure:一个开源的测试报告生成工具,可以生成美观且易于理解的测试报告,支持多种语言和框架。 4. Git:版本控制工具,用于管理和同步测试代码。 5. Jenkins:一个持续集成和持续交付工具,可以自动化运行测试用例并生成测试报告。 6. Docker:容器化平台,可以用于创建和管理测试环境,提供一致的运行环境。 下面是搭建接口自动化测试框架的步骤: Step 1: 创建项目结构 在本地创建一个目录作为项目根目录,然后在根目录下创建以下子目录: - `tests`:存放测试脚本和测试用例; - `reports`:存放测试报告; - `config`:存放配置文件; - `utils`:存放一些工具类和函数。 Step 2: 编写测试用例 在`tests`目录下编写测试脚本和测试用例。可以使用Pytest来组织和执行测试用例,使用断言来验证测试结果。 Step 3: 配置Allure报告 在`config`目录下创建一个`pytest.ini`文件,配置Allure报告的相关参数,例如报告保存路径、报告标题等。 Step 4: 运行测试用例 使用Pytest运行测试用例,并生成Allure报告。可以使用命令行或者集成到Jenkins中进行自动化执行。 Step 5: 集成Git和Jenkins项目代码托管到Git仓库中,并在Jenkins中配置相关任务,使其在代码提交后自动触发测试用例的运行和报告的生成。 Step 6: 创建Docker镜像(可选) 使用Docker将测试环境打包成镜像,方便部署和维护。 一些可能出现的问题和解决方法: 1. 安装依赖:在搭建过程中,可能会遇到安装依赖包的问题。可以使用pip来安装所需的Python包,并注意版本兼容性。 2. 配置问题:在配置AllureJenkins时,可能会遇到配置不正确或缺少必要参数的问题。可以参考官方文档或者搜索解决方案来解决这些问题。 3. 报告生成失败:如果生成Allure报告失败,可以检查相关依赖是否安装正确,以及路径和权限是否设置正确。 4. 测试环境问题:如果测试用例在不同环境中运行时出现问题,可以考虑使用Docker来创建一致的测试环境,或者在测试用例中添加环境适配代码。 相关问题: 1. 除了Allure,还有哪些常用的测试报告生成工具? 2. 如何在Pytest中使用断言来验证测试结果? 3. 如何在Jenkins中配置任务来触发自动化测试? 4. 除了接口自动化测试,还有哪些类型的自动化测试可以使用Python实现?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值