利用jira-python及selenium完成jira的统计报表及日报的填写

最近需要统计公司项目的jira项并需要将统计内容更新到confluence上,故利用jira-python及selenium编写相应的自动化脚本,避免重复性工作。

  1 from selenium import webdriver
  2 from selenium.webdriver.common.by import By
  3 from jira.client import JIRA
  4 import datetime
  5 
  6 driver = webdriver.Chrome()
  7 driver.implicitly_wait(10)
  8 
  9 def run():
 10     """
 11     login confluence
 12     :return: None
 13     """
 14     driver.get(confluence_url)
 15     login()
 16     click_key('#space-menu-link')
 17     driver.find_element_by_partial_link_text('data center').click()
 18     click_key('#plusminus3773763-0')
 19     click_key('#plusminus3774539-0')
 20     click_key('#plusminus3774542-0')
 21     click_key('#plusminus13533496-0')
 22     current_time = datetime.datetime.now().strftime("%Y%m%d")
 23     try:
 24         result = driver.find_element_by_partial_link_text('NSTS ({})'.format(current_time))
 25     except:
 26         result = None
 27     if result is None:
 28         create_new_page(0)
 29     else:
 30         result.click()
 31         click_key('#editPageLink')
 32     fill_data()
 33     click_key('#rte-button-publish')
 34 
 35 def login():
 36     """
 37     Keep the login status alive
 38     :return: None
 39     """
 40     result = driver.find_element(By.CSS_SELECTOR, '#loginButton')
 41     if result:
 42         input_key('#os_username', username)
 43         input_key('#os_password', password)
 44         click_key('#loginButton')
 45 
 46 def input_key(css_path, content):
 47     """
 48     Enter information into the input box.
 49     :param css_path: Locate the input box.
 50     :param content: Information for the input box.
 51     :return: None
 52     """
 53     driver.find_element(By.CSS_SELECTOR, css_path).clear()
 54     driver.find_element(By.CSS_SELECTOR, css_path).send_keys(content)
 55 
 56 def click_key(css_path):
 57     """
 58     Click the corresponding button
 59     :param css_path: Button path
 60     :return: None
 61     """
 62     driver.find_element(By.CSS_SELECTOR, css_path).click()
 63 
 64 def create_new_page(days):
 65     """
 66     Add a daily page if it is missing
 67     :param days: Daily's interval days
 68     :return: None
 69     """
 70     days += 1
 71     page_time = datetime.datetime.now() + datetime.timedelta(days=days)
 72     page_time = page_time.strftime("%Y%m%d")
 73     result = driver.find_element_by_partial_link_text('NSTS ({})'.format(page_time))
 74     if len(result) == 0:
 75         create_new_page(days)
 76     else:
 77         result.click()
 78         click_key('#action-menu-link')
 79         click_key('#action-copy-page-link')
 80         click_key('#copy-dialog-next')
 81         current_time = datetime.datetime.now().strftime("%Y%m%d")
 82         input_key('#content-title', 'NSTS ({})'.format(current_time))
 83         input_key('#tinymce>h2', '{}日报'.format(current_time))
 84 
 85 def jira_statistics(status=None, priority=None, severity=None):
 86     """
 87     Today's statistics of jira
 88     :return: The result of today's jira statistics
 89     """
 90     jira = JIRA(server=jira_url, basic_auth=(username, password))
 91     priority = 'and priority={}'.format(priority) if priority else ''
 92     severity = 'and 严重级别={}'.format(severity) if severity else ''
 93     if status:
 94         status = '({}, reopened)'.format(status) if status == 'open' else '({})'.format(status)
 95         issues_in_proj = jira.search_issues('project=NSTS  and status in {status} and issuetype="故障" and updated >= "-24H" {priority} {severity}'.format(status=status, priority=priority, severity=severity),
 96                                             maxResults=100)
 97     else:
 98         issues_in_proj = jira.search_issues('project=NSTS  and status in (open, reopened) and issuetype="故障" and updated < "-24H" {priority} {severity}'.format(priority=priority, severity=severity), maxResults=100)
 99     return len(issues_in_proj)
