自動化測試- 自動化測試模型

目錄

自動化測試模型簡介

1、線性模型

舉例

測試頁面html文件

?測試腳本

2. 關鍵字驅動測試(Keyword-Driven Testing)

需測試內容

關鍵字驅動測試框架

創建測試用例文件

運行測試

3. 數據驅動測試(Data-Driven Testing)

舉例

4. 行為驅動開發(Behavior-Driven Development, BDD)

測試舉例

環境準備

創建特性文件

創建步驟定義文件

運行測試

測試報告

5. 模塊化測試(Modular Testing)

功能模塊測試舉例

創建測試模塊?

5. 回歸測試(Regression Testing)

簡單示例

6. 持續集成測試(Continuous Integration Testing)


自動化測試模型簡介

自動化測試模型是指在軟件測試過程中,采用特定的方法和策略來實現測試的自動化。不同的自動化測試模型適用于不同的測試需求和場景。

1、線性模型

自動化測試線性模型?是通過錄制或編寫腳本,一個腳本完成一個場景(一組完整功能操作),通過對腳本的回放進行自動化測試。這種模型通過模擬用戶完整的操作場景,每個腳本相對獨立,且不產生其他依賴和調用?。
優點: ?獨立性?:每個腳本相互獨立,任何一個腳本文件拿出來就能單獨運行?。簡單性?:對于簡單的測試場景,開發和維護成本較低?。

缺點:開發成本高?:用例之間存在重復的操作,如重復的用戶登錄和退出,導致開發成本較高?。
維護成本高?:當重復的操作發生改變時,需要逐一修改腳本,維護成本較高?。復用性差?:數據和腳本混在一起,用例的復用性較差?。

應用場景:線性模型適用于簡單的功能測試場景,特別是那些不需要復雜邏輯處理的測試用例。例如,登錄、注冊、提交表單等操作都可以通過線性模型來實現?。

舉例

測試頁面html文件

<html><head><meta charset="utf-8" /><meta content="IE=edge"><title>第一個項目</title><link rel="stylesheet" type="text/css" href="index.css" /></head><body><div id="main"><h1>第一個項目</h1><div class="mail-login"><input id="email" name="email" type="text" placeholder="輸入手機號或郵箱"><input type="password" name="password" placeholder="密碼"><a id="btn-login" href="#" type="button" onclick="alert('登錄成功')"><span class="text">登  錄</span></a></div><div id="forget-pwd"><a class="forget-pwd" href="#">忘記密碼>></a></div><div id="register"><span class="no-account"></span>還沒有賬號?</span><a class="register" href="#">點擊注冊>></a></div></div></body>
</html>

?測試腳本

每一步都有對應,代碼復用性差

from selenium import webdriver   #導入webdriver
import time
from selenium.webdriver.common.by import By
browser = webdriver.Chrome() # 創建Chrome瀏覽器對象
browser.get('file:///E:/t.html') # 加載指定的頁面
time.sleep(1)
browser.find_element(By.ID,'email').send_keys('test@test.com') #定位操作元素輸入內容
browser.find_element(By.NAME,'password').send_keys('abc123')
browser.find_element(By.ID,'btn-login').click()      #單擊元素
time.sleep(6)
browser.quit()       

2. 關鍵字驅動測試(Keyword-Driven Testing)

概述:關鍵字驅動測試是一種將測試用例的邏輯與測試數據分離的方法。測試用例通過關鍵字(通常是操作或功能的名稱)來描述,測試框架根據關鍵字執行相應的操作。示例:使用關鍵字如 "登錄"、"搜索"、"添加到購物車" 來描述測試步驟。關鍵字驅動框架會根據這些關鍵字調用相應的函數或方法。

需測試內容

calculator.py

class Calculator:def add(self, a, b):return a + bdef subtract(self, a, b):return a - bdef multiply(self, a, b):return a * bdef divide(self, a, b):if b == 0:raise ValueError("Cannot divide by zero")return a / b

關鍵字驅動測試框架

keyword_driver.py

