Pytest學習(六) - conftest.py結合接口自動化的舉例使用

1、conftest.py做用

能夠理解成存放fixture的配置文件python

2、conftest.py配置fixture注意事項

  • pytest會默認讀取conftest.py裏面的全部fixture
  • conftest.py 文件名稱是固定的,不能改動
  • conftest.py只對同一個package下的全部測試用例生效
  • 不一樣目錄能夠有本身的conftest.py,一個項目中能夠有多個conftest.py
  • 測試用例文件中不須要手動import conftest.py,pytest會自動查找

3、實例場景應用

多個測試用例腳本都須要先進行登陸,再進行業務操做,按照封裝的特性,確定須要抽離登陸這部分,那麼咱們如今就使用conftest.py來實現。session

工程目錄結構以下:
測試

一、最頂層conftest

即項目根目錄下的conftest文件,通常寫全局的fixture,在接口自動化中抽離登陸使用,示例代碼以下:code

# -*- coding: utf-8 -*-
# @Time    : 2020/11/11 21:26
# @Author  : longrong.lang
# @FileName: conftest.py
# @Software: PyCharm
# @Cnblogs :https://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)blog

二、同級目錄下的第一個用例

示例代碼以下:token

# -*- coding: utf-8 -*-
# @Time    : 2020/11/11 21:56
# @Author  : longrong.lang
# @FileName: test_getUserInfo.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
def test_getUserInfo(login):
    username,token=login
    print(f"== 每一個用例都調用的外層fixture:打印用戶名\nusername:{username} 和token: {token} ==")

運行結果:
接口

三、test_query目錄

經過conftest.py,配置一些針對query的測試用例獨有的fixture,好比:查詢商品,示例代碼以下:utf-8

# -*- coding: utf-8 -*-
# @Time    : 2020/11/11 22:19
# @Author  : longrong.lang
# @FileName: conftest.py.py
# @Software: PyCharm
# @Cnblogs :https://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"調用查詢接口成功,返回查詢商品信息")

對應測試用例,示例代碼以下:get

# -*- coding: utf-8 -*-
# @Time    : 2020/11/11 22:27
# @Author  : longrong.lang
# @FileName: test_case1.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
def test_query_shop(query):
    shopName,size,colour=query
    print(f"\n返回查詢商品信息:商品名稱: {shopName} 顏色:{colour} 鞋號: {size}")

運行結果:
it

四、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 :https://www.cnblogs.com/longronglang
def test_no_fixture(login):
    print("==\n沒有__init__測試用例,登陸後,我就想退出登陸了==", login)

運行結果:

五、test_addcart目錄

經過conftest.py,配置一些針對addcart的測試用例獨有的fixture,好比:加入購物車,示例代碼以下:

# -*- coding: utf-8 -*-
# @Time    : 2020/11/11 22:50
# @Author  : longrong.lang
# @FileName: conftest.py
# @Software: PyCharm
# @Cnblogs :https://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 :https://www.cnblogs.com/longronglang
def test_addCart(addcart):
    price=addcart
    print(f"\n返回商品價格: {price} ")

運行結果:

4、運行目錄下全部用例

示例代碼以下:

# -*- coding: utf-8 -*-
# @Time    : 2020/11/11 23:17
# @Author  : longrong.lang
# @FileName: run.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
import pytest

if __name__ == '__main__':
    pytest.main(["-q", "../python-practice/"])

運行結果:

相關文章
相關標籤/搜索