100 
101 def jira_result():
102     """
103     Summary the statistics of jira
104     :return: Summary result
105     """
106     result = []
107     # Different priority bug statistics
108     dif_pri_bugs = []
109     # Different severity bug statistics
110     dif_sev_bugs = []
111     # Covariance item
112     covariance_item = ['open', 'resolved', 'closed', None]
113     # Covariance item of priority
114     cov_item_of_pri = ['P0-Highest', 'P1-High', 'P2-Medium', 'P3-Low', 'P4-Lowest', None]
115     # Covariance item of severity
116     cov_item_of_sev = ['S0-Blocker', 'S1-Major', 'S2-Normal', 'S3-Minor', 'S4-Enhancement', None]
117     for k, v in enumerate(covariance_item):
118         dif_pri_bug = []
119         for x, y in enumerate(cov_item_of_pri):
120             dif_pri_bug.append(jira_statistics(status=v, priority=y))
121         dif_pri_bugs.append(dif_pri_bug)
122         dif_sev_bug = []
123         for i, j in enumerate(cov_item_of_sev):
124             dif_sev_bug.append(jira_statistics(status=v, severity=j))
125         dif_sev_bugs.append(dif_sev_bug)
126     result.append(dif_pri_bugs)
127     result.append(dif_sev_bugs)
128     return result
129 
130 def fill_data():
131     """
132     Fill the statistical results of jira into the table
133     :return: None
134     """
135     results = jira_result()
136     driver.switch_to.frame('wysiwygTextarea_ifr')
137     for index, result in enumerate(results):
138         for i, j in enumerate(result):
139             for x, y in enumerate(j):
140                 first_child = 15 if index == 0 else 18
141                 sencond_child = i + 1
142                 third_child = x + 2
143                 # fill data into bugfix table
144                 init_js = 'document.querySelector(\'#tinymce > table:nth-child({}) > tbody > tr:nth-child({}) > td:nth-child({})\').innerText={}; '.format(first_child, sencond_child, third_child, y)
145                 driver.execute_script(init_js)
146     driver.switch_to.default_content()
147 
148 if __name__ == '__main__':
149     run()
150     driver.quit()

统计结果样例如下:

 

 

转载于:https://www.cnblogs.com/Goongo/p/9898365.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Selenium来操控JiraSelenium是一个用于Web应用程序测试的自动化工具,它可以模拟用户在浏览器中的操作,包括点击、输入文本等。通过使用Selenium,你可以编写代码来操控Jira的用户界面,执行各种操作,如创建、编辑和删除问题,查看和修改问题的属性等。 要使用Selenium操控Jira,首先需要安装Selenium库和相应的浏览器驱动。你可以使用pip来安装Selenium库,具体命令如下: ``` pip install selenium ``` 然后,需要下载并安装与你使用的浏览器版本相匹配的驱动程序。Selenium支持多种浏览器,如Chrome、Firefox等。你可以在Selenium官方网站上找到对应的驱动下载链接。 安装完成后,你可以使用以下代码示例来演示如何使用Selenium操控Jira: ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys # 创建浏览器驱动 driver = webdriver.Chrome("path/to/chromedriver") # 打开Jira网站 driver.get("https://your-jira-url") # 登录Jira username = driver.find_element_by_id("username") username.send_keys("your-username") password = driver.find_element_by_id("password") password.send_keys("your-password") password.send_keys(Keys.RETURN) # 创建新问题 create_button = driver.find_element_by_id("create-issue") create_button.click() summary = driver.find_element_by_id("summary") summary.send_keys("Issue summary") description = driver.find_element_by_id("description") description.send_keys("Issue description") # 保存新问题 save_button = driver.find_element_by_id("save-issue") save_button.click() # 关闭浏览器驱动 driver.quit() ``` 以上代码示例演示了如何使用Chrome浏览器驱动来操控Jira。你需要将代码中的"https://your-jira-url"替换为你实际使用的Jira网站URL,并提供正确的用户名和密码。 当然,以上只是一个简单的示例,你可以根据自己的需求编写更复杂的代码来操控Jira。你可以使用Selenium提供的各种方法来查找元素、执行操作,以实现自动化的Jira任务管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值