from selenium import webdriver
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import NoSuchElementException,WebDriverException
import selenium.webdriver.support.expected_conditions as EC
import time
from selenium.webdriver.chrome.options import Options
import io
import os
import re
import urllib2
from datetime import datetime
projectList=['*','**']
serverURL='****'
userProfile='C:/Users/***a'
consoleText='consoleText'
logPath='**'
def write_file(data,fileName):
file_name = logPath+fileName+r'.txt'
append_write = 'a'
if os.path.exists(file_name):
append_write = 'w'
f = open(file_name, append_write)
f.writelines(data)
f.close()
return file_name
def get_latest_version(driver,projectList,serverURL):
version=[]
for i in projectList:
### get latest version ID. Such as 31,32
url = serverURL+str(i)
driver.get(url)
click_submit(driver)
attr = driver.find_elements_by_css_selector("div.build-icon>a")[0].get_attribute("href")
buildId = attr.split('/')[-2]
### get log content with encoding utf-8
url = url+r'/'+buildId+r'/'+consoleText
driver.get(url)
time.sleep(2)
content = driver.page_source.encode("utf-8")
### write file to local, named with like rhel-buildId
### list format: os, logPath(local),buildId
version.append([i,write_file(content,i+'#'+buildId),buildId])
return version
def click_submit(driver):
if len(driver.find_elements_by_css_selector("input[name='j_password']")) > 0:
driver.find_element_by_css_selector("span[name='Submit'] button").click();
def get_test_summary(file_obj):
isSummary = False
result = []
for line in file_obj:
if not isSummary:
if 'Test Summary' in line:
isSummary = True
elif 'End of Summary' in line:
break
else:
result.append(line)
return result
def get_common_issues(list1,list2):
common_issues = []
result = [l for l in list1 if l in list2 and 'Failed: 0' not in l]
for ele in result:
if ele != '\r\n' and ele != '\n':
common_issues.append(ele)
print ele
return common_issues
def get_server_log_path(file_obj):
for line in file_obj:
if 'GQL Log is located at' in line:
return line.split()[-1]
def get_summary_list(version):
summary_list = []
for os_ele in version:
file_obj = open(os_ele[1],'r')
summary_list.append(get_test_summary(file_obj))
os_ele.append(get_server_log_path(file_obj))
file_obj.close()
return summary_list
def write_summary_log(summary_log_name, common_issues,baseUrl):
for com_is in common_issues:
com_is = com_is.split(':')[0]
try:
response = urllib2.urlopen(baseUrl+r'/'+com_is)
case_log_path = write_file(response,com_is+datetime.today().strftime('%Y-%m-%d'))
#print 'case log path:',case_log_path
except:
continue
f = open(case_log_path,'r')
data = f.read()
f.close()
match = re.findall(r'(?:(?!Test Case: ).)*Test Case: Fail',data,re.DOTALL)
for i in match:
if os.path.exists(summary_log_name):
append_write = 'a'
else:
append_write = 'w'
f = open(summary_log_name,append_write)
f.writelines('#########'+com_is+'#########')
f.write('\r\n')
if i.startswith('est Case:'):
i = i[i.find('\n'):]
for parsed in [line for line in i.split('\n') if line.strip() !='']:
f.writelines(parsed)
f.write('\r\n')
f.close()
print 'Summary file put in ', summary_log_name
options = webdriver.ChromeOptions()
options.add_argument('--user-data-dir='+userProfile)
driver = webdriver.Chrome(executable_path=r'C:/Python27/chromedriver.exe',chrome_options=options)
version = get_latest_version(driver,projectList,serverURL)
driver.quit()
summary_list = get_summary_list(version)
common_issues = get_common_issues(summary_list[0],summary_list[1])
baseUrl = version[0][-1]
print baseUrl
summary_log_name = logPath + datetime.today().strftime('%Y-%m-%d') + r'.txt'
if os.path.exists(summary_log_name):
os.remove(summary_log_name)
write_summary_log(summary_log_name, common_issues,baseUrl)

