工程師補給站

用一套方法論去設計許多方法來解決工程上遇到的問題。 即 "一生萬法、萬法圓通"。

Recent in Recipes

3/Food/post-list

Selenium 入門

 1. pip3 install selenium (python client package)

2. Download chrome Driver and put it at any easy access path  


3. Writing an hello Selenium



自動化測試框架PO/POM設計模式

 以這個框架為範例來理解ETG-AF的架構:


1. 你還不明白自動化的POM設計模式,一篇文章統統告訴你!


2. 自动化测试之POM设计模式的原理与实现



3. 一个基于POM模式的Web自动化测试框架



4. selenium自動化測試框架PO設計模式



5. po設計模式在UI自動化測試中的實踐



6. 初探自動化測試框架(python)序章——框架結構



7. 自動化測試po分層如何實現?


8.UI自动化之分层思想pom模式







Python主講移動端自動化測試框架Appium 從基礎到項目實戰
說到APP自動化測試,Appium可是說是非常流行了, 不僅支持多語言、多平台的優勢,同時支持Andriod、iOS、H5的自動化測試;本課程會從初級的Appium框架講起,涉及業界常見的po模型、關鍵字模型、服務自動化、持續集成等實戰講解,讓你快速上手移動端自動化測試工作,高薪工作手到擒來!

技術儲備要求:
瞭解Selenium、Webdriver基礎知識
有一定的Python語法基礎
熟悉APP功能測試

第1章 appium環境到基礎函數的封裝

    通過環境搭建得思路分析將環境搭建起來,通過Appium的原理刨析整個運行過程,以慕課網啟動到登陸的實際例子為切入點,深入講解appium的id、className、層級定位、list定位、UIAutomator定位、xpath定位、H5定位等基礎知識和常見api使用,函數封裝等。...
        1-1 課程目標及課程規劃-導學 試看
        1-2 Appium簡介及工作原理
        1-3 Appium環境搭建
        1-4 讓Appium跑起來
        1-5 android工具使用介紹
        1-6 appium啟動代碼配置講解
        1-7 啟動日誌分析
        1-8 頁面滑動及初級使用
        1-9 頁面簡單滑動函數封裝
        1-10 driver和滑動函數封裝結合
        1-11 如何切換activity-解決真機無法啟動問題
        1-12 id定位進行登錄操作
        1-13 className定位解析
        1-14 層級定位思想分析
        1-15 層級定位和list定位結合實戰
        1-16 通過UIAutomator進行定位用戶信息
        1-17 通過xpath進行定位用戶信息
        1-18 原生app和H5進行相互切換代碼實戰
        1-19 如何獲取tost元素
    第2章 PO模型設計

    以po設計思想為切入點,通過實際項目登陸頁面實際講解如何去設計po模型,如何在實際工作中去封裝模型中需要的各個工具類,通過慕課網的整個登陸為實例完成了po模型的整個設計到開發。
        2-1 讀取配置文件基礎代碼講解
        2-2 讀取配置文件代碼封裝實戰
        2-3 定位信息封裝思路講解
        2-4 封裝定位信息
        2-5 分層思想 試看
        2-6 封裝page層
        2-7 封裝handle層
        2-8 封裝business層
    第3章 Unittest的使用

    Unittest是python語言中最常見的測試框架,我們以Unittest的初級使用為切入點,再通過結合po模型為實際例子來講解Unittest在實際項目中如何運行以及生成測試報告的。
        3-1 unittest的簡單使用
        3-2 unittest中斷言的使用
        3-3 unittest中case的管理
        3-4 unittest中HTMLTestRunner的使用
        3-5 多線程的初級使用
        3-6 多線程和unittest、HTMLTestRunner結合使用
    第4章 appium服務介紹

    以Appium-Server環境搭建為切入點,通過命令的初級使用及啟動,結合前面po模型完成初級自動化框架搭建。
        4-1 appium命令行環境搭建以及參數的使用
        4-2 命令行啟動和腳本結合
        4-3 page層封裝driver
    第5章 一鍵自動化從設計到實戰

    以慕課網的登陸為例,講解如何實現一鍵自動化,通過如何設計為切入點,然後通過慕課網實例講服務自動化完成,最後將服務自動化和Unittest、HTMLTestRunner、多進程、PO模型等結合,實現整個框架從設計到開發,最終實現系統根據用戶插入的設備數自動在每個設備上去跑case。...
        5-1 服務端設計思路
        5-2 封裝執行命令方法
        5-3 重構封裝獲取設備信息類
        5-4 檢測端口是否被佔用
        5-5 封裝生成可用端口方法
        5-6 封裝生成啟動命令行函數
        5-7 封裝多線程啟動appium服務
        5-8 清理appium環境
        5-9 通過yaml文件獲取命令行數據
        5-10 多線程啟動appium和寫入命令到文件
        5-11 多線程和unittest和po結合問題剖析
        5-12 多線程、unittest、啟動服務邏輯串聯
        5-13 多線程、unittest、啟動服務、流程梳理代碼重構
        5-14 多進程、unittest、HTMLTestRunner、啟動服務流程梳理代碼重構
    第6章 關鍵字模型從設計到實戰

    關鍵字模型和po模型是自動化測試中運用得最多的模型,本章節以慕課網啟動、登陸為例,通過講解如何設計關鍵字模型,如何封裝常用工具類。並且通過實戰講解從設計到開發完成整個關鍵字模型,讓學習更徹底。
        6-1 關鍵字模型設計思想以及方向
        6-2 操作excel的初級代碼講解
        6-3 重構封裝操作excel方法
        6-4 封裝操作函數類
        6-5 封裝獲取數據的類
        6-6 分析關鍵字模型實現邏輯 試看
        6-7 關鍵字模型邏輯代碼設計封裝
        6-8 關鍵字模型邏輯梳理之代碼重構-1
        6-9 關鍵字模型邏輯梳理之代碼重構-2
        6-10 關鍵字模型邏輯梳理之代碼調錯
        6-11 關鍵字模型總結
        6-12 關鍵字模型之判斷元素是否存在回寫結果
    第7章 持續集成講解

    持續集成是自動化必不可少的知識,課程通過最基礎的環境搭建到最後的項目配置,帶大家完成一次實際操作版的持續集成。
        7-1 持續基礎環境搭建
        7-2 持續集成項目配置
    第8章 查漏補缺

    知識學不完,本章節主要是通過查漏補缺的形式將項目中或者一些特殊情況的處理方式通過實際例子呈現給大家。
        8-1 日誌模塊收集
        8-2 錯誤截圖方法重構

