addproject

This commit is contained in:
qiaoxinjiu
2026-01-22 19:10:37 +08:00
commit 6994b185a3
184 changed files with 21039 additions and 0 deletions

View File

@@ -0,0 +1,55 @@
# -*- coding:utf-8 -*-
# 检查jenkins上的用例构建结果并根据用例失败数量将结果设置为通过或失败
import sys
import os
HERE = os.path.dirname(os.path.abspath(__file__))
WORKSPACE = os.path.abspath(os.path.join(HERE, '../../../'))
sys.path.append(WORKSPACE)
from base_framework.public_tools.xml_file_api import XmlFileApi
PROJECT_NAME = sys.argv[0]
# 指定 Robot Framework 输出文件的路径
HERE = os.path.dirname(os.path.abspath(__file__))
output_file = os.path.abspath(os.path.join(HERE, '../../../Report/out/output.xml'))
# 解析输出文件, 获取失败用例数量
xf = XmlFileApi(file_path=output_file)
result = xf.get_contain_by_tag_names(tag_names='statistics/total/stat')
failed_count = int(result[0]['attrib']['fail'])
# 按失败用例对应的qa人员标签,
if failed_count > 0:
result = xf.get_contain_by_tag_names(tag_names='statistics/tag/stat')
qa_info = {}
qa_failed_case_number = 0
for item in result:
if 'qa-' in item['text'].lower():
fail_case = int(item['attrib']['fail'])
if fail_case > 0:
qa_info[item['text'][3:]] = fail_case
qa_failed_case_number += fail_case
if len(qa_info) > 0:
print("失败用例对应的QA人员及失败用例数量:")
for key, value in qa_info.items():
print(f"{key}: {value}")
if failed_count > qa_failed_case_number:
print(f"无qa标签{failed_count - qa_failed_case_number}")
# 根据失败用例数量设置构建结果
if "-IT" in PROJECT_NAME: # it用例失败用例大于5个就标红
if failed_count > 5:
print(f"测试用例执行失败,共有 {failed_count} 个失败的用例。")
sys.exit(1) # 退出码为1表示构建失败构建结果将展示为红色
elif failed_count > 0:
print("测试用例小范围失败,但是不影响整体结果。")
sys.exit(0) # 退出码为0表示构建成功但此时受jenkins构建后步骤限制将展示为黄色
else:
print("测试用例执行成功,所有用例都通过了。")
sys.exit(0) # 退出码为0表示构建成功构建结果将展示为绿色
else: # st和smoking有失败用例就标红
if failed_count > 0:
print(f"测试用例执行失败,共有 {failed_count} 个失败的用例。")
sys.exit(1) # 退出码为1表示构建失败构建结果将展示为红色
else:
print("测试用例执行成功,所有用例都通过了。")
sys.exit(0) # 退出码为0表示构建成功构建结果将展示为绿色

View File

@@ -0,0 +1,68 @@
# coding: utf-8
from base_framework.public_tools.selenium_api import SeleniumWebUI
import time
class JenkinsAPI(SeleniumWebUI):
def __init__(self):
SeleniumWebUI.__init__(self)
self.project_info = {}
def jenkins_login(self, u_name=None, u_pwd=None):
""" 登陆jenkins """
if not u_name:
u_name = "admin"
u_pwd = "admin"
login_url = "http://39.170.26.156:8256/jenkins/login?from=%2Fjenkins%2F"
self.web_open_url(url=login_url)
self.web_send_keys(locator="//*[@id=\"j_username\"]", text=u_name)
self.web_send_keys(locator="//*[@name=\"j_password\"]", text=u_pwd)
self.web_click_element(locator="//*[@name=\"Submit\"]")
time.sleep(1) # 切换到构建墙
self.web_click_element(locator="//*[text()='1-用户产品组']")
time.sleep(1) # 显示用例数量
self.web_click_element(locator="//*[@title=\"Configure Build Monitor Settings\"]")
time.sleep(1)
self.web_click_checkbox(locator="//*[@id=\"settings-show-test-result\"]")
self.web_click_checkbox(locator="//button[text()=\"Done\"]")
def jenkins_find_all_case_number(self):
""" 从构建墙上读取用例数量 """
elements = self.web_find_elements(locator="//li[@ng-repeat=\"project in jobs track by project.hashCode\"]")
for element in elements:
item = element.text.split('\n')
case_number = item[1].split('/')
self.project_info[item[0]] = case_number[1]
def jenkins_edit_project_config(self, **kwargs):
""" 编辑工程配置信息 """
for jp in self.project_info:
case_number = int(self.project_info[jp])
if jp == "TO-IT":
jp = "TO-IT-TEST"
elif jp == "TO-SMOKING":
jp = "TO-SMOKING_NEW"
project_url = "http://10.250.200.1:8080/jenkins/view/1-%E7%94%A8%E6%88%B7%E4%BA%A7%E5%93%81%E7%BB%84/" \
"job/{}/configure".format(jp)
if "SMOKING" in jp or "-ST" in jp:
threshold = 99.999999 # 冒烟和ST用例需全部构建成功
else:
threshold = round((1-5.5/case_number)*100, 4) # 阈值
self.web_open_url(url=project_url) # 进入设置页面
self.web_send_keys(locator="//input[@name=\"_.unstableThreshold\"]", text=str(threshold))
self.web_click_checkbox(locator="//button[text()=\"保存\"]")
print("{}设置阈值{}完毕....".format(jp, threshold))
time.sleep(1)
if __name__ == '__main__':
ja = JenkinsAPI()
ja.jenkins_login()
time.sleep(3)
ja.jenkins_find_all_case_number()
ja.jenkins_edit_project_config()
time.sleep(3)
ja.web_close_browser()