中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Pytest接口自動化測試框架搭建模板的示例分析

發布時間:2021-03-24 13:42:54 來源:億速云 閱讀:809 作者:小新 欄目:開發技術

小編給大家分享一下Pytest接口自動化測試框架搭建模板的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

auto_api_test

開發環境: Pycharm

開發語言&版本: python3.7.8

測試框架: Pytest、測試報告: Allure

項目目錄結構

  • api – 模仿PO模式, 抽象出頁面類, 頁面類內包含頁面所包含所有接口, 并封裝成方法可供其他模塊直接調用

  • config – 配置文件目錄

  • data – 測試數據目錄

  • doc – 文檔存放目錄

  • log – 日志

  • report – 測試報告

  • scripts – 測試腳本存放目錄

  • tools – 工具類目錄

  • .gitignore – git忽略

  • app.py – 命令行啟動入口

  • pytest.ini – pytest測試框架配置文件

  • README.md – 開發說明文檔

代碼分析

pytest.ini

pytest框架的配置文件

[pytest]
addopts = --html=../report/report.html  # pytest-html報告插件配置 
;addopts = -s --alluredir report  # allure-pytest報告插件配置
testpaths = ./scripts  # 設置用例目錄識別名稱
python_files = test*_*.py  # 設置測試文件識別名稱
python_classes = Test*  # 設置測試類識別名稱
python_functions = test_*  # 設置測試方法識別名稱

app.py

# 基礎路由(方便在部署環境發生變化時切換全局基礎路由)
BASE_URL = "http://xxxx.com"
# 獲取腳本的絕對路徑(腳本在項目根目錄就可以理解為項目路徑)
ABS_PATH = os.path.abspath(__file__)
BASE_DIR = os.path.dirname(ABS_PATH)

# 命令行啟動此腳本時執行測試用例
pytest.main(["scripts/"])

/config/config.json

配置文件, 目前包含全局請求頭配置、類似全局變量的設置, 可通過tools內的工具函數進行讀寫
請求頭具體參數根據需要自行配置

{
 "headers": {
  "Host": "xxx.com",
  "Connection": "keep-alive",
  "Accept": "application/json, text/plain, */*",
  "Authorization": "xxxx",
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
  "Content-Type": "application/json;charset=UTF-8",
  "Origin": "http://xxx.com",
  "Referer": "http://xxx.com/",
  "Accept-Encoding": "gzip, deflate",
  "Accept-Language": "zh-CN,zh;q=0.9"
 }
}

/api/template_api.py

頁面類模板, 包含頁面接口的請求方法(增刪改查)封裝, 主要在此定義好接口和請求入參等內容

# 導包
import app
import json
from tools.config_info import get_header


class TemplateAPI:
  # xx添加接口
  api_add_url = app.BASE_URL + "/xxx/xxxx/add"
  # xx修改接口
  api_upd_url = app.BASE_URL + "/xxx/xxxx/upd"
  # xx查詢接口
  api_get_url = app.BASE_URL + "/xxx/xxxx/get"
  # xx刪除接口
  api_del_url = app.BASE_URL + "/xxx/xxxx/del/{id}"

  # xx添加接口函數實現
  def api_add(self, session, attr1, attr2):
    post_data = {
      "attr1": attr1,
      "attr2": attr2
    }
    return session.post(self.api_add_url, headers=get_header(), data=json.dumps(post_data))

  # xx修改接口函數實現
  def api_upd(self, session, attr1, attr2):
    put_data = {
      "attr1": attr1,
      "attr2": attr2
    }
    return session.put(self.api_upd_url, headers=get_header(), data=json.dumps(put_data))

  # xx查詢接口函數實現
  def api_get(self, session, attr1, attr2):
    params = {
      "attr1": attr1,
      "attr2": attr2
    }
    return session.get(self.api_get_url, headers=get_header(), params=params)

  # xx刪除接口函數實現
  def api_del(self, session, uid):
    return session.delete(self.api_del_url.format(id=uid), headers=get_header())