專案管理




 

編程技巧進階修練 -- Python 篇

1. OOP (物件導向)

2. Refactoring (重構並簡化)

3. Pythonic Style (善用Python獨門技巧)

4. Comprehensive Application(全面的應用範例)


1. OOP (物件導向)



2. Refactoring (重構並簡化它)




3.Pythonic Style (善用Python獨門技巧)





4.Comprehensive Application(全面的應用範例)



如何 自製 Testing Framework

 先從觀摩開始吧 ...

Testing Framework

chineseluo/app_auto_frame_v1: app自动化:使用pytest、appium、allure搭建,测试交流群:自动化测试-夜行者(816489363))
liwanlei/appium-python3: appium UI 自动化测试框架
hujunalex1/appium_PO
CommonDevKnowledge/全面总结国内BATH等大厂开源的安卓有关的库.md at master · AweiLoveAndroid/CommonDevKnowledge
openatx/uiautomator2: Android Uiautomator2 Python Wrapper
fectong/AppiumPythonTest24: Appium Python Unittest
hagyao520/Appium: 基于Appium的App自动化测试框架完美版
SilongLi/AutoUITestDemo: 移动端UI自动化测试,Appium + Cucumber测试模式的Demo。https://www.jianshu.com/p/c3db8e5dc306
Android 开发人员自动化测试.md
Rain0193/Appium-1: 基于Appium的App自动化测试框架
Rain0193/HTMLReport: HTMLReport是一个单元测试测试运行器,可以将测试结果保存在Html文件中,用于人性化的结果显示。仅支持Python 3.x
CartierEJ/移动自动化测试框架Cartier介绍.md at master · haifengrundadi/CartierEJ
ttraveler/robotium-as-demo: robotium自动化测试
mer163/jscq_autotest: 公司内部测试管理平台
ShaoNianyr/Autotest_platform: 一款基于 POM 模式开发的 Web UI 自动化测试平台
unmurphy/appium-rogue: 基于python实现的appium自动化测试工具
pengchenglin/ATX-Test: 基于ATX-Server的UI自动化测试框架,可以实现多设备的并行测试,并生成统一的测试报告
Lemonzhulixin/python-appium: 基于PageObject UI自动化测试框架,支持Android/iOS
hoozheng/AndroidRobot: Android自动化测试
appium/intro.md at master · appium/appium
jerrylizilong/autotest_platform: Python+flask+selenium 搭建UI自动化测试平台
【自研開源】出色的一站式自動化測試平臺ATP-UI自動化篇_程式設計師一凡 - MdEditor
Allure Framework
alibaba/macaca: Automation solution for multi-platform. 多端自动化解决方案
Tencent/QT4W: Web driver for QTA



