999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種基于Python 語言自動化測試框架的實現

2024-07-24 00:00:00劉瑋瑋
電腦知識與技術 2024年17期

摘要:文章通過設計特定測試場景,編寫測試用例數據,基于Python的Unittest框架,采用PO模式實現通用操作封裝,使用ddt裝飾器實現遍歷測試數據并批量執行。所實現的自動化測試檢驗了人力資源管理系統中,以系統管理員身份登錄時,添加政治類別操作可能出現的幾種情況。該測試過程能夠自動截圖,并通過斷言比較測試用例的正確性,同時將生成的測試報告發送到指定郵箱。

關鍵詞:Python;Unittest框架;PO對象;ddt裝飾器;自動化測試

中圖分類號:TP311.53 文獻標識碼:A

文章編號:1009-3044(2024)17-0055-04 開放科學(資源服務)標識碼(OSID) :

0 引言

作為保證軟件質量的重要手段,軟件測試在日新月異的軟件開發中愈發重要。自動化測試是將以人為驅動的測試行為轉化為機器執行的過程,即模擬手工測試步驟,通過執行以程序語言編制的測試腳本自動地測試軟件,涵蓋了所有測試階段。自動化測試具有跨平臺兼容性,且與進程無關。廣義的自動化測試強調整個測試過程都由計算機系統完成,范圍更廣;狹義的自動化測試主要指通過某個自動化工具自動執行特定測試任務,處理范圍較小。

自動化測試適用于回歸測試,因為重復單一的數據錄入或擊鍵等測試操作會造成不必要的時間和人力浪費。測試人員通常需要借助自動化測試工具對程序進行理解和對設計文檔進行驗證。采用自動化測試工具還有利于生成測試報告文檔,保持版本的連貫性。自動化工具也能夠確定測試用例的覆蓋路徑,確定測試用例集對程序邏輯流程和控制流程的覆蓋。本文以系統管理員身份登錄人資管理系統,驗證添加政治面貌類別操作。

1 Unittest 框架

Unittest框架是Python自帶的一種單元測試框架,具備編寫用例、組織用例、執行用例、輸出報告等自動化框架的條件。該框架可以實現批量執行用例,提供豐富的斷言知識,還可以生成報告。Unittest框架的核心要素包括:TestCase(測試用例),TestSuite(測試套件),TextTestRunner(以文本形式運行測試用例),Tes?tLoader(批量執行測試用例-搜索指定文件夾內指定字母開頭的模塊),Fixture(固定裝置(兩個固定的函數,一個初始化時使用,一個結束時使用)) 。在使用Unittest框架創建測試用例時,首先要導入unittest包,新建的測試類需繼承unittest.TestCase,并且測試方法必須以test字母開頭[1]。

2 具體實現

2.1 測試環境搭建

安裝Python、Selenium 插件、PyCharm 平臺,配置相關環境變量后,還需要安裝Chrome瀏覽器及對應Chrome驅動,并確保可以成功登錄打開人資管理系統。打開PyCharm平臺,創建一個項目,同時在創建項目時選擇解釋器為當前安裝的Python[2]。

測試數據準備如圖1所示。

項目路徑如圖2所示[3]。

2.2 封裝基本操作

首先在指定名稱文件夾下創建driver.py文件,封裝打開谷歌瀏覽器操作,代碼如下:

from selenium import webdriver

def browser():

driver=webdriver.Chrome()

#打開谷歌瀏覽器

return driver

在指定文件夾下創建function.py文件[4],封裝截圖方法inser_img(driver,filename),查找最新測試報告方法latest_report(report_dir),將測試報告發送到郵箱的方法send_mail(latest_report),以及讀取csv文件方法。讀取csv文件方法可以通過逐行逐列循環讀取csv文件來批量執行測試用例,即通過數據驅動實現自動化測試某個功能,讀取csv文件代碼如下:

def get_csv_file(line):

# 文件路徑需要自己修改成自己的文件路徑

with open(r"盤符:\*\*\需被讀取的文件名.csv",encoding=′utf-8-sig′) as file:

reader=csv.reader(file)

for index,row in enumerate(reader,1):

if index==line:

return row 以及創建myunit.py文件,封裝啟動測試集和結束測試集操作,代碼如下:

import unittest

from driver.driver import *

class StartEnd(unittest.TestCase):

def setUp(self):

self.driver=browser()

self.driver.implicitly_wait(10)

self.driver.maximize_window()

def tearDown(self):

self.driver.quit()

2.3 定義基礎類Python 文件

創建基礎類BasePage.py,用于被所有頁面對象類繼承。其中,初始化方法用于打開被測系統頁面,open方法用于打開指定url地址頁面,find_element方法用于查找指定頁面元素,相關代碼如下:

from time import sleep

class Page():

def __init__(self, driver):

self.driver = driver

self. base_url = ′http://116.204.108.152: 30016/suthr/logon′

