跳到主要內容

發表文章

Appium+python自動化(四十一)-Appium自動化測試框架綜合實踐 - 即將落下帷幕(超詳解)

1.簡介   今天我們緊接着上一篇繼續分享Appium自動化測試框架綜合實踐 - 代碼實現。到今天為止,大功即將告成;框架所需要的代碼實現都基本完成。 2.data數據封裝 2.1使用背景 在實際項目過程中,我們的數據可能是存儲在一個數據文件中,如 txt,excel、csv文件類型。我們可以封裝一些方法來讀取文件中的數據來實現數據驅動。 2.2案例 將測試賬號存儲在 account.csv文件,內容如下: account.csv hg2018 hg2018 hg2019 zxw2019 666 222 參考代碼 2.3enumerate()簡介 enumerate()是python的內置函數 enumerate在字典上是枚舉、列舉的意思 對於一個可迭代的( iterable)/可遍歷的對象(如列表、字符串),enumerate將其組成一個索引序列,利用它可以同時獲得索引和值 enumerate多用於在for循環中得到計數。 2.4enumerate()使用 如果對一個列表,既要遍歷索引又要遍曆元素時,首先可以這樣寫: 參考代碼 list = [ " 這 " , " 是 " , " 一個 " , " 測試 " , " 數據 " ] for i in range(len(list)): print (i,list[i]) 上述方法有些累贅,利用 enumerate()會更加直接和優美: 參考代碼 list1 = [ " 這 " , " 是 " , " 一個 " , " 測試 " , " 數據 " ] for index, item in enumerate(list1): print (index,item) 3.數據讀取方法封裝   數據讀取方法也屬於公共方法,...

Appium+python自動化(四十一)-Appium自動化測試框架綜合實踐 - 即將落下帷幕(超詳解)

1.簡介   今天我們緊接着上一篇繼續分享Appium自動化測試框架綜合實踐 - 代碼實現。到今天為止,大功即將告成;框架所需要的代碼實現都基本完成。 2.data數據封裝 2.1使用背景 在實際項目過程中,我們的數據可能是存儲在一個數據文件中,如 txt,excel、csv文件類型。我們可以封裝一些方法來讀取文件中的數據來實現數據驅動。 2.2案例 將測試賬號存儲在 account.csv文件,內容如下: account.csv hg2018 hg2018 hg2019 zxw2019 666 222 參考代碼 2.3enumerate()簡介 enumerate()是python的內置函數 enumerate在字典上是枚舉、列舉的意思 對於一個可迭代的( iterable)/可遍歷的對象(如列表、字符串),enumerate將其組成一個索引序列,利用它可以同時獲得索引和值 enumerate多用於在for循環中得到計數。 2.4enumerate()使用 如果對一個列表,既要遍歷索引又要遍曆元素時,首先可以這樣寫: 參考代碼 list = [ " 這 " , " 是 " , " 一個 " , " 測試 " , " 數據 " ] for i in range(len(list)): print (i,list[i]) 上述方法有些累贅,利用 enumerate()會更加直接和優美: 參考代碼 list1 = [ " 這 " , " 是 " , " 一個 " , " 測試 " , " 數據 " ] for index, item in enumerate(list1): print (index,item) 3.數據讀取方法封裝   數據讀取方法也屬於公共方法,...

一文帶你深入了解 Redis 的持久化方式及其原理

Redis 提供了兩種持久化方式,一種是基於快照形式的 RDB,另一種是基於日誌形式的 AOF,每種方式都有自己的優缺點,本文將介紹 Redis 這兩種持久化方式,希望閱讀本文後你對 Redis 的這兩種方式有更加全面、清晰的認識。 RDB 快照方式持久化 先從 RDB 快照方式聊起,RDB 是 Redis 默認開啟的持久化方式,並不需要我們單獨開啟,先來看看跟 RDB 相關的配置信息: ################################ SNAPSHOTTING ################################ # # Save the DB on disk: # # save <seconds> <changes> # # Will save the DB if both the given number of seconds and the given # number of write operations against the DB occurred. # # In the example below the behaviour will be to save: # after 900 sec (15 min) if at least 1 key changed # after 300 sec (5 min) if at least 10 keys changed # after 60 sec if at least 10000 keys changed # save "" # 自動生成快照的觸發機制 中間的是時間,單位秒,後面的是變更數據 60 秒變更 10000 條數據則自動生成快照 save 900 1 save 300 10 save 60 10000 # 生成快照失敗時,主線程是否停止寫入 stop-writes-on-bgsave-error yes # 是否採用壓縮算法存儲 rdbcompression yes # 數據恢復時是否檢測 RDB文件有效性 rdbchecksum yes # The filename where to dump the DB # RDB...

一文帶你深入了解 Redis 的持久化方式及其原理

Redis 提供了兩種持久化方式,一種是基於快照形式的 RDB,另一種是基於日誌形式的 AOF,每種方式都有自己的優缺點,本文將介紹 Redis 這兩種持久化方式,希望閱讀本文後你對 Redis 的這兩種方式有更加全面、清晰的認識。 RDB 快照方式持久化 先從 RDB 快照方式聊起,RDB 是 Redis 默認開啟的持久化方式,並不需要我們單獨開啟,先來看看跟 RDB 相關的配置信息: ################################ SNAPSHOTTING ################################ # # Save the DB on disk: # # save <seconds> <changes> # # Will save the DB if both the given number of seconds and the given # number of write operations against the DB occurred. # # In the example below the behaviour will be to save: # after 900 sec (15 min) if at least 1 key changed # after 300 sec (5 min) if at least 10 keys changed # after 60 sec if at least 10000 keys changed # save "" # 自動生成快照的觸發機制 中間的是時間,單位秒,後面的是變更數據 60 秒變更 10000 條數據則自動生成快照 save 900 1 save 300 10 save 60 10000 # 生成快照失敗時,主線程是否停止寫入 stop-writes-on-bgsave-error yes # 是否採用壓縮算法存儲 rdbcompression yes # 數據恢復時是否檢測 RDB文件有效性 rdbchecksum yes # The filename where to dump the DB # RDB...