/scripts/test_template.py

測試類以Test開頭, 測試類和測試方法添加allure裝飾器

前置測試類方法 - 初始化requests請求庫的session對象, 創建對應的頁面對象

后置測試類方法 - 關閉session對象

前置測試方法 - 加休眠

測試方法中添加可選參數化裝飾器, 測試方法中通過頁面對象調用頁面接口請求方法, 傳入requests的session對象和方法需要的必要參數, 進行響應結果的處理和斷言等操作

日志器可通過引入工具調用

# 導包
import pytest
import requests
from time import sleep
from api.template_api import TemplateAPI
from tools.get_log import GetLog
from tools.read_file import read_json
import allure

# 獲取日志器
log = GetLog.get_log()


@allure.feature('測試類模板')
class TestTemplate:
  session = None

  # 初始化方法
  @classmethod
  def setup_class(cls):
    cls.session = requests.Session()  # 初始化session對象
    cls.template = TemplateAPI()

  # 結束方法
  @classmethod
  def teardown_class(cls):
    cls.session.close()

  @classmethod
  def setup(cls):
    sleep(1.5)

  # 測試方法
  @allure.story("測試方法模板-add")
  @pytest.mark.parametrize(("attr1", "attr2", "success", "expect"), read_json("test_add"))
  def test_add(self, attr1, attr2, success, expect):
    # 添加功能API調用
    response = self.template.api_add(self.session, attr1, attr2)
    # 打印日志
    log.info("添加功能-狀態碼為: {}".format(response.status_code))
    # 斷言狀態碼
    assert response.status_code == expect, "狀態碼斷言失敗"

  @allure.story("測試方法模板-upd")
  @pytest.mark.parametrize(("attr1", "attr2", "success", "expect"), read_json("test_upd"))
  def test_upd(self, attr1, attr2, success, expect):
    # 添加功能API調用
    response = self.template.api_upd(self.session, attr1, attr2)
    # 打印日志
    log.info("修改功能-狀態碼為: {}".format(response.status_code))
    # 斷言狀態碼
    assert response.status_code == expect, "狀態碼斷言失敗"

  @allure.story("測試方法模板-get")
  @pytest.mark.parametrize(("attr1", "attr2", "success", "expect"), read_json("test_get"))
  def test_get(self, attr1, attr2, success, expect):
    # 添加功能API調用
    response = self.template.api_get(self.session, attr1, attr2)
    # 打印日志
    log.info("查詢功能-狀態碼為: {}".format(response.status_code))
    # 斷言狀態碼
    assert response.status_code == expect, "狀態碼斷言失敗"

  @allure.story("測試方法模板-del")
  @pytest.mark.parametrize(("uid", "success", "expect"), read_json("test_del"))
  def test_del(self, uid, success, expect):
    # 添加功能API調用
    response = self.template.api_del(self.session, uid)
    # 打印日志
    log.info("刪除功能-狀態碼為: {}".format(response.status_code))
    # 斷言狀態碼
    assert response.status_code == expect, "狀態碼斷言失敗"

/data | /tools

測試數據和具體的操作工具類根據需要自定義

以上是“Pytest接口自動化測試框架搭建模板的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

博湖县| 鹤庆县| 克山县| 钟祥市| 昌都县| 绥阳县| 漳浦县| 阜平县| 康定县| 调兵山市| 邵武市| 临汾市| 会理县| 石景山区| 濮阳市| 千阳县| 建湖县| 宜君县| 沙湾县| 怀宁县| 三亚市| 崇礼县| 凤山县| 衡东县| 南澳县| 扶绥县| 平昌县| 建水县| 泸溪县| 射洪县| 竹溪县| 新绛县| 保德县| 普陀区| 大厂| 蓝山县| 肇州县| 福州市| 大埔县| 赣榆县| 读书|