持续集成 Jenkins 启动从节点上 appium 脚本,并生成 allure 报告

周小丽 · 2021年04月12日 · 2694 次阅读

从节点配置

1、新建节点,选择固定代理

2、点击确定进入下一步,最开始安装的时候启动方式这里只有两个选项

3、进入设置

4、在代理中选择如下配置

备注:如果 jenkins 是安装在 docker 上,则需要指定端口,并要求内网和外网映射出此端口,否则会导致节点机器连不上主机。

5、再回来创建新节点,启动方式选择通过启动 web 代理

备注:由于执行脚本时需要用到 java 环境,所以需要配置从节点机器上的 java 环境变量,注意 “键” 要求是 JAVA_HOME

6、下载 agent.jar,点击 launch 下载 slave-agent.jhlp。将这两个文件放到远程工作目录 C:/Jenkins 下。
有两种连接方式
(1)、Launch agent from browser:
载文件 slave-agent.jnlp 文件,双击打开。一般用在 Windows 系统上,需要 javaws.exe(在 Java 的 bin 目录中可以找到) 程序才能打开。如果提示错误,请卸载 JDK 后重新安装。
(2)、Run from agent command line:
复制粘贴并运行红色标记段话 java -jar slave.jar -jnlpUrl http://xxxxx 即可启动。

7、连接成功

项目配置

1、设置项目运行节点

2、通过命令行启动从节点的 python 脚本,并生成 allure 报告

备注:
(1)命令中需要加 --clean,表示生成新报告之前,会自动把原报告删除,否则会报错。
(2)通过 cmd 命令运行可能会报错,找不到引入的包名,但通过 PyCharm 工具执行是正常的,因为有些包 PyCharm 会自动下载。但命令行中执行 python 并不知道你的项目的 package 在哪里,所以你需要把项目的完整路径添加到 PYTHONPATH 这个环境变量中。因此需要在你的文件中添加如下代码:

import sys
import os
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)

3、构建后的操作

备注:
(1)首先需安装对应的插件 allure-jenkins-plugin  HTML Publisher plugin 在系统管理 -- 插件管理里面
(2)系统管理---global_tool_configuration,配置 allure commandline

报告查看

项目执行后,可通过如下标识查看测试报告

生成的报告如下样式:

测试结果发送到钉钉群

1、构建结果发送至钉钉群
第一步:新建一个钉钉群,创建钉钉机器人

保留机器人的
dingtalk webhook:https://oapi.dingtalk.com/robot/send?access_token=XXXXXX
关键词:警告
第二步:需要安装 dingding-notifications.hpi 插件至 Jenkins 中
第三步:在 Jenkins 的全局变量中配置钉钉的流程
通知时机:根据构建项目的成功与否来决定是否提示,可根据需要配置
id:不用填写,系统自动生成
名称:任意填写
关键字:将创建的机器人的关键字填入其中,点击测试测试通过会在钉钉群中发送 Jenkins 的消息

第四步:在项目中的局部变量中配置钉钉群中的通知人,如果不填写通知人内容可能系统默认谁也不发送,会收不到消息

第五步:点击立即构建,钉钉机器人就会发送构建结果如图:

2、自动化测试结果发送至钉钉群
第一步:新增项目,jenkins 是部署在 linux 服务器上,自动化环境是部署在 windows 服务器上,所以新建的项目要启动从节点 windows 服务器上的运行环境

第二步:构建脚本配置

pytest C:\Users\Administrator\PycharmProjects\ExcelUITest\script\ExcelEntrance.py --alluredir=./allure-results/
allure generate report/ -o allure-reports/ --clean
python C:\jenkins\workspace\Test_ZnbApp\Ding_send.py
exit 0

备注: --clean 要清除已存在的报告,exit 0 一定要放到最后一个 cmd 命令中

Ding_send.py 内容如下

# -*- coding: utf-8 -*-
# 获取jenkins构建信息和本次报告地址
import os
import jenkins
import json
import urllib3

# jenkins登录地址
jenkins_url = "http://******/jenkins/"
# 获取jenkins对象
server = jenkins.Jenkins(jenkins_url, username='***', password='***')
# job名称
job_name = "job/Test_ZnbApp/"
# job的url地址
job_url = jenkins_url + job_name
# 获取最后一次构建
job_last_build_url = server.get_info(job_name)['lastBuild']['url']
# 报告地址
report_url = job_last_build_url + 'allure'

'''
钉钉推送方法:
读取report文件中"prometheusData.txt",循环遍历获取需要的值。
使用钉钉机器人的接口,拼接后推送text
'''

def DingTalkSend():
    d = {}
    # 获取项目绝对路径
    path = os.path.abspath(os.path.dirname((__file__)))
    # 打开prometheusData 获取需要发送的信息
    f = open(path + r'/allure-report/export/prometheusData.txt', 'r')
    for lines in f:
        for c in lines:
            launch_name = lines.strip('\n').split(' ')[0]
            num = lines.strip('\n').split(' ')[1]
            d.update({launch_name: num})
    print(d)
    f.close()
    retries_run = d.get('launch_retries_run')  # 运行总数
    print('运行总数:{}'.format(retries_run))
    status_passed = d.get('launch_status_passed')  # 通过数量
    print('通过数量:{}'.format(status_passed))
    status_failed = d.get('launch_status_failed')  # 不通过数量
    print('通过数量:{}'.format(status_failed))

    # 钉钉推送

    url = 'https://oapi.dingtalk.com/robot/send?access_token=eef20c9fda7b6e1add1304e7c6662eaf3b6dfa23bbc2949ec26f0b1354a6f1a70'  # webhook
    con = {"msgtype": "text",
           "text": {
               "content": "智农保APP自动化脚本执行完成。"
                          "\n测试概述:"
                          "\n运行总数:" + retries_run +
                          "\n通过数量:" + status_passed +
                          "\n失败数量:" + status_failed +
                         # "\n构建地址:\n" + job_url +
                          "\n报告地址:\n" + report_url
           }
           }
    urllib3.disable_warnings()
    http = urllib3.PoolManager()
    jd = json.dumps(con)
    jd = bytes(jd, 'utf-8')
    http.request('POST', url, body=jd, headers={'Content-Type': 'application/json'})


if __name__ == '__main__':
    DingTalkSend()

注意:Ding_send.py 一定要放到构建项目的同级目录下

另外运行时报错说找不到 jenkins 这个模块时,可先执行如下命令:pip install python-jenkins

最后,运行结果如下:

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册