2024-11-26

自動化測試工具介紹
一、Python 主流自動化測試工具

  1. Selenium
    Selenium 是一個非常流行的自動化測試框架肖方,主要用于 web 應(yīng)用程序的 UI 自動化。支持多種編程語言丁屎,包括 Python瘫筐。

支持瀏覽器:Chrome, Firefox, Edge, Safari 等
特點:
支持跨瀏覽器自動化測試
支持瀏覽器調(diào)試
強大的社區(qū)支持和大量教程
可以與其他工具(如 Jenkins)結(jié)合使用,支持 CI/CD 流程
安裝
bash
pip install selenium
示例代碼:

python
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.example.com')
print(driver.title)
driver.quit()
  1. PyTest
    PyTest 是 Python 中廣泛使用的單元測試框架喂链,同時也支持 UI 和接口自動化測試返十。

支持特性:
強大的插件支持(如 pytest-selenium, pytest-html 等)
測試報告自動生成
支持參數(shù)化測試
安裝
bash
pip install pytest
示例代碼:

python
def test_example():
    assert 1 + 1 == 2
  1. Requests
    Requests 是一個簡單易用的 HTTP 請求庫,主要用于接口自動化測試椭微。

支持特性:
簡單的 API
支持各種 HTTP 方法(GET, POST, PUT, DELETE 等)
支持會話和 cookie 管理
安裝
bash
pip install requests
示例代碼:

python
import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts')
print(response.json())
  1. Appium
    Appium 是一個開源的自動化測試框架洞坑,支持移動端(Android 和 iOS)應(yīng)用程序的 UI 自動化。

支持特性:
跨平臺(Android赏表、iOS 和 Windows)
兼容 Selenium WebDriver
支持多種編程語言(包括 Python)
安裝
bash
pip install Appium-Python-Client
二检诗、Java 主流自動化測試工具

  1. Selenium
    Selenium 在 Java 中也得到了廣泛應(yīng)用,功能與 Python 版本基本相同瓢剿。支持多瀏覽器和多平臺的自動化。

支持特性:
支持與 TestNG/JUnit 集成悠轩,易于編寫和執(zhí)行測試用例
豐富的 WebDriver API
支持跨瀏覽器自動化
Maven 安裝依賴:

xml
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.0.0</version>
</dependency>
示例代碼:
java
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class SeleniumTest {
    public static void main(String[] args) {
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.example.com");
        System.out.println(driver.getTitle());
        driver.quit();
    }
}
  1. TestNG
    TestNG 是 Java 中常用的測試框架间狂,具有強大的功能,支持并發(fā)執(zhí)行火架、分組鉴象、依賴關(guān)系忙菠、數(shù)據(jù)驅(qū)動測試等。

支持特性:
支持并行執(zhí)行測試
可以與 Selenium 集成進行自動化測試
強大的報告功能
Maven 安裝依賴:

xml
<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.4.0</version>
    <scope>test</scope>
</dependency>
示例代碼:
java
import org.testng.annotations.Test;

public class TestNGExample {
    @Test
    public void testMethod() {
        System.out.println("This is a TestNG test!");
    }
}
  1. RestAssured
    RestAssured 是一個 Java 庫纺弊,專門用于 API 測試牛欢。它使得編寫 REST API 測試變得簡單直觀。

支持特性:
支持 RESTful API 測試
提供簡單的語法來驗證響應(yīng)
支持 JSON 和 XML 格式的數(shù)據(jù)驗證
Maven 安裝依賴:

xml
<dependency>
    <groupId>io.rest-assured</groupId>
    <artifactId>rest-assured</artifactId>
    <version>5.2.0</version>
    <scope>test</scope>
</dependency>
示例代碼:
java
import io.restassured.RestAssured;
import io.restassured.response.Response;

public class RestAssuredTest {
    public static void main(String[] args) {
        Response response = RestAssured.get("https://jsonplaceholder.typicode.com/posts");
        System.out.println(response.getBody().asString());
    }
}

三淆游、UFT(Unified Functional Testing)

  1. UFT(以前稱為 QTP)
    UFT 是由 Micro Focus 提供的自動化測試工具傍睹,支持 UI 和 API 測試,廣泛用于企業(yè)級應(yīng)用程序的自動化測試犹菱。

