1. 程式人生 > >Pytest學習(六) - conftest.py結合介面自動化的舉例使用

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來實現。 工程目錄結構如下: ![](https://img2020.cnblogs.com/blog/718867/202011/718867-20201111232811194-143179322.png) ### 1、最頂層conftest 即專案根目錄下的conftest檔案,一般寫全域性的fixture,在介面自動化中抽離登入使用,示例程式碼如下: ```python # -*- 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) ### 2、同級目錄下的第一個用例 示例程式碼如下: ```python # -*- 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} ==") ``` 執行結果: ![](https://img2020.cnblogs.com/blog/718867/202011/718867-20201111221340982-957445731.png) ### 3、test_query目錄 通過conftest.py,配置一些針對query的測試用例獨有的fixture,比如:查詢商品,示例程式碼如下: ```python # -*- 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"呼叫查詢介面成功,返回查詢商品資訊") ``` 對應測試用例,示例程式碼如下: ```python # -*- 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}") ``` 執行結果: ![](https://img2020.cnblogs.com/blog/718867/202011/718867-20201111223544140-1685937849.png) ### 4、test_loginout目錄 沒有__init__.py檔案也沒有conftest.py檔案,對應測試用例,示例程式碼如下: ```python # -*- 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) ``` 執行結果: ![](https://img2020.cnblogs.com/blog/718867/202011/718867-20201111224501595-1896583989.png) ### 5、test_addcart目錄 通過conftest.py,配置一些針對addcart的測試用例獨有的fixture,比如:加入購物車,示例程式碼如下: ```python # -*- 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('新增購物車成功,累計計算中') ``` 對應測試用例,示例程式碼如下: ```python # -*- 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} ") ``` 執行結果: ![](https://img2020.cnblogs.com/blog/718867/202011/718867-20201111230509761-15350122.png) ## 四、執行目錄下所有用例 示例程式碼如下: ```python # -*- 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/"]) ``` 執行結果: ![](https://img2020.cnblogs.com/blog/718867/202011/718867-20201111232312085-11638436