1. 接口自動化之框架搭建:Python+request+pytest+allure

說明:測試系統(tǒng):外賣-商家平臺
測試工作中,針對接口測試我們通常有單接口測試以及接口自動化測試宰翅,不論是單接口還是接口自動化測試,我們都有如下幾種測試方案:


自動化階段一般分為如下幾個:

那么,使用代碼如何開展接口自動化測試呢?有以下幾個步驟:
1凌那、選擇自動化測試用例:業(yè)務(wù)流程優(yōu)先,單接口靠后吟逝,功能穩(wěn)定優(yōu)先案怯,變更頻繁不選。
2澎办、搭建自動化測試環(huán)境(本篇)
(1)安裝python編譯器3.7版本以上--自行安裝
(2)安裝pycharm工作,方便編寫和維護(hù)代碼--自行安裝
(3)安裝request三方庫金砍,用于發(fā)送請求
(4)安裝pytest三方庫局蚀,用于編寫測試用例
(5)安裝allure,用于查看生成和查看測試報告
3恕稠、搭建自動化測試框架
(1)搭建基礎(chǔ)框架項(xiàng)目目錄結(jié)構(gòu)
(2)通用功能類的封裝琅绅,如數(shù)據(jù)庫連接,excle讀取等
(3)接口對象(業(yè)務(wù)類)封裝與調(diào)用:接口API+Pytest框架編寫測試腳本
(4)測試數(shù)據(jù)參數(shù)化(一般是針對單接口的)鹅巍,測試數(shù)據(jù)json,yaml,excle等
(5)用例組織運(yùn)行千扶,運(yùn)行測試用例并生成測試報告
4、代碼實(shí)現(xiàn)自動化
5骆捧、實(shí)現(xiàn)持續(xù)集成CICD

自行完成python和pycharm工具的安裝后澎羞,我們接下來就是安裝request,pytest,以及allure,下面一一說明敛苇。

request安裝

request是一個三方的庫妆绞,他的安裝非常簡單,如下
安裝:python -m pip install requests
驗(yàn)證:pip show requests
request的使用步驟:導(dǎo)入包-->發(fā)送接口請求--->查看響應(yīng)數(shù)據(jù)

  • request發(fā)送請求:
request.請求方法(url,params=None,data=None,json=None,header=None)
//請求方法一般為:get,post,put,delete
  • requests查看響應(yīng)
    查看狀態(tài)碼:response.status_code
    json形式的響應(yīng)內(nèi)容獲取:response.json()
    文本形式的響應(yīng)內(nèi)容獲壤ㄈ摹:response.text
    查看請求url:response.url
    查看響應(yīng)頭部字符編碼:response.encoding
    查看頭信息:response.headers
    查看cookie:response.cookie
    簡單示例:
# 1 導(dǎo)包
import requests
# 2 發(fā)送請求
response = requests.get(url='www.baidu.com')
# 查看響應(yīng)
print(response.status_code)
print(response.text)

pytest框架環(huán)境搭建

1.使用pip安裝pytest

pip install pytest  安裝pytest
pip install pytest-html  原生態(tài)的報告模板

2.查看安裝是否成功

pip show pytest

3.pytest執(zhí)行測試用例的規(guī)則

  • .py測試文件必須以test開頭(或以test結(jié)尾)
  • 測試類必須以Test開頭株茶,且無init方法
  • 測試方法必須以test開頭,def test_001()
  • 斷言必須使用assert

4. 數(shù)據(jù)驅(qū)動(參數(shù)化)
數(shù)據(jù)驅(qū)動:data driver testing(DDT)图焰,在自動化測試中測試數(shù)據(jù)與功能函數(shù)相分離启盛,單獨(dú)存儲,運(yùn)行自動化測試用例時技羔,框架會讀取數(shù)據(jù)源中的數(shù)據(jù)僵闯,把數(shù)據(jù)作為參數(shù)傳遞到功能函數(shù)中。
由于一般測試用例覆蓋多條不同輸入堕阔,根據(jù)不同的前置條件選取多條數(shù)據(jù)執(zhí)行多次同一功能函數(shù)棍厂,這樣減少重復(fù)代碼,不同輸入條件之間的測試結(jié)果互相不受影響超陆,這就是數(shù)據(jù)驅(qū)動牺弹。

