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

基于Unittest的Python測試系統

2023-12-29 00:00:00王春明
數字通信世界 2023年3期

摘要:隨著軟件規模的擴大,其成本已經超過硬件,因此,完善的軟件測試是保證軟件質量的一個重要手段。隨著Python語言的快速發展與普及,其在軟件測試中發揮著重要的作用。文章介紹了Python語言自帶的Unittest框架完成自動化測試框架的搭建,并結合一些些測試實例,介紹了Unittest框架的自動化測試的設計方法,從而提高測試效率和質量[1]。

關鍵詞:自動化測試;Python;Unittest

doi:10.3969/J.ISSN.1672-7274.2023.03.022

中圖分類號:TP 31" " " " " " " "文獻標示碼:A" " " " " " " "文章編碼:1672-7274(2023)03-00-04

Python Test System Based on Unittest

WANG Chunming

(Nvidia Semiconductor Technology (Shanghai) Co., Ltd., Shanghai 200120, China)

Abstract: With the development of software technology, its cost has exceeded the hardware, and most of the hardware are running software. It is a key problem to ensure software quality through perfect software testing. With the rapid development and popularization of the artificial intelligence language Python, it is very important to study the automatic test of Python language system. This article introduces the Python language built-in Unittest framework for building test automation. With some test examples, this paper introduces the design method of automatic test of Unittest framework, so as to improve the efficiency and quality of test.

Key words: automatic test; Python; Unittest

0" 引言

隨著軟件規模(如代碼行數)的不斷增加,測試的成本也與日俱增。對于現代主流的迭代式開發過程,因為每個迭代都推出一個更加完善的軟件子集,所以每次迭代中不僅要對新增功能進行測試,還需要對上一個迭代原有功能進行了回歸測試。全部使用手工測試則效率低下(特別是在進行大量回歸測試時)且存在人為失誤的可能,自動化測試應運而生。本文介紹了基于Python的Unittest框架的自動化測試[2]。

1" 自動化測試方法簡介

1.1 自動化測試的技術

隨著軟件自動化測試技術的不斷發展,出現了大量測試方法,主要包括以下幾種。

(1)關鍵字驅動:關鍵字描述數據參與測試的方式,使得一個測試用例模板可能執行多種測試,相當于實際完成了多個測試用例的工作。

(2)數據驅動:建立模塊化(或者統一)的測試腳本框架,然后使數據和腳本分離,對相似功能使用一段代碼統一測試。測試用例的維護工作可以分成由程序員編寫統一的測試腳本框架和由測試人員負責生成測試數據與確定測試結果是否正確兩部分。

(3)獨立腳本測試:線性腳本是一種非結構化的腳本,它需要能直接支持各種語言,測試腳本與被測系統之間存在深度耦合,所以這類腳本隨著被測軟件的各種變化,腳本被迫經常變化,維護成本高。例如,直接捕獲UI上的操作形成的測試腳本就屬于線性腳本,其容易受到UI變化的影響,線性腳本不大適合大型軟件的自動化測試。結構化腳本具有完善的結構,比如擁有循環和函數調用等功能,其編寫難度較大,但可維護性比較好,在一定程度上比較好地適應軟件變化而無須修改測試腳本。

(4)錄制回放:在早前的軟件測試中,有錄制回放的方式,這種方式通過記錄用戶界面(UI)上的用戶操作并且重復執行來完成測試,不需要編程技巧。不過一旦用戶界面變化,就會使錄制下來的測試用例失效。

好的測試腳本不僅要易于使用,還必須具有高可靠性和可維護性,最重要的是能在回歸測試中被重復使用。

目前自動化測試不能完全覆蓋大多數項目,或者說對于無法自動化的部分必須進行手工測試。而在自動化的程度方面,也不是100%,最常見的是將編寫并保存的測試腳本用于回歸測試。EvoSuite等工具也可以自動生成測試用例,并且有一定智能自動判斷測試用例執行是否正確,是自動化程度比較高的測試工具[3]。

1.2 自動化測試的類型

根據軟件測試的不同類型,自動化測試也可分為多種類型,主要有自動化單元測試(單元測試階段),自動化接口測試(接口測試階段)和自動化UI測試(UI測試階段)。

