說明:測試系統(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')