Python 写了个小程序,耗时一天,结果才100多行的更多相关文章

  1. 用python写一个定时提醒程序

    身体是革命的本钱,身体健康了我们才有更多精力做自己想做的事情,追求女神,追求梦想.然而程序员是一个苦比的职业,大部分时间都对着电脑,我现在颈椎就不好了,有时候眼睛还疼,我还没20阿,伤心...于是乎写 ...

  2. Python flask构建微信小程序订餐系统✍✍✍

    Python flask构建微信小程序订餐系统  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题, ...

  3. python实现串口通讯小程序(GUI界面)

    python实现串口通讯小程序(GUI界面) 使用python实现串口通讯需要使用python的pyserial库来实现,这个库在安装python的时候没有自动进行安装,需要自己进行安装. 1.安装p ...

  4. Python flask构建微信小程序订餐系统

    第1章 <Python Flask构建微信小程序订餐系统>课程简介 本章内容会带领大家通览整体架构,功能模块,及学习建议.让大家在一个清晰的开发思路下,进行后续的学习.同时领着大家登陆ht ...

  5. Python flask构建微信小程序订餐系统☝☝☝

    Python flask构建微信小程序订餐系统☝☝☝ 一.Flask MVC框架结构 1.1实际项目结构 1.2application.py  项目配置文件 Flask之flask-script模块使 ...

  6. python爬取微信小程序(实战篇)

    python爬取微信小程序(实战篇) 本文链接:https://blog.csdn.net/HeyShHeyou/article/details/90452656 展开 一.背景介绍 近期有需求需要抓 ...

  7. Python爬取微信小程序(Charles)

    Python爬取微信小程序(Charles) 本文链接:https://blog.csdn.net/HeyShHeyou/article/details/90045204 一.前言 最近需要获取微信小 ...

  8. Python 每日提醒写博客小程序,使用pywin32、bs4库

    死循环延迟调用方法,使用bs4库检索博客首页文章的日期是否与今天日期匹配,不匹配则说明今天没写文章,调用pywin32库进行弹窗提醒我写博客.

  9. 使用Python编写打字训练小程序【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/devcloud/article/detail ...

随机推荐

  1. 99%的Linux运维工程师必须要掌握的命令及运用

    本为同步于微信公众号[IT行业技术圈]关注即可查看更多相关知识点~ Linux对于程序员来并不陌生,随着图形化界面的深入人心,渐渐地命令行开始淡出了我们的视野,随着时间的推移也变得生疏且陌生起来.在此 ...

  2. BZOJ.5110.[CodePlus2017]Yazid 的新生舞会(线段树/树状数组/分治)

    LOJ BZOJ 洛谷 又来发良心题解啦 \(Description\) 给定一个序列\(A_i\).求有多少个子区间,满足该区间众数出现次数大于区间长度的一半. \(n\leq5\times10^5 ...

  3. windows安装nexus3

    1.下载nexus3 https://www.sonatype.com/download-oss-sonatype 2.解压文件D:\javatool\ 3.在path中配置环境变量 D:\javat ...

  4. Android应用程序MVC框架实例分析

    问题提出:如何优雅地分离出应用程序的状态.用户交互和数据表现?如何通过框架体现工程的高性能.高灵活性.高响应性? MVC定义:model.view.controller三者的有机组合,分别表示:模型. ...

  5. Jupyter notbook& REVEAL.JS& nbconvert 使用jupyter notebook制作slides

    使用Jupyter notebook作为slide主要有两个方面: 在运行notebook 的时候可以幻灯片播放 这样幻灯片就有了notebook可交互的功能,而notebook就有了幻灯片全屏容易分 ...

  6. S0.3 直方图

    目录 直方图(一) 直方图概念 直方图分类 直方图优点 直方图应用 opencv3直方图产生函数cvCalcHist() 画图函数 完整示例 直方图(一) 直方图概念 直方图是图像中像素强度分布的图形 ...

  7. Django模型操作常用方法

    1.Save() 基本方法:object.save() save顾名思义是保存的意思,在django中既可以进行新增也可以进行修改操作.具体判定的算法如下: 1.如果对象的主键属性为一个求值为True ...

  8. ElasticSearch + Canal 开发千万级的实时搜索系统

    公司是做社交相关产品的,社交类产品对搜索功能需求要求就比较高,需要根据用户城市.用户ID昵称等进行搜索. 项目原先的搜索接口采用SQL查询的方式实现,数据库表采用了按城市分表的方式.但随着业务的发展, ...

  9. __x__(13)0906第三天__xhtml 的语法规范

    html中不区分大小写,但是最好用小写. 注释不能嵌套. html标签必须结束,即 <></> 或者 <    /> html标签不能交叉嵌套. html的标签,有 ...

  10. __x__(19)0907第四天__ HTML5 文本标签 及 样式

    strong 表语义上的强调, em 表示语气上的强调: <strong>警告:离僵尸远点!</strong> 世界末日了,因为僵尸是<em>有毒的</em& ...