(1)自動化單元測試。單元測試重點在于根據代碼的實現進行白盒測試。要求測試工程師具備編寫代碼能力。不同的開發環境下對應的單元測試框架也不同,Python有unittest、Pytest等。基于這些測試框架,再編寫一些自動化測試(腳本),就可以進行自動化單元測試了。

(2)自動化接口測試。分成三種接口自動化測試用例:分別是單接口、場景和差異化自動化測試用例。

(3)自動化UI測試。目前常見的Web端或者App端軟件,用戶都是基于頁面元素的識別和定位來操作,UI自動化測試必須記錄和模擬這種用戶行為來進行測試。自動化UI測試的常用工具有Appium、Selenium、Pytest等測試管理框架[4]。

2" 自動化測試工具簡介

Python支持面向對象和動態數據類型,是一種非常靈活高效的解釋型語言,具有較好的跨平臺性、開發效率高(或者說同樣行數的代碼Python比C++能做更多事情)、開源并且支持非常豐富的第三方庫(Python語言又被稱為膠水語言)等特點,成為各大互聯網公司軟件開發中最受歡迎的開發語言之一,人工智能的興起,Python又被廣泛應用于數據處理、網絡爬蟲、網頁開發以及人工智能等領域,成為一種人工智能語言。

根據軟件、開發平臺和測試需求的不同,人們開發了各種自動化測試工具。而基于Python的自動化測試框架更是非常多,有selenium、Unittest等。

3" Unittest框架

框架是一種具有通用性的半成品,我們通常在框架上繼續開發產品以提高效率。Unittest框架是Python自帶的單元測試框架,它屬于Python的標準庫,無須單獨安裝即可使用。Unittest有點類似于Java的JUnit框架。Unittest框架不僅適用于單元測試,也可以用于集成測試或者UI測試(如網頁自動化測試用例的生成和執行)。

Unittest下有5個重要概念:TestCase、TestSuite、TestRunner、TestFixture和TestLoder(),我們可以使用它提供的各種斷言方法來判斷測試用例是否通過,也能自動生成HTML格式的測試結果報告。

(1)TestCase(測試用例):TestCase類的實例包含測試用例。測試用例可以看作程序的一次完整執行,例如,使用setUp方法完成測試前準備環境的搭建,使用run方法執行測試腳本(最后用斷言判斷測試是否正確),以及使用tearDown方法在測試后對環境進行還原,方便下一個測試用例的執行。

(2)TestSuite(測試套件):一個TestSuite可以包含多個測試套件和測試用例,可以把TestCase類比作計算機上的文件,那么TestSuite就是計算機文件系統中的目錄,也可以把TestSuite理解成TestCase的集合。我們針對軟件某一部分進行測試時很可能需要執行一組測試用例,這時設計一個TestSuite把這一組測試用例包括其中就是一個很好選擇。

(3)Test runner:該類的對象將執行測試用例,它的run(test)方法會觸發TestSuite/TestCase中的各個測試用例。

(4)TestLoader:將TestCase類實例化對象添加到TestSuite對象中。該類擁有多個loadTestsFrom__()方法,負責尋找所有TestCase類,并對這些TestCase類生成它們的對象,然后把這些對象添加到某個TestSuite對象中。

(5)Test fixture:測試用例執行前,創建測試環境;測試用例執行后,恢復測試環境,以利后續測試用例執行。可通過重寫TestCase類中的setUp()和tearDown()方法來實現[4]。

4" Unittest編寫Python測試代碼

使用Unittest編寫Python的測試代碼。

(1)編寫一個繼承Unittest模塊中的TestCase類的Python測試類。

(2)在該測試類中定義名字以test開頭的沒有參數的測試方法(通常一個測試用例就是一個測試方法)。測試方法中會使用某種參數調用被測試代碼,相當于執行了一個測試用例,最后使用斷言自動檢驗測試用例執行結果是否正確。TestCase類中包括大量這類斷言方法。

(3)編寫腳本去執行unittest.main()方法,它會實例化所有TestCase的子類,并運行這些對象中的所有測試用例。

