Pytest學習(六) – conftest.py結合介面自動化的舉例使用
一、conftest.py作用
可以理解成存放fixture的配置文件
二、conftest.py配置fixture注意事項
- pytest會默認讀取conftest.py裡面的所有fixture
- conftest.py 文件名稱是固定的,不能改動
- conftest.py只對同一個package下的所有測試用例生效
- 不同目錄可以有自己的conftest.py,一個項目中可以有多個conftest.py
- 測試用例文件中不需要手動import conftest.py,pytest會自動查找
三、實例場景應用
多個測試用例腳本都需要先進行登錄,再進行業務操作,按照封裝的特性,肯定需要抽離登錄這部分,那麼我們現在就使用conftest.py來實現。
工程目錄結構如下:
1、最頂層conftest
即項目根目錄下的conftest文件,一般寫全局的fixture,在介面自動化中抽離登錄使用,示例程式碼如下:
# -*- coding: utf-8 -*-
# @Time : 2020/11/11 21:26
# @Author : longrong.lang
# @FileName: conftest.py
# @Software: PyCharm
# @Cnblogs ://www.cnblogs.com/longronglang
import pytest
@pytest.fixture(scope='session')
def login():
print(u'調用登錄介面')
username="zhangsan"
token="ZXF3ZTEyMTIzMTIxYWUxcWUxYGAyYDJgYDIx"
yield username, token
print("====登錄成功,返回用戶名,token!")
@pytest.fixture(autouse=True)
def get_userinfo(login):
username, token = login
print(f"== 每個用例都調用的外層fixture:列印用戶名username:{username} 和token: {token} ==")
說明:此處必須要配合yield使用,也就是teardown(可以理解為afterclass)
2、同級目錄下的第一個用例
示例程式碼如下:
# -*- coding: utf-8 -*-
# @Time : 2020/11/11 21:56
# @Author : longrong.lang
# @FileName: test_getUserInfo.py
# @Software: PyCharm
# @Cnblogs ://www.cnblogs.com/longronglang
def test_getUserInfo(login):
username,token=login
print(f"== 每個用例都調用的外層fixture:列印用戶名\nusername:{username} 和token: {token} ==")
運行結果:
3、test_query目錄
通過conftest.py,配置一些針對query的測試用例獨有的fixture,比如:查詢商品,示例程式碼如下:
# -*- coding: utf-8 -*-
# @Time : 2020/11/11 22:19
# @Author : longrong.lang
# @FileName: conftest.py.py
# @Software: PyCharm
# @Cnblogs ://www.cnblogs.com/longronglang
import pytest
@pytest.fixture(scope='module')
def query(login):
print("====調用查詢介面")
shopName="AJ男鞋"
size=44
colour="紅色"
yield shopName, size,colour
print(f"調用查詢介面成功,返回查詢商品資訊")
對應測試用例,示例程式碼如下:
# -*- coding: utf-8 -*-
# @Time : 2020/11/11 22:27
# @Author : longrong.lang
# @FileName: test_case1.py
# @Software: PyCharm
# @Cnblogs ://www.cnblogs.com/longronglang
def test_query_shop(query):
shopName,size,colour=query
print(f"\n返回查詢商品資訊:商品名稱: {shopName} 顏色:{colour} 鞋號: {size}")
運行結果:
4、test_loginout目錄
沒有__init__.py文件也沒有conftest.py文件,對應測試用例,示例程式碼如下:
# -*- coding: utf-8 -*-
# @Time : 2020/11/11 22:40
# @Author : longrong.lang
# @FileName: test_nofixture.py
# @Software: PyCharm
# @Cnblogs ://www.cnblogs.com/longronglang
def test_no_fixture(login):
print("==\n沒有__init__測試用例,登錄後,我就想退出登錄了==", login)
運行結果:
5、test_addcart目錄
通過conftest.py,配置一些針對addcart的測試用例獨有的fixture,比如:加入購物車,示例程式碼如下:
# -*- coding: utf-8 -*-
# @Time : 2020/11/11 22:50
# @Author : longrong.lang
# @FileName: conftest.py
# @Software: PyCharm
# @Cnblogs ://www.cnblogs.com/longronglang
import pytest
@pytest.fixture(scope='function')
def addcart(login):
print("從詳情頁登錄,將商品加入購物車")
price="2099元"
yield price
print('添加購物車成功,累計計算中')
對應測試用例,示例程式碼如下:
# -*- coding: utf-8 -*-
# @Time : 2020/11/11 22:56
# @Author : longrong.lang
# @FileName: test_case.py
# @Software: PyCharm
# @Cnblogs ://www.cnblogs.com/longronglang
def test_addCart(addcart):
price=addcart
print(f"\n返回商品價格: {price} ")
運行結果:
四、運行目錄下所有用例
示例程式碼如下:
# -*- coding: utf-8 -*-
# @Time : 2020/11/11 23:17
# @Author : longrong.lang
# @FileName: run.py
# @Software: PyCharm
# @Cnblogs ://www.cnblogs.com/longronglang
import pytest
if __name__ == '__main__':
pytest.main(["-q", "../python-practice/"])
運行結果: