PyTest自動化測試 學(xué)習(xí)基礎(chǔ)知識之PyTest生成html測試報(bào)告诵棵;allure開源測試報(bào)告框架

目錄

一忌穿、pytest簡介

1.1運(yùn)行成功則在命令行顯示 類名+.

1.1.1CaculateAdd.py類(定義了add()和jian() 兩個方法)

1.1.2TestPytestHtmlDemo.py類(pytest運(yùn)行demo:注意是Test開頭)

1.1.3運(yùn)行幾個成功類名后面就幾個.

1.1.4運(yùn)行錯誤的展示F

1.1.5運(yùn)行幾個錯誤 類名后就展示幾個F

1.2Pytest生成自帶的html測試報(bào)告

1.2.1運(yùn)行代碼如下:

1.2.2打開123.html

1.3 pytest -x的使用等

-x出現(xiàn)一條測試用例失敗就退出測試

-v: 豐富信息模式, 輸出更詳細(xì)的用例執(zhí)行信息

-s:顯示print內(nèi)容

-q: 簡化結(jié)果信息连躏,不會顯示每個用例的文件名

二石景、allure開源測試報(bào)告

2.1安裝allure

2.1.1配置allure,環(huán)境變量path配置:新增allure的bin目錄下的路徑

三畦幢、pytest和alluredir的生成測試報(bào)告json

3.1運(yùn)行前

?3.2運(yùn)行后(多了allurePackage/response文件夾)

3.3Pytest和allure結(jié)合生成html格式的測試報(bào)告

3.4index.html頁面Allure測試報(bào)告

? ?

四坎吻、Allure常用的幾個特性

4.1 @allure.feature使用

4.2@allure.story

4.4with allure.step("用戶登錄"): # 用于描述測試步驟,將會輸出到報(bào)告中 allure.attach("GUOYING","用戶名") # 用于向測試報(bào)告中輸入一些附加的信息宇葱,通常是一些測試數(shù)據(jù)禾怠,截圖等


一返奉、pytest簡介

**需要安裝pytest和pytest-html(生成html測試報(bào)告) **

**pip install pytest 和 pip install pytest-html **

**命名規(guī)則 **

**Pytest單元測試中的類名和方法名必須是以test開頭,執(zhí)行中只能找到test開頭的類和方法贝搁,比unittest更加嚴(yán)謹(jǐn) **

unittest:Setup>> setupclass teardown teardownclass

Pytest的setup, setup_class和teardown, teardown_class函數(shù)(和unittest執(zhí)行效果一樣) 運(yùn)行于測試方法的始末吗氏,

**setup,teardown :即:運(yùn)行一次測試函數(shù)會運(yùn)行一次setup和teardown **

setup_class,teardown_class:運(yùn)行于測試方法的始末,但是不管有多少測試函數(shù)都只執(zhí)行一次setup_class和 teardown_class

1.1運(yùn)行成功則在命令行顯示 類名+.

1.1.1CaculateAdd.py類(定義了add()和jian() 兩個方法)

class CaculateAddClass:    
def add(self,a,b):        
c = a+b        
return c    
def jian(self,a,b):        
d = a-b        
return d

1.1.2TestPytestHtmlDemo.py類(pytest運(yùn)行demo:注意是Test開頭)

from PyTest.CaculateAdd import CaculateAddClassimport pytest  
class TestPyDemoHtmlClass:    
def test_1(self):        
a = CaculateAddClass()        
c = a.add(1, 2)        
assert c == 3     

#先運(yùn)行test_1雷逆,這個test_2一會兒在放開注釋    
# def test_2(self):    
#     a = CaculateAddClass()    
#     d = a.jian(3, 2)    
#     assert d == 1 

 #程序主入口不寫不運(yùn)行
if __name__ == '__main__':    
pytest.main(['TestPytestHtmlDemo.py'])#['類名']運(yùn)行這個類

