【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,