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

【python】连接Jira获取token以及jira对象
【python】解析自动化脚本文件并按照=测试周期=存储记录
【python】向Jira推送自动化用例执行成功
【python】向Jira测试计划下,附件中增加html测试报告

#!/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):
    """改变用例状态

    :param run_id: jira库 ao_69e499_testrun 表中 run_id
    :param status: 1:通过,2:失败,3:锁定,4:未执行,5:不适用
    """
    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)


def get_run_id(cycle_id, issuenum):
    """获取运行run_id

    :param cycle_id: 测试周期id
    :param issuenum: 用例编号
    :return:返回  需要运行用例的id,也就是说这个run_id + 运行状态,能改变用例状态显示结果
    """
    select = "SELECT  run.ID  FROM ao_69e499_testcycle cycle JOIN " \
             "ao_69e499_testrun run ON run.TEST_CYCLE_ID=cycle.ID JOIN " \
             "jiraissue issue ON issue.ID=run.TC_ID WHERE cycle.ID = %s and issue.issuenum = %s"
    arg = [cycle_id, issuenum]
    result = DBmysql().select(select, arg)
    return str(result[0][0])


def get_pytest_result(cycle_id):
    """ jira 筛选出要执行的 ,pytest获取运行结果,put 更新jira ,传测试周期id"""
    lite_jira_list = "select jira_num from pytest_jira where cycle_id=?"
    arg = (cycle_id,)
    jira_num_list = DBlite().select(lite_jira_list, arg)

    """ 执行结果进行筛选"""
    for jira_num in jira_num_list:

        sql_query = "select result from pytest_result where jira_num_list like ?"

        arg = (f"%{jira_num[0]}%",)
        status_lots = DBlite().select(sql_query, arg)
        if len(status_lots) != 0:
            """
                遍历每一个结果,如果有有一个失败或跳过,就不会发送成功!
            """
            for i in status_lots:
                # 默认成功,有一个跳过-就未执行,一个失败,都是失败!
                status = '1'
                if i[0] == 'failed':
                    status = '2'
                    break
                if i[0] == 'skipped':
                    status = '4'
                    break

            run_id = get_run_id(cycle_id, jira_num)
            # 1 - 通过,2 - 失败,3 - 锁定,4 - 未执行,5 - 不适用
            # 去执行更新
            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,



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值