import csv
from calculator import Calculatorclass KeywordDriver:def __init__(self):self.calculator = Calculator()def execute_keyword(self, keyword, *args):if keyword == "ADD":return self.calculator.add(*map(float, args))elif keyword == "SUBTRACT":return self.calculator.subtract(*map(float, args))elif keyword == "MULTIPLY":return self.calculator.multiply(*map(float, args))elif keyword == "DIVIDE":return self.calculator.divide(*map(float, args))else:raise ValueError(f"Unknown keyword: {keyword}")def run_tests(self, test_file):with open(test_file, mode='r') as file:reader = csv.reader(file)for row in reader:keyword = row[0]args = row[1:]try:result = self.execute_keyword(keyword, *args)print(f"Keyword: {keyword}, Args: {args}, Result: {result}")except Exception as e:print(f"Keyword: {keyword}, Args: {args}, Error: {e}")if __name__ == "__main__":driver = KeywordDriver()driver.run_tests('test_cases.csv')

創建測試用例文件

創建一個 CSV 文件 test_cases.csv,用于存儲測試用例。

ADD,1,2
SUBTRACT,5,3
MULTIPLY,4,2
DIVIDE,8,2
DIVIDE,8,0

運行測試

結果

Keyword: ADD, Args: ['1', '2'], Result: 3.0
Keyword: SUBTRACT, Args: ['5', '3'], Result: 2.0
Keyword: MULTIPLY, Args: ['4', '2'], Result: 8.0
Keyword: DIVIDE, Args: ['8', '2'], Result: 4.0
Keyword: DIVIDE, Args: ['8', '0'], Error: Cannot divide by zero

3. 數據驅動測試(Data-Driven Testing)

概述:數據驅動測試是一種通過外部數據源(如 CSV、Excel、數據庫等)來驅動測試用例執行的方法。測試邏輯與測試數據分離,使得同一測試用例可以使用不同的數據集進行多次測試。示例:使用一個 Excel 文件存儲測試輸入和預期輸出,測試框架讀取這些數據并執行測試。例如,測試用戶登錄功能時,可以使用不同的用戶名和密碼組合進行測試。

舉例

自動化測試- 數據驅動測試-CSDN博客

4. 行為驅動開發(Behavior-Driven Development, BDD)

概述:BDD 是一種軟件開發方法,強調通過自然語言描述軟件的行為來驅動開發和測試。測試用例通常以 "Given-When-Then" 的格式編寫,使得非技術人員也能理解。示例:使用工具如 Cucumber 或 Behave,編寫如下測試用例:Given 用戶在登錄頁面 ;When 用戶輸入有效的用戶名和密碼;Then 用戶應該成功登錄。

測試舉例

環境準備

pip install Behave

創建被測試的模塊calculator.py

class Calculator:def add(self, a, b):return a + bdef subtract(self, a, b):return a - b

創建特性文件

特性文件使用 Gherkin 語言編寫,描述了軟件的行為。創建一個名為 calculator.feature 的文件。

Feature: CalculatorScenario: Add two numbersGiven I have a calculatorWhen I add 5 and 3Then the result should be 8Scenario: Subtract two numbersGiven I have a calculatorWhen I subtract 5 from 3Then the result should be -2

創建步驟定義文件

步驟定義文件將特性文件中的步驟與實際代碼連接起來。創建一個名為 steps/calculator_steps.py 的文件。

from behave import given, when, then
from calculator import Calculator@given('I have a calculator')
def step_given_i_have_a_calculator(context):context.calc = Calculator()@when('I add {a:d} and {b:d}')
def step_when_i_add(context, a, b):context.result = context.calc.add(a, b)@when('I subtract {a:d} from {b:d}')
def step_when_i_subtract(context, a, b):context.result = context.calc.subtract(b, a)@then('the result should be {expected:d}')
def step_then_the_result_should_be(context, expected):assert context.result == expected

運行測試

在命令行中,導航到包含 features 目錄的項目根目錄,然后運行以下命令 behave

被測試的模塊:calculator.py 定義了一個簡單的 Calculator 類,包含加法和減法的方法。
特性文件:calculator.feature 描述了計算器的行為,包括兩個場景:加法和減法。
步驟定義文件:calculator_steps.py 中定義了如何實現特性文件中的每個步驟。
@given 裝飾器定義了初始狀態。
@when 裝飾器定義了操作。
@then 裝飾器定義了期望的結果。
運行測試:使用 behave 命令運行所有測試用例。

測試報告

pip install allure-behave

生成測試報告: allure generate ./result/ -o .\report\ --clean

5. 模塊化測試(Modular Testing)