支持特性:
支持桌面和 web 應(yīng)用的 UI 自動化
支持 API 測試(Web Services, SOAP, REST 等)
強大的對象識別功能拾稳,支持多種技術(shù)(如 Java, .NET, SAP 等)
集成與 ALM(Application Lifecycle Management)
特點:
回歸測試:支持自動化回歸測試,方便項目后期更新時確保系統(tǒng)功能不受影響腊脱。
關(guān)鍵詞驅(qū)動測試:UFT 支持通過關(guān)鍵詞驅(qū)動的方法編寫測試腳本访得,適合非編程人員使用。
跨平臺支持:支持多種瀏覽器陕凹、操作系統(tǒng)和移動設(shè)備上的自動化悍抑。
使用示例:
UFT 中的自動化腳本使用 VBScript 語言編寫,示例代碼如下:

'打開瀏覽器并訪問網(wǎng)站
Browser("Browser").Navigate "https://www.example.com"

'獲取標(biāo)題
Dim title
title = Browser("Browser").Page("Example").GetROProperty("title")
MsgBox title

總結(jié):
Selenium 是最受歡迎的 Web 自動化工具杜耙,支持 Python 和 Java搜骡,適用于多種瀏覽器。
Appium 是一款用于移動端自動化的工具泥技,支持跨平臺應(yīng)用的測試浆兰。
Requests 和 RestAssured 是 Python 和 Java 中常用的 API 測試工具,分別適用于接口自動化測試珊豹。
TestNG 是 Java 中強大的測試框架簸呈,能夠與 Selenium 集成進行全面的自動化測試。
UFT 提供了全面的 UI 和 API 測試支持店茶,適用于企業(yè)級應(yīng)用的自動化需求蜕便,特別是在與 ALM 集成時表現(xiàn)突出。

UI 和接口自動化框架設(shè)計模式及底層邏輯
一贩幻、UI 自動化框架設(shè)計模式
在 UI 自動化測試中轿腺,設(shè)計一個結(jié)構(gòu)清晰、易于維護的框架是非常重要的丛楚。常見的設(shè)計模式主要包括 Page Object Model (POM)族壳、Factory 模式、Singleton 模式 和 Command 模式趣些。下面我們將逐一介紹這些設(shè)計模式的作用和底層實現(xiàn)仿荆。

  1. Page Object Model (POM) 模式
    Page Object Model (POM) 是 UI 自動化測試中最常用的設(shè)計模式之一。它的核心思想是將頁面元素和頁面操作封裝在一個獨立的類中,每個頁面對應(yīng)一個類拢操,并通過該類來訪問和操作頁面元素锦亦。

作用:

提高可維護性:當(dāng)頁面發(fā)生變化時,只需要修改頁面對象類令境,而不需要修改測試腳本本身杠园。
提高可重用性:頁面對象類可以在不同的測試用例中復(fù)用。
簡化測試腳本:測試腳本只關(guān)心業(yè)務(wù)邏輯舔庶,不需要關(guān)心頁面元素的細(xì)節(jié)抛蚁。
底層邏輯:

頁面對象類中封裝了定位元素的方式(如使用 XPath、CSS Selectors 等)以及操作這些元素的方法(如點擊栖茉、輸入文本篮绿、獲取文本等)。
測試腳本通過調(diào)用這些封裝好的方法來與頁面交互吕漂。
示例:
假設(shè)我們有一個登錄頁面亲配,以下是 Page Object 類的實現(xiàn):

python
from selenium import webdriver
from selenium.webdriver.common.by import By

class LoginPage:
    def __init__(self, driver: webdriver.Chrome):
        self.driver = driver
        self.username_field = (By.ID, "username")
        self.password_field = (By.ID, "password")
        self.login_button = (By.ID, "loginBtn")

    def enter_username(self, username: str):
        self.driver.find_element(*self.username_field).send_keys(username)

    def enter_password(self, password: str):
        self.driver.find_element(*self.password_field).send_keys(password)

    def click_login(self):
        self.driver.find_element(*self.login_button).click()

    def login(self, username: str, password: str):
        self.enter_username(username)
        self.enter_password(password)
        self.click_login()
  1. Factory 模式
    Factory 模式 用于創(chuàng)建和管理不同類型的對象。在自動化測試中惶凝,常用于創(chuàng)建不同瀏覽器實例的 WebDriver吼虎,或者用來創(chuàng)建不同頁面對象的實例。

作用:
解耦:測試腳本不需要直接依賴于具體的 WebDriver 實現(xiàn)或頁面對象的具體類苍鲜。
簡化代碼:通過工廠方法創(chuàng)建和管理對象思灰,而無需在測試中重復(fù)寫初始化代碼。
示例:

python
from selenium import webdriver