Netty學習篇⑤--編、解碼源碼分析

前言 學習Netty也有一段時間了,Netty作為一個高性能的異步框架,很多RPC框架也運用到了Netty中的知識,在rpc框架中豐富的數據協議及編解碼可以讓使用者更加青睞; Netty支持豐富的編解碼框架,其本身內部提供的編解碼也可以應對各種業務場景; 今天主要就是學習下Netty中提供的編、解碼類,之前只是簡單的使用了下Netty提供的解碼類,今天更加深入的研究下Netty中編、解碼的源碼及部分使用。 編、解碼的概念 編碼(Encoder) 編碼就是將我們發送的數據編碼成字節數組方便在網絡中進行傳輸,類似Java中的序列化,將對象序列化成字節傳輸 解碼(Decoder) 解碼和編碼相反,將傳輸過來的字節數組轉化為各種對象來進行展示等,類似Java中的反序列化 如: // 將字節數組轉化為字符串 new String(byte bytes[], Charset charset) 編、解碼超類 ByteToMessageDecoder: 解碼超類,將字節轉換成消息 解碼解碼一般用於將獲取到的消息解碼成系統可識別且自己需要的數據結構;因此ByteToMessageDecoder需要繼承ChannelInboundHandlerAdapter入站適配器來獲取到入站的數據,在handler使用之前通過channelRead獲取入站數據進行一波解碼; ByteToMessageDecoder類圖 源碼分析 通過 channelRead 獲取入站數據,將數據緩存至cumulation數據緩衝區,最後在傳給decode進行解碼,在read完成之後清空緩存的數據 1. 獲取入站數據 /** * 通過重寫channelRead方法來獲取入站數據 */ @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { // 檢測是否是byteBuf對象格式數據 if (msg instanceof ByteBuf) { // 實例化字節解碼成功輸出集合 即List<Object> out CodecOutputLi...

Hadoop壓縮的圖文教程

近期由於Hadoop集群機器硬盤資源緊張,有需求讓把 Hadoop 集群上的歷史數據進行下壓縮,開始從網上查找的都是關於各種壓縮機制的對比,很少有關於怎麼壓縮的教程(我沒找到。。),再此特記錄下本次壓縮的過程,方便以後查閱,利己利人。   本文涉及的所有 jar包、腳本、native lib 見文末的相關下載 ~   我的壓縮版本:   Jdk 1.7及以上 Hadoop-2.2.0 版本   壓縮前環境準備: 關於壓縮算法對比,網上資料很多,這裏我用的是 Bzip2 的壓縮方式,比較中庸,由於是Hadoop自帶的壓縮機制,也不需要額外下載別的東西,只需要在 Hadoop根目錄下 lib/native 文件下有如下文件即可:         壓縮之前要檢查 Hadoop 集群支持的壓縮算法: hadoop checknative 每台機器都要檢查一下,都显示如圖 true 則說明 集群支持 bzip2 壓縮, 如果显示false 則需要將上圖的文件下載拷貝到 Hadoop根目錄下 lib/native       壓縮程序介紹:   壓縮程序用到的類 getFileList(獲取文件路徑) 、 FileHdfsCompress(壓縮類)、FileHdfsDeCompress(解壓縮類) ,只用到這三個類即可完成壓縮/解壓縮操作。         getFileList 作用: 遞歸打印 傳入文件目錄下文件的根路徑,包括子目錄下的文件。開始想直接輸出到文件中,後來打包放到集群上運行時,發現文件沒有內容,可能是由於分佈式運行的關係,所以就把路徑打印出來,人工在放到文件中。   核心代碼: public static void listAllFiles(String path, List<String> strings) throws IOException { FileSystem hdfs = getHdfs(path); Path[...

Graphviz 畫圖的一些總結

Graphviz 是一個自動排版的作圖軟件,可以生成 png pdf 等格式。 一切以官方文檔為準,博客只是參考。這裏做一個自己學習的記錄。 dot 語言 Graphviz 構建組件為 圖,節點,邊,用屬性對其進行描述。 以下是定義DOT語言的抽象語法,約束的規則如下: 元素的終止以 粗體 显示 文字字符用單引號 '' 引起來 圓括號 () 的內容為必選項 方括號 [] 為可選項目 豎杠 | 為擇一選擇 聲明 結構 graph [ strict ] ( graph | digraph ) [ ID ] '{' stmt_list '}' stmt_list [ stmt [ ' ; ' ] stmt_list ] stmt node_stmt | edge_stmt | attr_stmt | ID ' = ' ID | subgraph attr_stmt ( graph | node | edge ) attr_list attr_list '['** [ a_list ] **']' [ attr_list ] a_list ID '=' ID [ ( ';' | ',') ] [ a_list ] edge_stmt (node_id | subgraph) edgeRHS [ attr_list ] edgeRHS edgeop (node_id | subgraph) [ edgeRHS ] node_stmt node_id [ attr_list ] node_id ...