在方法前添加語法糖即可實(shí)現(xiàn)參數(shù)化:

# @pytest.mark.parameriza('變量名',[參數(shù)化數(shù)據(jù)])    ---單一參數(shù)
@pytest.mark.parameriza('a',[1,2,3])
def test_001(self,a):
  print('第一個測試用例')
  assert 1+1==a
# 說明:用例會執(zhí)行三次(三組數(shù)據(jù))时呀,a分別為1张漂,2,3

# @pytest.mark.parameriza('變量名1谨娜,變量名2'航攒,[(value1.,value2)趴梢,(value2漠畜,)]) ,多個參數(shù)
@pytest.mark.parameriza('a,b',[(1,2),(3,4),(5,6)])
def test_001(self,a,b):
  print('第一個測試用例')
  assert a+1==b
# 說明:用例會執(zhí)行三次(三組數(shù)據(jù))坞靶,a分別為1憔狞,3,5,b分別為2彰阴,4瘾敢,6

5.pytest的 setup 與 teardown

  • setup:前置條件,測試用例的前置條件
  • teardown: 后置條件尿这,用例執(zhí)行后簇抵,需要恢復(fù)測試環(huán)境
  • yield :在這個關(guān)鍵字之前的代碼為setup部分,之后的代碼為teardown部分
    在pytest中有四種setup和teardown
    1射众、setup_module & teardown_module:在整個測試用例所在的文件中所有的方法運(yùn)行前和運(yùn)行后運(yùn)行碟摆,只會運(yùn)行一次;
    2叨橱、setup_class和teardown_class:則在整個文件中的一個class中所有用例的前后運(yùn)行焦履;
    3拓劝、setup_method和teardown_method:在class內(nèi)的每個方法運(yùn)行前后運(yùn)行;
    4嘉裤、setup_function郑临、teardown_function:在非class下屬的每個測試方法的前后運(yùn)行;
import pytest
 @pytest.fixture(scope='session')  #裝飾器,聲明下面的函數(shù)是setup函數(shù),缺省值為function級
 #scope可以加入?yún)?shù)scope='class',將級別改為class
 #scope可以加入?yún)?shù)scope='module',將級別改為module
 #scope='session'  使用這個級別時,將fixture的內(nèi)容寫到conftest.py文件中,目錄下的所有文件都使用這個配置
 def fun1():
     print('開始')
     yield  #這個關(guān)鍵字之后的代碼相當(dāng)于teardown
     print('結(jié)束')
 def test_c01(fun1):
     assert 1==2
 if __name__ == '__main__':
     pytest.main(['conftest.py','-s'])

6屑宠、運(yùn)行文件:

  • 運(yùn)行并生成html測試報告:pytest 用例路徑 --html=./report/result.html 厢洞, 注意:--html= 沒有空格.
  • 運(yùn)行該測試模塊:pytest test_login.py -s, -s 輸出print信息
  • 用main()方法來運(yùn)行:pytest.main(['當(dāng)前用例路徑','--html=測試報告/XX.html ']) ---> 運(yùn)行并生成html測試報告
  • 通過allure生成測試報告:pytest.main([__file__, '-sv','--alluredir','./report/report','--clean-alluredir'])

Allure安裝--pytest 結(jié)合Allure操作

  • Allure 安裝
    1典奉、下載Allure.zip并解壓到任意目錄(C:\allure\allure-2.13.0\)
    2躺翻、添加該路徑到環(huán)境變量的path中
    3、cmd 安裝 pip install allure-pytest
    4卫玖、驗(yàn)證是否安裝成功:cmd 中輸入allure --version查看盜版本信息
    如果安裝不成功公你,可以在環(huán)境變量--系統(tǒng)變量--path中配置上allure的bin目錄
    5、allure報告生成:cmd執(zhí)行命令生成假瞬、pycharm的終端Terminal執(zhí)行命令
    (1)方式1:pytest [測試文件] -s -q --alluredir=../report/tmp 生成Allure報告, 數(shù)據(jù)存在/tmp目錄陕靠,--alluredir用于指定存儲測試結(jié)果的路徑;-s 表示允許執(zhí)行print語句;
    (2)方式2:allure generate ../report/tmp -o ..report/tmp --clean 生成測試報告脱茉,–clean 覆蓋路徑
    6剪芥、查看測試報告
    (1)使用默認(rèn)瀏覽器打開:allure serve ../report/tmp/
    (2)打開報告:allure open -h 127.0.0.1 -p 8883 ./report/

