【python】向Jira推送自动化用例执行成功

【python】连接Jira获取token以及jira对象

【python】向Jira测试计划下,附件中增加html测试报告

python 复制代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2025-02-12 14:15
# @Author  : duxiaowei
# @File    : put_filename_jira.py
# @Software: 这个文件是 : 将自动化用例运行结果,推送到jira


import requests
from jira import JIRA
from urllib.parse import urlencode

from com.connect_jira import ConnJira
from com.connect_mysql import DBmysql
from com.connect_sqllite import DBlite

# 配置连接jira
conn = ConnJira()
cookie, jira_server, jira = conn.jira_login()

"""
runId: jira库 ao_69e499_testrun 表中 run_id
status: 1-通过,2-失败,3-锁定,4-未执行,5-不适用
通过,失败,锁定,未执行,不适用
 1,	  2,    3,	4	,5
"""


def change_status(run_id, status):
    url = jira_server + "/rest/synapse/1.0/testRun/updateTestRunStatus"
    params = {
        "runId": run_id,
        "status": status
    }
    payload = {}
    headers = {'Cookie': cookie}
    full_url = url + '?' + urlencode(params)
    requests.request("PUT", full_url, headers=headers, data=payload)


"""
    cycle_name 测试周期名称,要求准确
    issuenum 用例编号
    返回  需要运行用例的id,也就是说这个run_id + 运行状态,能改变用例状态显示结果
"""


def get_run_id(cycle_name, issuenum):
    # first 根据测试周期名称查询,测试周期id
    # second 根据用例编号查询,用例id
    # third 通过 测试周期id,
    select = "select run_cycle.ID from " \
             "(select run.ID, run.TC_ID from jira.ao_69e499_testrun run where run.TEST_CYCLE_ID = " \
             "(select ID from jira.ao_69e499_testcycle cycle where cycle.NAME = %s)" \
             ") as run_cycle join jira.jiraissue issue on run_cycle.TC_ID = issue.ID and issue.issuenum = %s"
    arg = [cycle_name, issuenum]
    result = DBmysql().select(select, arg)
    # run_id
    return str(result[0][0])

# pytest获取运行结果,
# '2.10',测试周期参数,测试周期名称,cycle_name 测试周期名称,要求准确
def get_pytest_result(cycle_name):
    sql_query = "select jira_num,result from pytest_result where cycle_name=?"
    arg = (cycle_name,)
    cycle_lots = DBlite().select(sql_query, arg)
    # print(cycle_lot)
#     遍历所有,去调用发送更新
    for cycle_lot in cycle_lots:
        run_id = get_run_id(cycle_name, cycle_lot[0])
        # 1 - 通过,2 - 失败,3 - 锁定,4 - 未执行,5 - 不适用
        if cycle_lot[1] == 'passed':
            status = '1'
        elif cycle_lot[1] == 'failed':
            status = '2'
        else:
            status = '4'
        # 去执行更新
        change_status(run_id, status)

# 给一个执行周期号,根据周期好,查询pytest_result表,返回给jira
# cycle_name = '2.10'
# get_pytest_result(cycle_name)

# 给我一个周期号,我需要先去查询,这个周期下有哪些用例,去mysql查询, 还需要查询出测试计划的issue号,用于生成测试报告
# 查询到用例后,我需要将用例号跟我的pytest_ready里面的用例号去关联
# 然后根据,ready表里面筛选出来的号,
# 去执行
# 执行之后,更新result表cycle_name字段,记录当前用例被那些周期执行过,根据jira_num将执行结果,返回给jira,

pytest_result表结构

sql 复制代码
create table pytest_result
(
	id INTEGER not null
		constraint pytest_result_pk
			primary key autoincrement,
	file_name varchar(100),
	class_name varchar(50),
	def_name varchar(60),
	result varchar(10),
	result_time TIMESTAMP DEFAULT (datetime('now', 'localtime')),
	status INT default 0,
	create_time TIMESTAMP DEFAULT (datetime('now', 'localtime')),
	duration varchar(30),
	message TEXT,
	cycle_id INTEGER,
	jira_num_list TEXT
);
相关推荐
xuemenghan19 分钟前
Numba 从零基础到实战:解锁 Python 性能新境界
开发语言·python
明月看潮生23 分钟前
青少年编程与数学 02-016 Python数据结构与算法 22课题、并行算法
开发语言·python·青少年编程·并行计算·编程与数学
明月看潮生30 分钟前
青少年编程与数学 02-016 Python数据结构与算法 20课题、几何算法
python·算法·青少年编程·编程与数学
limengshi1383921 小时前
使用Python+xml+shutil修改目标检测图片和对应xml标注文件
xml·python·目标检测
计算机徐师兄2 小时前
Python基于Django的房屋信息可视化及价格预测系统(附源码,文档说明)
python·房屋信息可视化·房屋价格预测系统·房屋价格预测·房屋分析·python房屋信息可视化系统·python房屋价格预测系统
木觞清2 小时前
使用Python爬取豆瓣电影Top250并保存到Excel完整教程
开发语言·python
Start_Present2 小时前
Pytorch 第十五回:神经网络编码器——GAN生成对抗网络
pytorch·python·神经网络·生成对抗网络·数据分析
水w2 小时前
【Python爬虫】简单案例介绍3
开发语言·爬虫·python·scrapy·beautifulsoup
weixin_307779132 小时前
Python Pandas实现导出两个Excel数据集的分组记录数分析
开发语言·python·pandas
陌漠ardently3 小时前
正则表达式和excel文件保存(python)
python·mysql·excel