運(yùn)行結(jié)果:(因?yàn)?+2=3弦讽,assert c==3,符合程序運(yùn)行結(jié)果膀哲,正確)

. 點(diǎn)號往产,表示用例通過

F 表示失敗 Failure

E 表示用例中存在異常 Error

image

1.1.3運(yùn)行幾個成功類名后面就幾個.

from PyTest.CaculateAdd import CaculateAddClassimport pytest  
class TestPyDemoHtmlClass:    
def test_1(self):        
a = CaculateAddClass()        
c = a.add(1, 2)        
assert c == 3        

def test_2(self):        
a = CaculateAddClass()        
d = a.jian(3, 2)        
assert d == 1  

#程序主入口不寫不運(yùn)行
if __name__ == '__main__':    
pytest.main(['TestPytestHtmlDemo.py'])#['類名']運(yùn)行這個類

image

1.1.4運(yùn)行錯誤的展示F

from PyTest.CaculateAdd import CaculateAddClassimport pytest  
class TestPyDemoHtmlClass:    
def test_1(self):        
a = CaculateAddClass()        
c = a.add(1, 2)        
assert c == 4     

#先運(yùn)行test_1,這個test_2一會兒在放開注釋    
# def test_2(self):    
#     a = CaculateAddClass()    
#     d = a.jian(3, 2)    
#     assert d == 1  

#程序主入口不寫不運(yùn)行
if __name__ == '__main__':    
pytest.main(['TestPytestHtmlDemo.py'])#['類名']運(yùn)行這個類

運(yùn)行結(jié)果:

image

1.1.5運(yùn)行幾個錯誤 類名后就展示幾個F

image
image

1.2Pytest生成自帶的html測試報(bào)告

1.在Pycharm安裝pytest自帶的測試報(bào)告包:
pip install pytest-html

2.直接執(zhí)行pytest.main() 【自動查找當(dāng)前目錄下某宪,以test_開頭的文件或者以_test結(jié)尾的py文件】

pytest.main("模塊.py") 【運(yùn)行指定模塊下仿村,運(yùn)行所有test開頭的類和測試用例】

**3.python自帶的插件 **

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

# 程序主入口不寫不運(yùn)行
if __name__ == '__main__':    
pytest.main(["--html=./report.html", "TestPytestHtmlDemo.py"])  # 第一個參數(shù)是html,第二個是['類名']

1.2.1運(yùn)行代碼如下:

from PyTest.CaculateAdd import CaculateAddClassimport pytest  
class TestPyDemoHtmlClass:    
def setup(self):        
print("========setup========start")     
def test_1(self):        
a = CaculateAddClass()        
c = a.add(1, 2)        
assert c == 3     
def test_2(self):        
a = CaculateAddClass()        
d = a.jian(3, 2)        
assert d == 1     
def teardown(self):        
print("========teardown========end") 

# 程序主入口不寫不運(yùn)行
if __name__ == '__main__':    
pytest.main(["--html=./report.html", "TestPytestHtmlDemo.py"])  # 第一個參數(shù)是html兴喂,第二個是['類名']    # pytest.main(['-x','TestPytestHtmlDemo.py'])#['類名']運(yùn)行這個類

運(yùn)行結(jié)果:

image

1.2.2打開123.html

image
image

1.3 pytest -x的使用等

pytest.main(['-x','--html=./report.html','t12est000.py'])

-x出現(xiàn)一條測試用例失敗就退出測試

-v: 豐富信息模式, 輸出更詳細(xì)的用例執(zhí)行信息

-s:顯示print內(nèi)容

-q: 簡化結(jié)果信息蔼囊,不會顯示每個用例的文件名

二、allure開源測試報(bào)告

** Allure是一款輕量級并且非常靈活的開源測試報(bào)告框架衣迷。 它支持絕大多數(shù)測試框架畏鼓, 例如TestNG、Pytest壶谒、JUint等云矫。它簡單易用,易于集成汗菜。**

2.1安裝allure