概述:模塊化測試將測試用例分解為多個獨立的模塊,每個模塊負責特定的功能或操作。這種方法提高了測試的可重用性和可維護性。示例:將登錄、搜索、添加到購物車等功能分別封裝為獨立的測試模塊。在測試中調用這些模塊,組合成完整的測試用例。

功能模塊測試舉例

calculator.py

class Calculator:def add(self, a, b):return a + bdef subtract(self, a, b):return a - bdef multiply(self, a, b):return a * bdef divide(self, a, b):if b == 0:raise ValueError("Cannot divide by zero")return a / b

創建測試模塊?

測試模塊:test_calculator.py 中定義了多個測試類,每個類負責測試 Calculator 類的一個功能。
TestCalculatorAdd 測試加法功能。?????? TestCalculatorSubtract 測試減法功能。
TestCalculatorMultiply 測試乘法功能。 TestCalculatorDivide 測試除法包括對除以零的異常處理

模塊測試向標準的測試架構有很多文件目錄case存放所有用例,report存放測試報告等等

# test_calculator.py
import unittest
from calculator import Calculator
class TestCalculatorAdd(unittest.TestCase):def setUp(self):self.calc = Calculator()def test_add(self):self.assertEqual(self.calc.add(1, 2), 3)self.assertEqual(self.calc.add(-1, 1), 0)self.assertEqual(self.calc.add(0, 0), 0)
class TestCalculatorSubtract(unittest.TestCase):def setUp(self):self.calc = Calculator()def test_subtract(self):self.assertEqual(self.calc.subtract(5, 3), 2)self.assertEqual(self.calc.subtract(-1, -1), 0)self.assertEqual(self.calc.subtract(0, 1), -1)
class TestCalculatorMultiply(unittest.TestCase):def setUp(self):self.calc = Calculator()def test_multiply(self):self.assertEqual(self.calc.multiply(4, 2), 8)self.assertEqual(self.calc.multiply(-1, 1), -1)self.assertEqual(self.calc.multiply(0, 5), 0)
class TestCalculatorDivide(unittest.TestCase):def setUp(self):self.calc = Calculator()def test_divide(self):self.assertEqual(self.calc.divide(8, 2), 4)self.assertEqual(self.calc.divide(-8, 2), -4)with self.assertRaises(ValueError):self.calc.divide(8, 0)if __name__ == "__main__":unittest.main()

6. 回歸測試(Regression Testing)

概述:回歸測試是一種驗證軟件修改后是否影響現有功能的測試方法。自動化回歸測試可以快速執行大量測試用例,確保軟件的穩定性。示例:在每次代碼提交后,自動運行一組回歸測試用例,檢查新代碼是否引入了錯誤。

簡單示例

基于功能模塊測試舉例基礎上
假設對 Calculator 類進行了修改,比如添加了一個新的功能(例如取余),需要確保現有的功能仍然正常工作。只需在 calculator.py 中添加新功能,并在 test_calculator.py 中添加相應的測試用例

修改后的 calculator.py

class Calculator:def add(self, a, b):return a + bdef subtract(self, a, b):return a - bdef multiply(self, a, b):return a * bdef divide(self, a, b):if b == 0:raise ValueError("Cannot divide by zero")return a / bdef modulus(self, a, b):return a % b

在 test_calculator.py添加對新功能測試case

class TestCalculatorModulus(unittest.TestCase):def setUp(self):self.calc = Calculator()def test_divide(self):self.assertEqual(self.calc.modulus(5, 2), 1)self.assertEqual(self.calc.modulus(10, 3), 1)

7. 持續集成測試(Continuous Integration Testing)

概述:持續集成測試是在持續集成環境中自動執行的測試,確保每次代碼更改后,軟件仍然能夠正常工作。示例:使用 CI/CD 工具(如 Jenkins、GitLab CI)自動運行測試用例,確保每次代碼提交后都進行測試。

1、創建被測試的模塊 calculator.py

2、創建測試模塊 test_calculator.py

3、創建 GitHub Actions 工作流

# .github/workflows/ci.yml
name: CIon:push:branches:- mainpull_request:branches:- mainjobs:test:runs-on: ubuntu-lateststeps:- name: Checkout codeuses: actions/checkout@v2- name: Set up Pythonuses: actions/setup-python@v2with:python-version: '3.8'- name: Install dependenciesrun: |python -m pip install --upgrade pippip install -r requirements.txt- name: Run testsrun: |python -m unittest discover