這個專案應該包了Roson想要的東西(把shell command 封裝到Python 裡面)

這應該是一個學習者的專案


這是一個搭配Appium的專案


Android 手機端自動化測試框架

Android 手機自動化測試工具有哪幾種?

Allure Framework

Macaca實戰之二:自動化框架基礎,超詳細

也到Google上找找吧






DP2 建造者模式 Builder

 1. factory method


2. Builder


DP1 抽象工廠 Section1.2 Abstract Factory

 代碼布局(佈陣)


1. FrogWorld 和 WizardWorld 代表抽象工廠。因為是Python的關係,所以它把上一階應該要有的Interface約定省略掉了,而透過 make_character 和 make_obstacle 來實作共同的接口。 In a statically typed language, the Abstract Factory would be an abstract class/interface with empty methods, but in Python this is not required because the types are checked in runtime. (因為對Python定義一個空的Class 是沒有實質意義的)
2. The GameEnvironment is the main entry point of our game. It accepts factory as an input, and uses it to create the world of the game. 
3. The play() method initiates the interaction between the created hero and the obstacle







DP1 工廠方法 Section1.1 Factory Method

1. 對於代碼分類和包裝的實用技巧,使它看起來簡潔、優雅。

2. 透過一個工廠方法(connection_factory)去生成一個(產品)實例,而不是用hardcode的方式去生成一個實例。The connection_factory() function is a Factory Method. It returns an instance of  JSON Connector or XMLConnector depending on the extension of the input file path

3.這個方法附帶了生成的條件(if-elif condition), 因此產生了彈性。

4.再把這個方法在包裝一層例外處理的機制,使這個功能加穩固。

5.用來確認異常處理是否有效

6.透過XPath用來匹配符合條件的資料筆(Record)

查找所有包含姓(last name)为 Liar 的 person 元素。对于每个匹配到的元素,展示其基本的姓名和电话号码信息

7.這裡沒有條件匹配,所有的資料筆(Record)都會被掃出來


重點問題思考:

1. 還有哪些重複相同的代碼可以歸納收斂?

2.即使假設可以使用相同的代碼來處理XML和JSON文件,當需要支持第三種格式(例如,SQLite)時,又該對代碼作哪些改變呢?找一個SQlite文件或者自己創建一個,嘗試一下。

3. 像現在這樣,代碼並未禁止直接實例化一個連接器。如果要禁止直接實例化,是否可以實現?試試看。 就是說我們規定只能透過函式產生實例,而不能直接調用類別產生實例?


參考資料:

簡單工廠模式 和 工廠方法模式 的優缺點 

簡單工廠模式 (Simple Factory Pattern)

OO Class Diagram 類別圖

Pyhton __dunder__

 



class中魔法屬性

__module__:獲取模塊名

__class__:獲取類名

__dict__ :獲取對象或類的屬性,dict形式

__dir__:獲取對象或類的屬性,list形式,包括__dict__.

__mro__:獲取對象的繼承順序

__doc__:獲得對象或函數的描述信息

__file__:獲得該文件的名字,其包含路徑信息。



class中魔法方法:

__init__:對象初始化

__new__:開闢空間創建新對象

__del__:對象釋放時,自動自行

__call__: 對象調用時(obj()),自動執行

__str__: 對象轉化為字符信息,以友好的方式便於用戶理解的方式返回字符內容

__repr__: 返回對象的描述信息,針對開發者,返回信息保留有原始性

__bool__:判斷對象的bool值時,會調用該方法。一般使用if時,觸發該方法

__eq__、__gt__、__lt__、__ge__、__le__:當對象進行比較時,出發該方法

__setattr__、__getattr__、__delattr__:訪問對象屬性的時候,觸發該方法

__enter__:with 上下文管理器開始後,自動執行

__exit__:with 上下文管理器結束後,自動執行,即使主進程報錯,也執行

__iter__:  將對象轉化為可迭代的對象,

__next__:for 遍歷時觸發此方法,