在cmd/終端中:測試用例的執(zhí)行以及報告的生成如下:

pytest test_feature_story.py --alluredir=./result/2  # 執(zhí)行測試用例模塊test_feature_story.py
allure generate ./result/2 -o ./report/2/ --clean  # 生成allure 測試報告
allure open -h 127.0.0.1 -p 8883 ./report/2 # 打開allure 測試報告

在自動化測試中,執(zhí)行以及生成報告如下:在main.py模塊中琴许,并運(yùn)行可自動生成報告

pytest.main(["./test_script", "-sv","--alluredir","./report/temp_jsonreport"]) 
os.system("allure generate ./report/temp_jsonreport -o ./report/html --clean")

# ./test_script   測試用例的路徑税肪,可以吧多個測試用例寫在這個一個文件中
# --alluredir      創(chuàng)建allure報告的路徑
# -o是執(zhí)行
# --clean是清除之前生成的報告
# 或者
pytest.main([__file__, '-sv','--alluredir','./report/report','--clean-alluredir'])     
os.system('allure serve ./report/report')  #  

注意:因?yàn)閍llure生成的報告是json格式的,需要再轉(zhuǎn)化成html格式的榜田,所以會自動生成一個temp_jsonreport文件

  • allure 報告可以展示多級
    @allure.epic('1')
    @allure.feature(‘2’)
    @allure .story('3')
    @allure.title(‘4’)

例子:簡單生成報告的過程

import pytest 
import allure 
import os
@allure.epic('項(xiàng)目名稱') 
@allure.feature('業(yè)務(wù)模塊名稱') 
class Test100:     
  @allure.story('接口名稱')    
  @allure.title('用例標(biāo)題1')    
  def test_c100(self):         
    assert 1 == 2     
  @allure.story('接口名稱2')     
  @allure.title('用例標(biāo)題2')     
  def test_c101(self):         
    assert 1 == 1 

if __name__ == '__main__':     
  pytest.main([__file__, '-sv','--alluredir','./report/report','--clean-alluredir'])     
  os.system('allure serve ./report/report')
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末益兄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子箭券,更是在濱河造成了極大的恐慌偏塞,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邦鲫,死亡現(xiàn)場離奇詭異,居然都是意外死亡神汹,警方通過查閱死者的電腦和手機(jī)庆捺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屁魏,“玉大人滔以,你說我怎么就攤上這事∶テ矗” “怎么了你画?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵抵碟,是天一觀的道長。 經(jīng)常有香客問我坏匪,道長拟逮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任适滓,我火速辦了婚禮敦迄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凭迹。我一直安慰自己罚屋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布嗅绸。 她就那樣靜靜地躺著脾猛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鱼鸠。 梳的紋絲不亂的頭發(fā)上猛拴,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機(jī)與錄音瞧柔,去河邊找鬼漆弄。 笑死,一個胖子當(dāng)著我的面吹牛造锅,可吹牛的內(nèi)容都是我干的撼唾。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼哥蔚,長吁一口氣:“原來是場噩夢啊……” “哼倒谷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起糙箍,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤渤愁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后深夯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抖格,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年咕晋,在試婚紗的時候發(fā)現(xiàn)自己被綠了雹拄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡掌呜,死狀恐怖滓玖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情质蕉,我是刑警寧澤势篡,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布翩肌,位于F島的核電站,受9級特大地震影響禁悠,放射性物質(zhì)發(fā)生泄漏念祭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一绷蹲、第九天 我趴在偏房一處隱蔽的房頂上張望棒卷。 院中可真熱鬧,春花似錦祝钢、人聲如沸比规。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜒什。三九已至,卻和暖如春疤估,著一層夾襖步出監(jiān)牢的瞬間灾常,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工铃拇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钞瀑,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓慷荔,卻偏偏與公主長得像雕什,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子显晶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

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