首先要在Pycharm安裝:allure-pytest是Pytest的一個插件让禀,通過它我們可以生成Allure所需要的用于生成測試報(bào)告的數(shù)據(jù)

allure:

pip install allure-pytest

2.1.1配置allure,環(huán)境變量path配置:新增allure的bin目錄下的路徑

三陨界、pytest和alluredir的生成測試報(bào)告json

import pytest  class TestAllureClass:     
def test1(self):        
print("我是第一個數(shù)據(jù)")     
def test2(self):        
print("我是第二個數(shù)據(jù)")     
def test3(self):        
print("我是第三個數(shù)據(jù)") 

if __name__ == '__main__':   
 #第一個是allure文件夾巡揍;    
#第二個是數(shù)據(jù)(json/txt)返回到這個目錄下response文件夾下;    
#第三個類名    
pytest.main(['--alluredir','allurePackage/response','TestAllure.py'])    
# pytest.main(['--html=./321.html','TestAllure.py'])

3.1運(yùn)行前

image

3.2運(yùn)行后(多了allurePackage/response文件夾)

image

3.3Pytest和allure結(jié)合生成html格式的測試報(bào)告

pytest.main(['--alluredir','allurePackage/response','TestAllure.py'])    ## 將測試報(bào)告轉(zhuǎn)為html格式# --html=../report.html    

split = 'allure ' + 'generate ' + './allurePackage/response ' + '-o ' + './allurePackage/html ' + '--clean'    os.system(split)#system函數(shù)可以將字符串轉(zhuǎn)化成命令在服務(wù)器上運(yùn)行

運(yùn)行前:

image

運(yùn)行后:

image

3.4index.html頁面Allure測試報(bào)告

image

image

四普碎、Allure常用的幾個特性

@allure.feature # 用于描述被測試產(chǎn)品需求

@allure.story # 用于描述feature的用戶場景吼肥,即測試需求

with allure.step(): # 用于描述測試步驟,將會輸出到報(bào)告中

**allure.attach # 用于向測試報(bào)告中輸入一些附加的信息麻车,通常是一些測試數(shù)據(jù)缀皱,截圖等 **

4.1 @allure.feature使用

import pytest,os,allure  
class TestAllureClass:     
@allure.feature("用戶登錄功能")    
def test1(self):        
print("我是第一個數(shù)據(jù)")     

@allure.feature("用戶注冊功能")    
def test2(self):        
print("我是第二個數(shù)據(jù)")     
@allure.feature("用戶注冊/登錄功能")    
def test3(self):        
print("我是第三個數(shù)據(jù)") 

if __name__ == '__main__':    
# pytest.main(['--html=./321.html','TestAllure.py'])    
#生成測試報(bào)告json   
 #第一個是allure文件夾;    
#第二個是數(shù)據(jù)(json/txt)返回到這個目錄下response文件夾下动猬;    
#第三個類名    
pytest.main(['--alluredir','allurePackage/response','TestAllure.py'])    ## 將測試報(bào)告轉(zhuǎn)為html格式# --html=../report.html    

split = 'allure ' + 'generate ' + './allurePackage/response ' + '-o ' + './allurePackage/html ' + '--clean'    os.system(split)#system函數(shù)可以將字符串轉(zhuǎn)化成命令在服務(wù)器上運(yùn)行

運(yùn)行后:

image

4.2@allure.story

import pytest,os,allure  
class TestAllureClass:     
@allure.feature("用戶登錄功能")    
@allure.story("步驟1")    
def test1(self):        
print("我是第一個數(shù)據(jù)")     

@allure.feature("用戶注冊功能")    
@allure.story("步驟2")    
def test2(self):        
print("我是第二個數(shù)據(jù)")     

@allure.feature("用戶注冊/登錄功能")    
@allure.story("步驟3")    
def test3(self):        
print("我是第三個數(shù)據(jù)") 