unittest中提供的斷言方法有以下幾種:

⊙ assertEqual(a, b)和assertNotEqual(a, b)返回值是a是否等于b。

⊙ assertTrue(x)和assertFalse(x)的返回值是x的邏輯真假。

⊙ assertIs(a, b)和assertIsNot(a, b)的返回值是a是否就是b。

⊙ assertIsNone(x)和assertIsNotNone(x)的返回值是x是否為空值。

⊙ assertIn(a, b)和assertNotIn(a, b)的返回值是元素a是否在集合b中。

⊙ assertIsInstance(a, b)和assertNotIsInstance(a, b)的返回值是對象a是否是類b的實例。

5" Unittest測試263郵箱登錄案例

這是很簡單的測試263郵箱登錄的測試程序,主要包括以下幾個步驟。

#首先設置一些參數:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

#其次導入所需要的庫:

from selenium import webdriver

import unittest

import time

#創建繼承了TestCase類的測試類。

class mailboxLogin(unittest.TestCase):

#setUp方法建立測試用例執行環境

def setUp(self):

self.browser = webdriver.Firefox()

url = 'https://mail.263.net/'

self.browser.get(url)

time.sleep(3)

#一個測試用例就是一個方法

def test_a1(self):

self.browser.switch_to.frame(\"myframe\")

#獲取輸入的用戶名、密碼并且模擬單擊登

錄按鈕,用戶名及密碼為空

self.browser.find_element_by_name('myemail').send_keys('')

self.browser.find_element_by_name('mypassword').send_keys('')

self.browser.find_element_by_id('mylogin').click()

#獲取測試結果

self.browser.switch_to.default_content()

time.sleep(3)

name = self.browser.find_element_by_id('sbaidentity')

#檢查測試結果

if name == 'wangchunming@263.net':

print('成功登錄')

else:

print('失敗登錄')

def test_a2(self):

#通過輸入錯誤密碼形成新的測試用例

……

self.browser.find_element_by_name('mypassword').send_keys('mypassword')

……

#檢查測試結果

if name == 'wangchunming@263.net':

print('登錄成功')

else:

print('登錄失敗')

def test_a3(self):

#輸入正確用戶名、密碼。

……

self.browser.find_element_by_name('myemail').send_keys('wangchunming')

self.browser.find_element_by_name('mypassword').send_keys('wrongpassword')

……

#檢查結果

if name == 'wangchunming@263.net':

print('成功登錄')

else:

print('失敗登錄')

def tearDown(self):

#關閉為測試打開的瀏覽器

self.browser.quit()

if __name__ == \"__main__\":

#運行所有測試用例

unittest.main()

利用Firefox的Webdriver,我們可以用腳本程序模擬用戶在瀏覽器上的操作。SetUp建立測試環境,打開瀏覽器并進入www.yeah.net網頁,TearDown關閉瀏覽器,中間的每個測試方法都是一個測試用例,進行一次郵箱登錄操作,最后通過檢查Web服務器的返回結果來判斷是否符合預期輸出,并給出測試用例是成功還是失敗的輸出。

6" 主機安全監控系統中客戶端的自動化

測試實例

如參考文獻[5]所述,通過Python語言自帶Unittest框架完成自動化測試框架搭建,實現對主機安全監控系統客戶端的自動化測試。通過腳本操縱主機端口開啟和關閉以及添加和刪除帳號,檢驗客戶端是否能夠捕捉到該操作,以此來判斷測試用例是否正確執行。

首先完成自動化測試框架的設計,相關模塊主要如下。

(1)Unittest框架。用于編寫和保存測試用例腳本。

(2)PyYaml:PyYaml是Python中的處理Yaml格式數據的庫。對比JSON語言,Yaml存儲配置信息,功能更強大且使用更簡潔。

被測試對象主機安全監控系統遠比網站復雜,分成控制臺、服務端、客戶端三部分。客戶端可獲取主機配置信息、安全信息等。服務端處理數據并將數據寫入數據庫。控制臺可讀取數據庫數據并生成GUI向用戶展示這些數據。自動化測試流程大致如下:由測試腳本連接主機獲取相關信息,同時讀寫數據庫,通過腳本中編寫好的斷言判斷測試用例是否正確執行。

7" 結束語

隨著軟件規模的擴大,測試成本隨之大幅增長,提高測試質量、降低測試成本的一個關鍵方法就是采用先進的測試技術和工具。自動化測試是行業的發展趨勢,其顯著特點是可靠性強、效率高等,并且測試過程可保存,隨時可以重新測試(例如回歸測試)。而編寫并管理大量測試腳本和數據是目前實現軟件測試自動化的最簡單易行的方法。本文分析并研究了Python語言自帶的Unittest框架實現自動化測試的方法和實例,在提高測試質量的同時降低測試成本,特別是能夠全自動化地完成后續的回歸測試。■

參考文獻

[1] 叢春雨.Python語言在自動化測試系統設計中的應用研究.中國新通信[J].2020,22(10):119

[2] 王娜.基于Python的接口自動化測試框架設計.電腦知識與技術[J].2022(Vol 16)No 12:246-248

[3] 付玉珍.面向對象單元測試用例自動生成工具對比分析.電腦知識與技術[J].2020(16).02:53,54,60.

[4] 黃建軍,李宥謀,劉婧,周歡.基于Python語言的自動化測試系統的設計與實現[J].2017,40(04):39-43

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

主站蜘蛛池模板: 天堂在线www网亚洲| 日韩福利视频导航| 97久久人人超碰国产精品| 国产成人一区在线播放| 五月婷婷导航| 国产精品永久在线| 五月激情婷婷综合| 自偷自拍三级全三级视频| 天天色综网| 欧美中文一区| 亚洲青涩在线| 草草线在成年免费视频2| 久久99热这里只有精品免费看| 日韩专区欧美| 2020亚洲精品无码| 大学生久久香蕉国产线观看| 亚洲香蕉伊综合在人在线| 国产精品无码制服丝袜| 人妻免费无码不卡视频| AV天堂资源福利在线观看| 99久久性生片| 国产女人爽到高潮的免费视频| 欧美特级AAAAAA视频免费观看| 中文字幕丝袜一区二区| 人妻丰满熟妇啪啪| 日韩精品欧美国产在线| 日本精品视频| 亚洲性日韩精品一区二区| 播五月综合| 国产性生交xxxxx免费| 一级片一区| 亚洲精品图区| 亚洲精品午夜无码电影网| 麻豆精品在线视频| 91精品国产综合久久不国产大片| 久久久噜噜噜久久中文字幕色伊伊| 91欧美在线| 免费一级成人毛片| 波多野结衣中文字幕一区二区| aaa国产一级毛片| 国产精品毛片在线直播完整版| 国产精品视频公开费视频| 亚洲第一页在线观看| 亚洲日韩高清在线亚洲专区| 91福利在线看| 亚洲成人手机在线| 久草性视频| www.youjizz.com久久| 国产青青操| 亚洲人成成无码网WWW| 1024你懂的国产精品| 国产精品极品美女自在线网站| 国产主播一区二区三区| 日本免费高清一区| 国产精品亚洲一区二区在线观看| 四虎在线观看视频高清无码 | 久久久久国色AV免费观看性色| 国产综合另类小说色区色噜噜| 亚洲精品少妇熟女| 成人午夜天| 中文字幕天无码久久精品视频免费| 中文字幕久久波多野结衣| 欧美一级大片在线观看| 一级毛片免费不卡在线 | 亚洲精品无码久久毛片波多野吉| 日韩大乳视频中文字幕| 狂欢视频在线观看不卡| 青青草国产精品久久久久| 久无码久无码av无码| 91久久偷偷做嫩草影院电| 亚洲成人免费在线| 免费一级无码在线网站| 97se亚洲综合不卡| 欧美国产在线看| 99精品这里只有精品高清视频| 欧美日韩导航| 亚洲无码熟妇人妻AV在线| 中文字幕亚洲精品2页| 亚洲中文精品人人永久免费| 狠狠色综合网| 亚洲欧美一区二区三区蜜芽| 国产成人亚洲毛片|