好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁(yè) > 知識(shí)庫(kù) > Pytest接口自動(dòng)化測(cè)試框架搭建模板

Pytest接口自動(dòng)化測(cè)試框架搭建模板

熱門(mén)標(biāo)簽:江蘇客服外呼系統(tǒng)廠(chǎng)家 清遠(yuǎn)360地圖標(biāo)注方法 平頂山外呼系統(tǒng)免費(fèi) 西藏智能外呼系統(tǒng)五星服務(wù) 原裝電話(huà)機(jī)器人 400電話(huà)申請(qǐng)服務(wù)商選什么 工廠(chǎng)智能電話(huà)機(jī)器人 在哪里辦理400電話(huà)號(hào)碼 千陽(yáng)自動(dòng)外呼系統(tǒng)

auto_api_test

開(kāi)發(fā)環(huán)境: Pycharm

開(kāi)發(fā)語(yǔ)言版本: python3.7.8

測(cè)試框架: Pytest、測(cè)試報(bào)告: Allure

項(xiàng)目源碼Git地址

項(xiàng)目目錄結(jié)構(gòu)

  • api – 模仿PO模式, 抽象出頁(yè)面類(lèi), 頁(yè)面類(lèi)內(nèi)包含頁(yè)面所包含所有接口, 并封裝成方法可供其他模塊直接調(diào)用
  • config – 配置文件目錄
  • data – 測(cè)試數(shù)據(jù)目錄
  • doc – 文檔存放目錄
  • log – 日志
  • report – 測(cè)試報(bào)告
  • scripts – 測(cè)試腳本存放目錄
  • tools – 工具類(lèi)目錄
  • .gitignore – git忽略
  • app.py – 命令行啟動(dòng)入口
  • pytest.ini – pytest測(cè)試框架配置文件
  • README.md – 開(kāi)發(fā)說(shuō)明文檔

代碼分析

pytest.ini

pytest框架的配置文件

[pytest]
addopts = --html=../report/report.html  # pytest-html報(bào)告插件配置 
;addopts = -s --alluredir report  # allure-pytest報(bào)告插件配置
testpaths = ./scripts  # 設(shè)置用例目錄識(shí)別名稱(chēng)
python_files = test*_*.py  # 設(shè)置測(cè)試文件識(shí)別名稱(chēng)
python_classes = Test*  # 設(shè)置測(cè)試類(lèi)識(shí)別名稱(chēng)
python_functions = test_*  # 設(shè)置測(cè)試方法識(shí)別名稱(chēng)

app.py

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

# 命令行啟動(dòng)此腳本時(shí)執(zhí)行測(cè)試用例
pytest.main(["scripts/"])

/config/config.json

配置文件, 目前包含全局請(qǐng)求頭配置、類(lèi)似全局變量的設(shè)置, 可通過(guò)tools內(nèi)的工具函數(shù)進(jìn)行讀寫(xiě)
請(qǐng)求頭具體參數(shù)根據(jù)需要自行配置

{
 "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

頁(yè)面類(lèi)模板, 包含頁(yè)面接口的請(qǐng)求方法(增刪改查)封裝, 主要在此定義好接口和請(qǐng)求入?yún)⒌葍?nèi)容

# 導(dǎo)包
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查詢(xún)接口
  api_get_url = app.BASE_URL + "/xxx/xxxx/get"
  # xx刪除接口
  api_del_url = app.BASE_URL + "/xxx/xxxx/del/{id}"

  # xx添加接口函數(shù)實(shí)現(xiàn)
  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修改接口函數(shù)實(shí)現(xiàn)
  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查詢(xún)接口函數(shù)實(shí)現(xiàn)
  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刪除接口函數(shù)實(shí)現(xiàn)
  def api_del(self, session, uid):
    return session.delete(self.api_del_url.format(id=uid), headers=get_header())

/scripts/test_template.py

測(cè)試類(lèi)以Test開(kāi)頭, 測(cè)試類(lèi)和測(cè)試方法添加allure裝飾器

前置測(cè)試類(lèi)方法 - 初始化requests請(qǐng)求庫(kù)的session對(duì)象, 創(chuàng)建對(duì)應(yīng)的頁(yè)面對(duì)象

后置測(cè)試類(lèi)方法 - 關(guān)閉session對(duì)象

前置測(cè)試方法 - 加休眠

測(cè)試方法中添加可選參數(shù)化裝飾器, 測(cè)試方法中通過(guò)頁(yè)面對(duì)象調(diào)用頁(yè)面接口請(qǐng)求方法, 傳入requests的session對(duì)象和方法需要的必要參數(shù), 進(jìn)行響應(yīng)結(jié)果的處理和斷言等操作

日志器可通過(guò)引入工具調(diào)用

# 導(dǎo)包
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('測(cè)試類(lèi)模板')
class TestTemplate:
  session = None

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

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

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

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

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

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

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

/data | /tools

測(cè)試數(shù)據(jù)和具體的操作工具類(lèi)根據(jù)需要自定義

到此這篇關(guān)于Pytest接口自動(dòng)化測(cè)試框架搭建模板的文章就介紹到這了,更多相關(guān)Pytest搭建模板內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python pytest進(jìn)階之fixture詳解
  • 詳解Pytest測(cè)試用例的執(zhí)行方法
  • Python pytest裝飾器總結(jié)(實(shí)例詳解)
  • python pytest進(jìn)階之conftest.py詳解
  • pytest自動(dòng)化測(cè)試fixture的作用域?qū)嵗樞蚣翱捎眯?/li>

標(biāo)簽:西安 安慶 錦州 白城 股票 天水 隨州 日照

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Pytest接口自動(dòng)化測(cè)試框架搭建模板》,本文關(guān)鍵詞  Pytest,接口,自動(dòng)化,測(cè)試,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Pytest接口自動(dòng)化測(cè)試框架搭建模板》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Pytest接口自動(dòng)化測(cè)試框架搭建模板的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 天天躁日日躁白天躁晚上躁| 一级做a爰片久久毛片无码电影| 又大又粗出白浆少妇毛片一| 国产精品亚洲自在线播放页码| 国产高清在线精品一区二区三区| 两个人打扑克牌的软件| 香港a片| 欧美xxxx8888视频| 李毅吧XXOO第169期| 又黄又爽 无遮挡动漫版视频| 一级生性活片免费视频影片| 林心如被躁120分钟视频| 国偷自产第40页| 操美女阴道| 三男一女CP| 免费看隐私美女| 东京精油按摩| 国产欧美日韩在线不卡第一页| 福利网址在线| 国产精品秘?麻豆免费版| 99国产在线拍91揄自揄视| h文进入高辣| 宿迁市| 学校园高肉双腿打开h| xxxx18日本老师护士hd| 男男黄粗暴进入| 精品97国产免费人成视频| 色综合天天射| 老头扒开我粉嫩的小缝| 色噜噜影院| 91嫩草国产露脸精品国产软件优势 | 91精品国产91久久久久久麻豆| 男人透女人全过程免费| 丰满熟女寡妇喷潮| 色哟哟 国产精品| 情欲电车2韩国未删减版| 国产一区二区三区鲁婷婷| 女女女女女女bbbbbb毛片| eeuss影院www电影天堂| 新婚娇妻被粗长征服| 国产CD系列TS紫苑慰菊|