GitHub Actions 工作流:
on 部分定義了在 main 分支的推送和拉取請求時觸發 CI 測試。
jobs 部分定義了一個名為 test 的作業,運行在最新的 Ubuntu 環境上。
steps 部分包括檢查代碼、設置 Python 環境、安裝依賴和運行測試的步驟。?

4、創建 requirements.txt 文件,如果項目有依賴項,可以創建一個 requirements.txt 文件。

5、提交代碼并觸發 CI 測試,提交代碼:將代碼推送到 GitHub 后,CI 測試將自動運行。


?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64313.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64313.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64313.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【GlobalMapper精品教程】091:根據指定字段融合圖斑(字段值相同融合到一起)

文章目錄 一、加載數據二、符號化三、融合圖斑1. 根據圖斑位置進行融合2. 根據指定字段四、注意事項一、加載數據 訂閱專欄后,從私信中查收配套實驗數據包,找到data091.rar,解壓并加載,如下圖所示: 屬性表如下: 二、符號化 為了便于比對不同的融合結果,查看屬性表根據…

JavaScript 實現動態產品展示網頁

JavaScript 實現動態產品展示網頁 1. HTML 頁面結構2. CSS 樣式設計3. JavaScript 實現功能功能總結 本文設計了一個基于 JavaScript 的動態產品展示網頁案例&#xff0c;核心功能包括&#xff1a; 動態產品分類過濾&#xff1a;通過點擊分類按鈕&#xff0c;僅顯示屬于該分類…

網絡爬蟲科普:原理、類型、策略與常用工具

網絡爬蟲科普&#xff1a;原理、類型、策略與常用工具 網絡爬蟲在當今互聯網時代扮演著極為重要的角色&#xff0c;它能幫助我們從海量的網絡信息中提取出有價值的數據。以下將從網絡爬蟲的基本概念、工作流程、類型、搜索策略以及常用工具等方面進行詳細科普介紹。 一、網絡…

strace工具使用

下載地址&#xff1a; https://github.com/strace/strace/releases/tag/v6.12 解壓后執行以下命令 ./configure --hostarm-linux --prefix/home/wei/Code/strace/strace-6.12/out CC/home/wei/Code/firmware/prebuilts/host/gcc/gcc-arm-10.2-2020.11-x86_64-arm-none-linux…

圖像處理-Ch2-空間域的圖像增強