class WebDriverFactory:
    @staticmethod
    def get_driver(browser_name: str) -> webdriver.Chrome:
        if browser_name == "chrome":
            return webdriver.Chrome(executable_path="path_to_chromedriver")
        elif browser_name == "firefox":
            return webdriver.Firefox(executable_path="path_to_geckodriver")
        else:
            raise ValueError(f"Browser {browser_name} not supported")

在測試用例中使用工廠方法來創(chuàng)建 WebDriver 實例

driver = WebDriverFactory.get_driver("chrome")

  1. Singleton 模式
    Singleton 模式 是一種確保某個類只有一個實例并提供全局訪問點的設(shè)計模式混滔。在自動化測試中洒疚,通常用于管理 WebDriver 實例,確保在整個測試執(zhí)行期間只有一個 WebDriver 實例坯屿。

作用:
節(jié)省資源:避免創(chuàng)建多個 WebDriver 實例油湖,提高測試效率。
全局管理:通過單例模式可以確保 WebDriver 作為單例對象被共享领跛。
示例:

python
from selenium import webdriver

class WebDriverSingleton:
    _driver = None

    @staticmethod
    def get_driver():
        if WebDriverSingleton._driver is None:
            WebDriverSingleton._driver = webdriver.Chrome(executable_path="path_to_chromedriver")
        return WebDriverSingleton._driver

在測試用例中使用單例模式來獲取 WebDriver 實例

driver = WebDriverSingleton.get_driver()

  1. Command 模式
    Command 模式 是一種行為型設(shè)計模式乏德,能夠?qū)⒄埱蠓庋b為一個對象,從而允許用戶對請求進行參數(shù)化處理吠昭。它通常用于復(fù)雜的 UI 操作喊括,將復(fù)雜操作封裝為命令對象,并通過執(zhí)行者執(zhí)行這些命令矢棚。

作用:
解耦請求者和執(zhí)行者:測試腳本不需要了解執(zhí)行命令的具體細(xì)節(jié)郑什,只需要通過執(zhí)行命令來完成某個操作。
命令隊列:可以把多個命令組合在一起蒲肋,按順序執(zhí)行蹦误。
示例:

python
class ClickCommand:
    def __init__(self, element):
        self.element = element

    def execute(self):
        self.element.click()

class CommandInvoker:
    def __init__(self):
        self.commands = []

    def add_command(self, command):
        self.commands.append(command)

    def execute_commands(self):
        for command in self.commands:
            command.execute()
# 使用命令模式封裝點擊操作
button = driver.find_element(By.ID, "submitBtn")
click_command = ClickCommand(button)

invoker = CommandInvoker()
invoker.add_command(click_command)
invoker.execute_commands()

二劫拢、接口自動化框架設(shè)計模式及底層邏輯
在接口自動化測試中肉津,框架的設(shè)計同樣非常重要强胰。常用的設(shè)計模式包括 數(shù)據(jù)驅(qū)動模式、關(guān)鍵字驅(qū)動模式妹沙、策略模式 和 RESTful API 模式 等偶洋。

  1. 數(shù)據(jù)驅(qū)動測試模式(Data-Driven Testing)
    數(shù)據(jù)驅(qū)動測試模式通過外部數(shù)據(jù)源(如 Excel、CSV 文件距糖、數(shù)據(jù)庫等)提供測試數(shù)據(jù)玄窝,然后執(zhí)行相同的測試用例,只是每次使用不同的輸入數(shù)據(jù)進行測試悍引。這種模式可以大大提高測試覆蓋率恩脂。

作用:
提高測試覆蓋率:同一套測試用例可以通過不同的數(shù)據(jù)執(zhí)行多次,覆蓋更多的場景趣斤。
易于擴展:可以非常容易地添加新的測試數(shù)據(jù)俩块,而不需要修改測試腳本。
底層邏輯:
從數(shù)據(jù)源讀取輸入數(shù)據(jù)浓领。
根據(jù)數(shù)據(jù)驅(qū)動執(zhí)行接口請求玉凯,并驗證響應(yīng)數(shù)據(jù)。
示例:

python
import requests
import csv

def test_api(endpoint, method, params, expected_status):
    if method == "GET":
        response = requests.get(endpoint, params=params)
    elif method == "POST":
        response = requests.post(endpoint, json=params)

    assert response.status_code == expected_status, f"Expected {expected_status}, got {response.status_code}"

