日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python单元测试之pytest

發布時間:2025/3/20 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python单元测试之pytest 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前提:需要安裝pytest和pytest-html(生成html測試報告)
pip install pytest
pip install pytest-html

安裝成功展示:

1.命名規則

Pytest單元測試中的類名和方法名必須是以test開頭,執行中只能找到test開頭的類 和方法,比unittest 更加嚴謹

setup和teardown運行于測試方法的始末,即:運行一次測試函數會運行一次

setup_class和 teardown_class運行于測試方法的始末,但是不管有多少測試函數都只執行一次
案例:

import pytestclass TestClass:def setup_class(self):print('測試前執行一次')def setup(self):print('start')def test01(self):print('test01')def test02(self):print('test02')def teardown(self):print('end')def teardown_class(self):print('測試后執行一次') if __name__ == '__main__':pytest.main(['-s'])

2.Pytest生成自帶的html測試報告

前提條件:需要下載pytest-html模塊(python自帶的生成測試報告模塊)

pip install pytest-html

案例一:

pytest.main(“模塊.py”)【運行指定模塊下,運行所有test開頭的類和測試用例】

pytest.main(["--html=./report.html","模塊.py"])


案例二:

運行指定模塊指定類指定用例,冒號分割,并生成測試報告

pytest.main([--html=./report.html’,‘模塊.py::類名::用例名'])


案例三:

直接執行pytest.main() 【自動查找當前目錄下,以test開頭的文件或者以test結尾的py文件】

pytest.main([--html=./report.html’])

如果沒有找到以test開頭的文件或者以test結尾的py文件展示如下圖:

pytest調用語句

pytst.main(['-x','--html=./report.html'])

-x出現一條測試用例失敗就退出測試

-x出現一條測試用例失敗就退出測試 -v: 豐富信息模式, 輸出更詳細的用例執行信息 -s:顯示print內容 -q: 簡化結果信息,不會顯示每個用例的文件名

擴展:跳充

使用@pytest.mark.skip()跳過該用例(函數)

跳過test01用例展示:

3.pytest的運行方式

. 點號,表示用例通過 F 表示失敗 Failure E 表示用例中存在異常 Error s 表示跳過用例

4.文件讀取

讀取csv文件

import csv #導入csv模塊 class ReadCsv(): def read_csv(self): item =[] #定義一個空列表 c = csv.reader(open("../commonDemo/test1.csv","r")) #得到csv文件對象 for csv_i in c: item.append(csv_i) #將獲取的數據添加到列表中 return item r = ReadCsv() print(r.read_csv())

讀取xml文件

from xml.dom import minidom class Readxml(): def read_xml(self,filename,onename,twoname): root =minidom.parse(filename) firstnode =root.getElementsByTagName(onename)[0]secondnode=firstnode.getElementsByTagName(twoname)[0].firstChild.data return secondnode

5.allure

allure是一款輕量級并且非常靈活的開源測試報告框架。 它支持絕大多數測試框架, 例如TestNG、Pytest、JUint等。它簡單易用,易于集成。

首先配置allure的環境變量

驗證allure是否配置成功

其次要安裝allure

pip install allure-pytest

allure-pytest是Pytest的一個插件,通過它我們可以生成Allure所需要的用于生成測試報告的數據

allure常用的幾個特性

@allure.feature # 用于描述被測試產品需求 @allure.story # 用于描述feature的用戶場景,即測試需求 with allure.step: # 用于描述測試步驟,將會輸出到報告中 allure.attach # 用于向測試報告中輸入一些附加的信息,通常是一些測試數據, 截圖等

案例一:實現用戶登錄功能,場景為登錄成功和登錄失敗

import pytest,allure,os # 導入模塊class TestAnli:@allure.feature('用戶登錄功能') # 用于定義被測試的功能,被測產品的需求點@allure.story('用戶登錄成功') # 用于定義被測功能的用戶場景,即子功能點def test_success(self):assert 1==1@allure.feature('用戶登錄功能') # 用于定義被測試的功能,被測產品的需求點@allure.story('用戶登錄失敗') # 用于定義被測功能的用戶場景,即子功能點def test_fail(self):assert 1==2if __name__ == '__main__':pytest.main(['--alluredir', 'report/result','test_denglu.py']) # 生成json類型的測 試報告split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean' #將測試報告轉為html格式os.system(split) # system函數可以將字符串轉化成命令在服務器上運行

pytest和allure效果展示

案例二:實現產品信息展示,車展中的各種車的品牌

import pytest,allure,os # 導入模塊class TestCart:@allure.feature('車展') # 用于描述被測試產品需求@allure.story('展示車輛') # 用于描述feature的用戶場景,即測試需求def test_cart(self):with allure.step('查看大眾系列的車'): # 用于描述測試步驟,將會輸出到報告中allure.attach('邁騰') # 用于向測試報告中輸入一些附加的信息allure.attach('輝騰') # 用于向測試報告中輸入一些附加的信息with allure.step('查看奔馳系列的車'): # 用于描述測試步驟,將會輸出到報告中allure.attach('大G') # 用于向測試報告中輸入一些附加的信息allure.attach('邁巴赫') # 用于向測試報告中輸入一些附加的信息if __name__ == '__main__':pytest.main(['--alluredir', 'report/result', 'test_cart.py']) # 生成json類型的測 試報告split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean' # 將測試報告轉為html格式os.system(split) # system函數可以將字符串轉化成命令在服務器上運行

pytest和allure效果展示

請欣賞福利

案例: 通過讀取csv/xml數據并且結合使用allure展示測試報告,驗證開發中的add() 和reduct()操作(在@allure.story分別實現相加減)

第一種:xml文件讀取數據進行單元測試并生成測試報告

第一步:開發的代碼

class Demo:def add(self,a,b):c=a+breturn cdef reduct(self,a,b):c=a-breturn c

第二步:創建一個xml文件

<node><add><add1>2</add1><add2>1</add2><add3>3</add3></add><reduct><reduct1>5</reduct1><reduct2>2</reduct2><reduct3>3</reduct3></reduct> </node>

第三步:讀取xml文件

from xml.dom import minidom class Readxml():def read_xml(self,filename,onename,twoname):root =minidom.parse(filename)firstnode =root.getElementsByTagName(onename)[0]secondnode=firstnode.getElementsByTagName(twoname)[0].firstChild.datareturn secondnode r = Readxml()

第四步:傳遞參數進行單元測試并結合allure生成測試報告

import pytest,allure,os from demo.demo import Demo from readdata.readxml import Readxmlr=Readxml() add1=r.read_xml('../data/testxml.xml','add','add1') add2=r.read_xml('../data/testxml.xml','add','add2') add3=r.read_xml('../data/testxml.xml','add','add3') re1=r.read_xml('../data/testxml.xml','reduct','reduct1') re2=r.read_xml('../data/testxml.xml','reduct','reduct2') re3=r.read_xml('../data/testxml.xml','reduct','reduct3') d=Demo()class TestFuli:@allure.feature('相加的操作')@allure.story('相加成功')def test_add(self):res=d.add(int(add1),int(add2))assert res==int(add3)@allure.feature('相減的操作')@allure.story('相減成功')def test_reduct(self):res = d.reduct(int(re1), int(re2))assert res == int(re3) if __name__ == '__main__':pytest.main(['--alluredir', 'report/result', 'test_lianxi.py']) # 生成json類型的測試報告split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean' # 將測試報告轉為html格式os.system(split) # system函數可以將字符串轉化成命令在服務器上運行

展示結果:

第二種:csv文件讀取數據進行單元測試并生成測試報告

第一步:開發的代碼

class Demo:def add(self,a,b):c=a+breturn cdef reduct(self,a,b):c=a-breturn c

第二步:創建兩個csv文件

246 615

第三步:讀取csv文件

import csv # 導入csv模塊class ReadCsv():def add_csv(self):item = [] # 定義一個空列表c = csv.reader(open("../data/testcsv1.csv", "r")) # 得到csv文件對象for csv_i in c:item.append(csv_i) # 將獲取的數據添加到列表中return itemdef reduct_csv(self):item = [] # 定義一個空列表c = csv.reader(open("../data/testcsv2.csv", "r")) # 得到csv文件對象for csv_i in c:item.append(csv_i) # 將獲取的數據添加到列表中return itemr = ReadCsv()

第四步:傳遞參數進行單元測試并結合allure生成測試報告

import pytest,allure,os from demo.demo import Demo from readdata.readcsv import ReadCsvr=ReadCsv() add1=r.add_csv() re1=r.reduct_csv() d=Demo() class TestFuli:@allure.feature('相加的操作')@allure.story('相加成功')def test_add(self):for i in add1:res=d.add(int(i[0]),int(i[1]))assert res==int(i[2])@allure.feature('相減的操作')@allure.story('相減成功')def test_reduct(self):for i in re1:res=d.reduct(int(i[0]),int(i[1]))assert res==int(i[2]) if __name__ == '__main__':pytest.main(['--alluredir', 'report/result', 'test_xml.py']) # 生成json類型的測試報告split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean' # 將測試報告轉為html格式os.system(split) # system函數可以將字符串轉化成命令在服務器上運行

總結

以上是生活随笔為你收集整理的Python单元测试之pytest的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 人人超碰97 | jizz免费观看 | 精品视频在线观看免费 | 亚洲国产精品天堂 | 波多野结衣视频在线播放 | 美国美女黄色片 | 欧美第二页| 国产久草视频 | 在线观看 中文字幕 | 97在线播放免费观看 | 免费污污视频在线观看 | 亚洲天堂二区 | 国产精品揄拍100视频 | 女人的洗澡毛片毛多 | 天天操操 | 一起草av在线 | 91成人免费 | 国产免费av在线 | 免费观看一级一片 | 又色又爽又黄18网站 | 麻豆一区二区在线观看 | 三级视频网址 | 成人综合站 | 综合色婷婷一区二区亚洲欧美国产 | 亚洲麻豆一区 | 永久免费视频网站 | 亚洲黄色av | av黄色成人 | www.久热 | 亚洲片国产一区一级在线观看 | 凹凸视频一区二区 | 99资源在线| 最近中文字幕在线中文高清版 | 欧美一区二区三区视频在线观看 | 欧美a级肉欲大片xxx | 色av网| 好av| 亚洲激情在线 | 九九热在线观看 | 国产一区 在线播放 | 狠狠躁18三区二区一区视频 | 美女扒开尿口给男人桶 | 91尤物视频在线观看 | 亚洲一级片网站 | 欧美一级做a爰片免费视频 成人激情在线观看 | 亚洲第一页中文字幕 | 蜜臀99久久精品久久久久久软件 | 免费公开在线视频 | 偷拍女澡堂一区二区三区 | 禁漫天堂下载18 | 极品探花在线播放 | 亚洲天堂男人 | 男人和女人做爽爽视频 | 欧美,日韩,国产在线 | 亚洲成人生活片 | 黄色片视频免费在线观看 | 免费毛片网站 | 2018国产精品| av色图在线| 久久久天堂 | 奇米一区二区三区 | 男人午夜视频 | 69久久精品无码一区二区 | 精品不卡一区二区三区 | 7788色淫网站小说 | 久久精品无码毛片 | 精品欧美黑人一区二区三区 | 四季av综合网站 | 国产第二页 | 91成人动漫| 少妇真实被内射视频三四区 | 天天添| 日日夜夜精品视频 | 高清在线一区二区三区 | 四虎成人在线 | 欧美综合社区 | 黄色一级在线视频 | 一区二区三区视频在线 | 欧美精品一区在线 | 韩国日本在线观看 | 免费九九视频 | 国产精品久久久毛片 | 久久久精品久久久 | 日本少妇xxxx | 欧美亚洲精品天堂 | yy6080久久 | 国产乱真实合集 | 肉色欧美久久久久久久免费看 | 国产中文字幕在线免费观看 | 欧美精品一区二区三区久久久竹菊 | 国产精品美女一区 | 午夜精品久久久久久久久久久久久蜜桃 | 天天插天天爱 | 日韩美女激情 | 新红楼梦2005锦江版高清在线观看 | 国产黄色一区二区三区 | 日本做爰高潮又黄又爽 | n0659极腔濑亚美莉在线播放播放 | 亚洲天堂小说 |