if __name__ == '__main__':    
# pytest.main(['--html=./321.html','TestAllure.py'])    
#生成測試報(bào)告json    
#第一個是allure文件夾啤斗;    
#第二個是數(shù)據(jù)(json/txt)返回到這個目錄下response文件夾下;    
#第三個類名    
pytest.main(['--alluredir','allurePackage/response','TestAllure.py'])    
## 將測試報(bào)告轉(zhuǎn)為html格式# --html=../report.html   

split = 'allure ' + 'generate ' + './allurePackage/response ' + '-o ' + './allurePackage/html ' + '--clean'    os.system(split)#system函數(shù)可以將字符串轉(zhuǎn)化成命令在服務(wù)器上運(yùn)行

運(yùn)行結(jié)果:

image
image

4.4with allure.step("用戶登錄"): # 用于描述測試步驟赁咙,將會輸出到報(bào)告中

 allure.attach("GUOYING","用戶名")  # 用于向測試報(bào)告中輸入一些附加的信息钮莲,通常是一些測試數(shù)據(jù)免钻,截圖等
import pytest,os,allure


class TestAllureClass:

    @allure.feature("用戶登錄功能")
    @allure.story("步驟1")
    def test1(self):
        with allure.step("用戶登錄"): # 用于描述測試步驟,將會輸出到報(bào)告中
            allure.attach("GUOYING","用戶名")  # 用于向測試報(bào)告中輸入一些附加的信息崔拥,通常是一些測試數(shù)據(jù)极舔,截圖等
        with allure.step("商品查看"):
            allure.attach("瑪莎拉蒂","MC20")
        print("我是第一個數(shù)據(jù)")

    @allure.feature("用戶注冊功能")
    @allure.story("步驟2")
    def test2(self):
        print("我是第二個數(shù)據(jù)")

    @allure.feature("用戶注冊/登錄功能")
    @allure.story("步驟3")
    def test3(self):
        print("我是第三個數(shù)據(jù)")

if __name__ == '__main__':
    # pytest.main(['--html=./321.html','TestAllure.py'])
    #生成測試報(bào)告json
    #第一個是allure文件夾;
    #第二個是數(shù)據(jù)(json/txt)返回到這個目錄下response文件夾下链瓦;
    #第三個類名
    pytest.main(['--alluredir','allurePackage/response','TestAllure.py'])
    ## 將測試報(bào)告轉(zhuǎn)為html格式# --html=../report.html?
    split = 'allure ' + 'generate ' + './allurePackage/response ' + '-o ' + './allurePackage/html ' + '--clean'
    os.system(split)#system函數(shù)可以將字符串轉(zhuǎn)化成命令在服務(wù)器上運(yùn)行

image

運(yùn)行結(jié)果:

image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拆魏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子慈俯,更是在濱河造成了極大的恐慌渤刃,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贴膘,死亡現(xiàn)場離奇詭異卖子,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)刑峡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門洋闽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人氛琢,你說我怎么就攤上這事喊递。” “怎么了阳似?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵骚勘,是天一觀的道長。 經(jīng)常有香客問我撮奏,道長俏讹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任畜吊,我火速辦了婚禮泽疆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘玲献。我一直安慰自己殉疼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布捌年。 她就那樣靜靜地躺著瓢娜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪礼预。 梳的紋絲不亂的頭發(fā)上眠砾,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音托酸,去河邊找鬼褒颈。 笑死柒巫,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谷丸。 我是一名探鬼主播堡掏,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼淤井!你這毒婦竟也來了布疼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤币狠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后砾层,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漩绵,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年肛炮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了止吐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡侨糟,死狀恐怖碍扔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情秕重,我是刑警寧澤不同,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站溶耘,受9級特大地震影響二拐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凳兵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一百新、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧庐扫,春花似錦饭望、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碘勉,卻和暖如春巷挥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背验靡。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工倍宾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雏节,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓高职,卻偏偏與公主長得像钩乍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子怔锌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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