Ch2 空間域的圖像增強 文章目錄 Ch2 空間域的圖像增強Background灰度變換函數(Gray-level Transformation)對數變換(Logarithmic)冪律變換(Power-Law)分段線性變換函數(Piecewise-Linear)對比度拉伸(Contrast-Stretching)灰度級分層(Gray-level Slicing) 直方圖處理(Histogram …

Linux | Ubuntu零基礎安裝學習cURL文件傳輸工具

目錄 介紹 檢查安裝包 下載安裝 手冊 介紹 ?cURL是一個利用URL語法在命令行下工作的文件傳輸工具&#xff0c;首次發行于1997年??12。cURL支持多種協議&#xff0c;包括FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3…

cesium通過經緯度獲取3dtiles 得feature信息

找到這里3dtiles的兩種訪問方式&#xff1a; 1.1 3DTileContent#getFeature 這里涉及3DTile 數據結構&#xff0c;暫不了解3DTile 數據結構&#xff0c;因此暫不使用。 1.2 scene.pick 本次使用 scene表示虛擬場景中所有 3D 圖形對象和狀態的容器&#xff1b;scene中…

內置ALC的前置放大器D2538A/D3308

一、概述 D2538A/D3308是芯谷科技推出的帶有ALC&#xff08;自動電平控制&#xff09;的前置音頻放大器芯片&#xff0c;最初產品為單聲道/立體聲收錄機及盒式錄音機而開發&#xff0c;作為錄音/回放的磁頭放大器使用&#xff1b;由于產品的高增益、低噪聲及ALC外部可調的特性&…

基于SSM的“快遞管理系統”的設計與實現(源碼+數據庫+文檔+PPT)

基于SSM的“快遞管理系統”的設計與實現&#xff08;源碼數據庫文檔PPT) 開發語言&#xff1a;Java 數據庫&#xff1a;MySQL 技術&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系統展示 登陸頁面 注冊頁面 快遞員頁面 派單員訂單管理頁面 派單員訂單添…

Mac 查詢IP配置,網絡代理

常用命令 1.查詢IP ifconfig | grep "inet" 2.ping查詢 ping 172.18.54.19&#xff08;自己IP&#xff09; 3.取消代理&#xff0c;通過在終端執行以下命令&#xff0c;可以取消 Git 的代理設置 git config --global --unset http.proxy git config --global …

Spring創建異步線程,使用@Async注解時不指定value可以嗎?

在Spring中使用Async注解時&#xff0c;不指定value是可以的。如果沒有指定value&#xff08;即線程池的名稱&#xff09;&#xff0c;Spring會默認使用名稱為taskExecutor的線程池。如果沒有定義taskExecutor線程池&#xff0c;則Spring會自動創建一個默認的線程池。 默認行為…

Python小括號( )、中括號[ ]和大括號{}代表什么

python語言最常見的括號有三種&#xff0c;分別是&#xff1a;小括號( )、中括號[ ]和大括號也叫做花括號{ }&#xff0c;分別用來代表不同的python基本內置數據類型。 小括號&#xff08;&#xff09;&#xff1a;struct結構體&#xff0c;但不能改值 python中的小括號( )&am…

QML 之狀態

文章目錄 狀態示例 1&#xff1a;矩形的可見/隱藏切換功能介紹&#xff1a; 示例 2&#xff1a;按鈕的激活/非激活狀態功能介紹&#xff1a; 示例 3&#xff1a;面板的展開/折疊功能介紹&#xff1a; 示例 4&#xff1a;燈泡的開/關功能介紹&#xff1a; 總結 狀態 狀態是界面中…

C語言簡單測試總結

前言 在學C語言之前回顧一下C中的一些知識.選用的是中國大學MOOC中C程序設計(面向對象進階)中的C語言水平評估測試題. 題目 ?The keyword "unsigned" can modify the keyword [ B ] A.signed B.long C.long double D.float題解:unsigned是無符號的意識,通常在…

frp(s) 內網穿透 Liunx環境雙端Docker部署

FRP(Fast Reverse Proxy)是一款高性能的反向代理應用,主要用于內網穿透、負載均衡和反向代理等多種場景。它能夠將內網中的服務暴露給公網,實現遠程訪問。此外,FRP還可以用于接收類似GitHub或第三方提供的Webhook請求。在微服務架構中,FRP可以作為服務調用的反向代理,提…

代碼隨想錄算法訓練營第三十五天|01背包問題 二維和一維(卡碼網第46題)、416分割等和子集

day35 動態規劃part03 1. 01背包問題 二維 卡碼網第46題 01 背包&#xff1a;有n件物品和一個最多能背重量為w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的價值是value[i] 。每件物品只能用一次&#xff0c;求解將哪些物品裝入背包里物品價值總和最大。 動規五部…

【Unity3D】ECS入門學習(九)SystemBase

SystemBase&#xff1a;支持主線程或多線程執行篩選實體任務。 主要介紹是內部成員&#xff1a;Entities的各種篩選方法&#xff0c;其內部成員還有EntityManager ForEach方法篩選&#xff0c;傳遞一個有參委托函數進去&#xff0c;參數ref xxx組件類&#xff08;可填多個&…

[Android]init中添加新的command

在Android的init進程中&#xff0c;command是用于定義啟動時要執行的具體命令行指令的關鍵部分。init進程是Android系統啟動的第一個進程&#xff0c;它負責初始化系統的各個組件&#xff0c;并啟動必要的服務。command可以在init.rc文件及其包含的其他.rc文件中找到&#xff0…

STM32F103RCT6學習之五:ADC

1.ADC基礎 ADC&#xff08;Analog-Digital Converter&#xff09;模擬-數字轉換器ADC可以將引腳上連續變化的模擬電壓轉換為內存中存儲的數字變量&#xff0c;建立模擬電路到數字電路的橋梁12位逐次逼近型ADC&#xff0c;1us轉換時間 輸入電壓范圍&#xff1a;0~3.3V&#xff…

strncpy函數和使用案例

strncpy 是 C 語言標準庫函數之一&#xff0c;用于字符串操作。它的功能是將源字符串&#xff08;source&#xff09;中的字符復制到目標字符串&#xff08;destination&#xff09;中&#xff0c;但最多復制 n 個字符。如果源字符串的長度小于 n&#xff0c;則目標字符串剩余的…