def _open(self, url):

url_ = self.base_url + url

print("Test page is %s" % url_)

self.driver.maximize_window()

self.driver.get(url_)

sleep(2)

assert self.driver.current_url == url_, ′Did not land on %s′ % url_

def open(self):

self._open(self.url)

def find_element(self, *loc):

return self.driver.find_element(*loc)

2.4 創建PageObject 對象

創建PO對象LoginPage.py文件,用于封裝登錄人資系統的操作;AddLeibiePage.py文件用于封裝一系列操作,包括點擊系統管理員鏈接→輸入系統管理員用戶名→輸入系統管理員密碼→點擊登錄按鈕→點擊類別維護菜單→點擊政治面貌類別子菜單→點擊創建類別按鈕→填寫政治類別名稱框→填寫描述框→點擊保存按鈕,以及讀取彈窗文字信息和紅底提示文字信息等。

以輸入政治類別名稱,點擊保存為例,代碼如下:

from selenium.webdriver.common.by import By

from Website. test_case. page_object. BasePage im?port *

from time import sleep

class LeibieAdd(Page):

...

lbmc = (By.ID, ′dictValue′) # 定位類別名稱輸入框

Baocun_loc = (By.XPATH, ′//*[@id="ajax-modal"]/div[3]/button[1]′) # 定位保存按鈕hongdi_loc = (By.ID,′dictValue-error′) # 定位消息提示文字信息

...

def type_lbmc(self, lbname):

self.find_element(*self.lbmc).clear()

self.find_element(*self.lbmc).send_keys(lbname)

# 輸入類別名稱

def type_Baocun(self):

self.find_element(*self.Baocun_loc).click()

#點擊保存按鈕

def type_hongdi(self):

return self.find_element(*self.hongdi_loc).get_attri?bute("innerHTML")

# 讀取紅底文字信息

...

def test_zzlb_add(driver, lbname):

...

sleep(1)

add_page.type_lbmc(lbname)

sleep(1)

add_page.type_Baocun()

需要注意的是,各類動態增加方法時一定要加self參數,并且PO類與調用PO類的封裝方法縮進要一致,表示同級的關系。如果縮進不一致,在后續測試類調用封裝方法時會報“方法沒有定義”的錯誤。

2.5 創建測試類

使用unittest框架創建測試類test_addzz.py,測試類中每一個以test開頭的方法就是一條測試用例。同時,使用ddt裝飾器實現遍歷測試數據,每遍歷出一條數據,就往測試類中添加一個以test開頭的方法setattr (類,方法名,方法)[5]。

該測試類通過調用function.py中的讀取csv文件方法get_csv_file(line)以及調用test_user_login(driver,username,password)方法,分別測試了csv文件中的3條測試數據,對應添加政治類別中的輸入政治類別名稱為空、重復和過長的操作。測試類能夠實現測試界面的截屏,并且能夠斷言對比測試用例是否正確。關鍵代碼如下:

import unittest

from Website. test_case. model import function,myunit

from Website.test_case.page_object.AddLeibiePage import *

from Website.test_case.page_object.LoginPage im?port *

from Website. test_case. page_object. AddPage im?port *

import time

import ddt

@ddt.ddt

class AddzzTest(myunit.StartEnd):

# @unittest.skip(′skip this case′)

def test01_add_null(self):

′′′操作成功′′′

print("test case is start run...")

test_date = function.get_csv_file(2)

#創建參數接收測試數據

test_user_login(self.driver,′ceshi01′,′123456′)

#登錄

test_zzlb_add(self.driver,test_date[0])

#輸入測試數據

time.sleep(3)

function. inser_img(self. driver, "test01_add_null.png")

# 截屏

po = LeibieAdd(self.driver)

# 設置參數接收數據

self.assertIn(test_date[1], po.type_hongdi())

# 斷言對比測試用例是否正確

print("test case is successful test end!")

...

if __name__ == ′__main__′:

unittest.main()

2.6 生成測試報告并發送指定郵箱

為能夠生成測試報告并發送指定郵箱,須創建run_test.py文件,相關代碼如下:

import unittest

from Website.test_case.model.function import *

from HTMLTestRunner import HTMLTestRunner

import time

report_dir=′./test_report′

test_dir=′./test_case′

print("start run test case")

discover=unittest. defaultTestLoader. discover(test_dir,pattern="test_addzz.py")

now=time.strftime("%Y-%m-%d %H_%M_%S")

report_name=report_dir+′/′+now+′result.html′

print("start write report..")

with open(report_name,′wb′) as f:

runner=HTMLTestRunner(stream=f,title="Test Re?port" ,description="localhost login test")

runner.run(discover)

f.close()

print("find latest report")

latest_report=latest_report(report_dir)

print("send email report..")

send_mail(latest_report)

print("Test end")

3 測試結果

3.1 PyCharm 界面結果顯示

從測試工作臺可以看到,3個測試用例均通過,分別測試了添加政治類別名稱為空、添加政治類別名稱重復和添加政治類別名稱過長這3種情況。測試結果均與預期相同,能夠彈出相應的錯誤提示彈窗,測試通過,并成功發送測試報告郵件。界面如圖3、圖4 所示。

3.2 測試報告郵件

正確收到測試報告郵件,郵件顯示測試內容和測試結果。界面如圖5所示。

4 總結

本文通過設計特定測試場景,編寫測試用例數據,實現了自動化測試,檢驗了人資管理系統中以系統管理員身份登錄時,添加政治類別操作可能出現的幾種情況。自動化測試能夠自動截圖、斷言對比測試用例的正確性,并將生成的測試報告發送到指定郵箱。

整體使用Python+Unittest+PO框架實現自動化測試。基于Unittest框架,使用PO對象實現通用操作封裝,提高了測試腳本的可重用性;使用ddt裝飾器實現遍歷測試數據并批量執行[6];同時實現了測試過程的自動截圖,能夠斷言對比測試用例的正確性,并將生成的測試報告發送到指定郵箱。可以看出,使用Py?thon+Unittest+PO 框架實現自動化測試,能夠實現自動化測試流程的一體化,提高測試效率。

參考文獻:

[1] 王春明.基于Unittest的Python測試系統[J].數字通信世界,2023(3):66-69.

[2] 李亞偉,牛士會.基于Python通過unittest進行自動化測試[J].價值工程,2023,42(14):163-165.

[3] 蔣程燕,孟令琴.基于Python語言的自動化測試應用實例[J].工業控制計算機,2021,34(10):109-110,113.

[4] 王娜.基于python的接口自動化測試框架設計[J].電腦知識與技術,2020,16(12):246-248.

[5] 方巍,吳伶琳.基于Python的Web自動化測試的實踐[J].現代計算機,2020(34):91-94.

[6] 單攀攀.一種基于Selenium與Unittest的Web自動化測試框架[J].信息技術與網絡安全,2021,40(9):77-80.

【通聯編輯:謝媛媛】

主站蜘蛛池模板: 日韩精品免费一线在线观看| 国产在线97| 伊人激情综合网| 久久久久亚洲精品成人网| 国产一区二区网站| 高清码无在线看| 亚欧成人无码AV在线播放| 国产精品55夜色66夜色| 亚洲人在线| 成人免费视频一区二区三区| 亚洲国产中文欧美在线人成大黄瓜| 色九九视频| 免费高清毛片| 久久中文电影| 亚洲天堂视频在线免费观看| 国产亚洲高清视频| 91视频区| 91精品国产福利| 十八禁美女裸体网站| 婷婷色一二三区波多野衣| 日韩国产 在线| 91免费国产高清观看| 欧美一级高清免费a| 不卡午夜视频| 成人福利在线观看| 亚洲美女一区| 国产成本人片免费a∨短片| 国产SUV精品一区二区| 日韩中文字幕亚洲无线码| 精品国产黑色丝袜高跟鞋| 国产成人91精品免费网址在线 | 97视频免费在线观看| 91黄色在线观看| 中文成人无码国产亚洲| 午夜视频免费一区二区在线看| 91久久偷偷做嫩草影院精品| 色综合久久无码网| 国产精品高清国产三级囯产AV| 国产永久在线视频| 免费人成黄页在线观看国产| 日韩国产一区二区三区无码| 亚洲精品欧美重口| 国产成人高清精品免费5388| 97精品久久久大香线焦| 人人妻人人澡人人爽欧美一区| 爽爽影院十八禁在线观看| 无码啪啪精品天堂浪潮av| 操美女免费网站| 色135综合网| 手机在线免费不卡一区二| 亚洲国产日韩一区| 国模粉嫩小泬视频在线观看| 欧美成人aⅴ| 露脸一二三区国语对白| 国产成人综合亚洲欧洲色就色| 香蕉蕉亚亚洲aav综合| 91福利免费视频| 日韩av在线直播| 九九精品在线观看| 亚洲人成影院在线观看| 亚洲资源站av无码网址| 国产精品视频3p| 久久这里只有精品国产99| 91网红精品在线观看| 亚洲手机在线| 午夜啪啪福利| 国产成人综合亚洲欧美在| 91人妻在线视频| 日本三级黄在线观看| 亚洲AV无码一区二区三区牲色| 国产成年女人特黄特色毛片免| 色综合狠狠操| 免费一级毛片在线播放傲雪网| 亚洲精品国产首次亮相| 高清免费毛片| 色成人亚洲| 男人天堂亚洲天堂| 极品av一区二区| 2021国产精品自产拍在线| 欧洲精品视频在线观看| 国内精品久久人妻无码大片高| 亚洲国产天堂久久九九九|