# 從 CSV 文件讀取測試數(shù)據(jù)
with open("test_data.csv", mode="r") as file:
    reader = csv.DictReader(file)
    for row in reader:
        test_api(row["endpoint"], row["method"], row["params"], int(row["expected_status"]))
  1. 關(guān)鍵字驅(qū)動模式(Keyword-Driven Testing)
    關(guān)鍵字驅(qū)動模式通過定義關(guān)鍵字(如 "登錄"联贩、"獲取數(shù)據(jù)")來表示接口操作漫仆,并將這些關(guān)鍵字與實際的操作方法關(guān)聯(lián)起來。

作用:
非編程人員使用:通過定義簡單的關(guān)鍵字泪幌,可以讓非程序員也能參與到自動化測試的設(shè)計中盲厌。
便于維護和擴展:通過增加新的關(guān)鍵字,能夠方便地擴展框架祸泪。
底層邏輯:
將 API 操作抽象為一組關(guān)鍵字吗浩,執(zhí)行時解析關(guān)鍵字,并執(zhí)行相應(yīng)的 API 調(diào)用浴滴。
示例:

python
def perform_action(action, params):
    if action == "login":
        return requests.post("https://example.com/login", json=params)
    elif action == "get_user":
        return requests.get(f"https://example.com/user/{params['user_id']}")

# 執(zhí)行關(guān)鍵字驅(qū)動的測試
test_case = [("login", {"username": "test", "password": "password"}),
             ("get_user", {"user_id": "123"})]

for action, params in test_case:
    response = perform_action(action, params)
    print(response.json())
  1. 策略模式(Strategy Pattern)
    策略模式允許在運行時選擇不同的 API 請求策略(如 GET拓萌、POST、PUT升略、DELETE 等)微王。在接口自動化中,策略模式可以用于根據(jù)不同的接口請求類型動態(tài)選擇請求方式品嚣。

作用:
靈活性:可以根據(jù)不同的 API 請求類型炕倘,選擇合適的請求策略進行請求。
可擴展性:可以方便地擴展新的請求策略翰撑。
底層邏輯:
定義不同的請求策略罩旋,并根據(jù)接口的要求動態(tài)選擇

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末啊央,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涨醋,更是在濱河造成了極大的恐慌瓜饥,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浴骂,死亡現(xiàn)場離奇詭異乓土,居然都是意外死亡,警方通過查閱死者的電腦和手機溯警,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門趣苏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人梯轻,你說我怎么就攤上這事食磕。” “怎么了喳挑?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵彬伦,是天一觀的道長。 經(jīng)常有香客問我蟀悦,道長媚朦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任日戈,我火速辦了婚禮询张,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘浙炼。我一直安慰自己份氧,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布弯屈。 她就那樣靜靜地躺著蜗帜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪资厉。 梳的紋絲不亂的頭發(fā)上厅缺,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音宴偿,去河邊找鬼湘捎。 笑死,一個胖子當(dāng)著我的面吹牛窄刘,可吹牛的內(nèi)容都是我干的窥妇。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼娩践,長吁一口氣:“原來是場噩夢啊……” “哼活翩!你這毒婦竟也來了烹骨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤材泄,失蹤者是張志新(化名)和其女友劉穎沮焕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脸爱,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡遇汞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了簿废。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡络它,死狀恐怖族檬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情化戳,我是刑警寧澤单料,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站点楼,受9級特大地震影響扫尖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掠廓,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一换怖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蟀瞧,春花似錦沉颂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至切端,卻和暖如春彻坛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背踏枣。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工昌屉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人椰于。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓怠益,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瘾婿。 傳聞我的和親對象是個殘疾皇子蜻牢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 微信公眾號-IT趕路人烤咧,專注分享與IT相關(guān)知識,關(guān)注我抢呆,一起升職加薪煮嫌! 下面的Java Selenium問題指南涵...
    IT趕路人閱讀 1,037評論 0 1
  • selenium自動化測試基礎(chǔ) 1. 使用測試工具1.1 自動化測試?yán)碚摻榻B自動化測試的4W1H自動化測試的典型金...
    思考的山羊閱讀 558評論 0 1
  • 洞見SELENIUM自動化測試 寫在最前面:目前自動化測試并不屬于新鮮的事物,或者說自動化測試的各種方法論已經(jīng)層出...
    厲鉚兄閱讀 6,714評論 3 47
  • Selenium 官網(wǎng)Selenium WebDriver官網(wǎng)webdriver實用指南python版本 WebD...
    顧顧314閱讀 46,967評論 0 34
  • 第五單元抱虐、性能測試 1.什么是性能測試 通過自動化的測試工具模擬系統(tǒng)正常昌阿、異常、峰值的場景對系統(tǒng)的各項性能...
    人間朝與暮閱讀 238評論 0 0