1. 程式人生 > 其它 >一、pytest基礎

一、pytest基礎

一、 setup 和 teardown 操作

setup: 在測試函式或類之前執行, 完成準備工作,例如資料庫連線、數 據測試、開啟檔案等。

teardown: 在測試函式或類之後執行,完成收尾工作, 例如斷開資料庫 連線、回收記憶體資源。

二、編寫規則

1. 測試檔案以 test_ 開頭或以 _test結尾
2. 測試類以Test開頭, 並且不能帶有 init 方法
3. 測試函式以test_開頭
4. 斷言assert即可
5. 設定執行順序, @pytest.mark.run(order=1)
6. 全域性變數 @pytest.fixture() 
	引數scope
		session: 只執行一次
		module: 在模組級別中只執行一次
		class: 在類級別中只執行一次
		function: 在函式界別中執行一次		

三、 pytest.ini

​ pytest 配置檔案

1. 可以修改命名規範

示例:

[pytest]
python_files = test_*.py *_test.py
python_classes = Test* zz
python_functions = test_*

四、conftest.py:

  1. 名稱固定,不可修改
  2. conftest.py檔案和用例在同一目錄下,那麼conftest.py作用於整個目錄
  3. conftest.py 檔案所在目錄必須存在__init__.py 檔案
  4. 不能被其他目錄匯入
  5. 所有同目錄測試檔案執行前都會執行conftest.py 檔案

示例:

test_001.py

import pytest
import requests


# 示例
![](https://img2020.cnblogs.com/blog/1440097/202108/1440097-20210802174906042-1650894010.png)


#函式
def test_001():
    print("執行測試用例001")
    
 
# 測試類
def setup_module():
        print("模組執行前****")
    
def teardown_module():
    print("模組執行後****")


class Test002():
    def setup_class(self):
        print("測試類執行前執行一次")
    
    def teardown_class(self):
        print("測試類執行後執行一次")
    
    def setup(self):
        print("用例執行前執行一次")
    
    def teardown(self):
        print("用例執行後執行一次")
        
    def test_003(self, gettoken):
        print("執行003--------%s" % gettoken)

    # 資料驅動, indata 還可以來自,excel 等資料容器,通過函式讀出來
    indata = [['6', '1'], ['9', '0'], ['', '1'], ['zzz', '0']]
    @pytest.mark.parametrize("weaid, status", indata) # 將有返回值的漢
    def test_004(self, weaid, status):
        data = {
                    'app' : 'weather.realtime',
                    'weaid' : weaid,
                    'ag' : 'today,futureDay,lifeIndex,futureHour',
                    'appkey' : '59762',
                    'sign' : '9e3a8cd9e31faaabcdb592085ab3dc57',
                    'format' : 'json',
                }
        response = requests.get("https://sapi.k780.com", data)
        res_json = response.json()
        print(weaid)
        assert res_json["success"] == status
        
if __name__ == "__main__":
    # -s 返回列印資訊, --html 報告 需要安裝 pytest-html
    pytest.main(["-s", "--html=./reports/result.html"]) 

configtest.py

import pytest


# 全域性變數
@pytest.fixture()
def gettoken():
    token = "xxx001"
    return token

五、main引數

在pytest 中新增:

​ addopts = -s --html=./reports/result.html