論壇的專案
自己的專案
import pandas as pd
import numpy as np
import altair as alt
import pymysql
from sqlalchemy import create_engine
import seaborn
import datetime
# 讀取資料
engine = create_engine('mysql+pymysql:')
sql = ''' select case_name ,result, platform_name, error_msg ,report_create_time from report_reportdetail; '''
df = pd.read_sql_query(sql, engine)
#選取2星期資料
df = df.set_index(pd.to_datetime(df["report_create_time"])).drop("report_create_time", axis=1)
week_ago = datetime.date.today() - datetime.timedelta(days=14)
df = df.sort_index().truncate(before=week_ago)
# 根據 error message區分
errormsg=df.loc[df['result']=='fail',:].groupby(['error_msg']).count().sort_values(by = ['result'], ascending = [false])
# select count(result) as i,error_msg from report_reportdetail where result = 'fail' group by error_msg order by i desc ;
# 選取failed case 和指定的平台
df0 =df.loc[(df['result']=='fail') ,:].copy()
df1 =df.loc[(df['result']=='fail')&(df['platform_name']=='aeqe') ,:].copy()
df2 =df.loc[(df['result']=='fail')&(df['platform_name']=='aeqv') ,:].copy()
#錯誤訊息太長
df0.loc[:, "error_msg_short"] = df1["error_msg"].str[0:60]
df1.loc[:, "error_msg_short"] = df1["error_msg"].str[0:60]
df2.loc[:, "error_msg_short"] = df2["error_msg"].str[0:60]
#多層索引
df0.set_index(['error_msg_short', 'case_name'], inplace=true) # 1. error_msg_short 為索引,排序就不會亂
# df0.set_index(['case_name', 'error_msg_short'], inplace=true) # 2. case_name 為索引,排序會亂
df1.set_index(['case_name', 'error_msg_short'], inplace=true)
df2.set_index(['case_name', 'error_msg_short'], inplace=true)
#按照索引分組
df0 =df0.groupby(level=df0.index.names).count() # 1.2. error_msg_short 為索引,排序就不會亂
df1 =df1.groupby(level=df1.index.names).count()
df2 =df2.groupby(level=df2.index.names).count()
# 按結果分析
# hw=df0.loc[(df0["result"]>0) ,:].rename(columns=).loc[:,['出現次數']].sort_values(by = ['出現次數'], ascending = [false]) # 1.2. error_msg_short 為索引,排序就不會亂
errormsgbycase=df0.loc[(df0["result"]>1) ,:].rename(columns=).loc[:,['出現次數']].sort_values(by = ['出現次數'], ascending = [false]) # 1.2. error_msg_short 為索引,排序就不會亂
aeqe=df1.loc[(df1["result"]>1) ,:].rename(columns=).loc[:,['出現次數']]
aeqv=df2.loc[(df2["result"]>0) ,:].rename(columns=).loc[:,['出現次數']]
aeqe_env=df1.loc[(df1["result"]<=1) ,:].rename(columns=).loc[:,['出現次數']]
aeqv_env=df2.loc[(df2["result"]<=3) ,:].rename(columns=).loc[:,['出現次數']]
aeqe_pr = df1.iloc[df1.index.get_level_values(1).str.contains('pr\d:')]
aeqv_pr = df2.iloc[df2.index.get_level_values(1).str.contains('pr\d:')]
# df.head(10)
# df[0:10]
# df
# df["report_create_time"]
# errormsg
errormsgbycase
# hw
# aeqe
# aeqv
# aeqv_pr
# aeqe_pr
# aeqe_env
data = errormsgbycase.reset_index()
fg = seaborn.factorplot(y='case_name', x='出現次數',col='error_msg_short', data=data, kind='bar')
fg.fig.set_size_inches(18,3)
fg.set_xlabels('')
自動定位失敗 自動化測試01
測試金字塔 1.1 測試的成本 ui自動化依賴於使用者介面,使用者介面發生變化,可能需要調整大量用例,用例維護成本較高 在使用者介面的測試中發現缺陷,修復缺陷的成本也是遠遠高於通過單元測試的成本。單元測試不依賴於使用者介面,維護成本較低 單元測試發現的缺陷可以盡早暴露缺陷,修復成本相對較低。1.2 ...
appium Hybird應用自動化
基於uiautomator chromedriver native部分走uiautomator,webview部分走chromedriver,兩者結合混搭,從而實現hybrid自動化 準備工作 step1 準備android 4.4 版本以上的手機 模擬器 webview.setwebcontent...
Android自動執行失敗的原因分析
android程式自動執行失敗的原因是因為接收不到boot completed廣播。而造成接收不到boot completed廣播可能的原因可能有以下幾個方面 1 boot completed對應的action和uses permission沒有一起新增 2 應用安裝到了sd卡內,安裝在sd卡內的應...