1. 程式人生 > >Python+Requests介面自動化測試框架

Python+Requests介面自動化測試框架

公司內部的一個介面自動化使用框架(之前的基礎上改進)
  • 1.資料準備

    -資料插入(容易實現的測試場景下所需外部資料)
    -準備sql (介面需要重複使用,引數一定得是變數)

  • 2.整合部署(運維相關了解即可)

    -平滑升級驗證指令碼加入自動化

  • 3.自動化框架實現

    -呼叫mysql
    -excel遍歷測試用例
    -requests實現介面呼叫
    -根據介面返回的code值和Excel對比
    -報告反饋
    -暴露服務

寫一個簡單登入的介面自動化測試

程式碼的分層如下圖:

coding.png

一、寫一個封裝的獲取excel表格的模組


excel.png

程式碼實現如下:

#!/usr/bin/python
#-*- coding: UTF-8 -*- # 基礎包:excel的封裝 import xlrd workbook = None def openExcel(path): """開啟excel""" global workbook if (workbook == None): workbook = xlrd.open_workbook(path, on_demand=True) def getSheet(sheetName): """獲取行號""" global
workbook return workbook.sheet_by_name(sheetName) def getRows(sheet): """獲取行號""" return sheet.nrows def getContent(sheet, row, col): """獲取表格中內容""" return sheet.cell(row, col).value def release(path): """釋放excel減少記憶體""" global workbook workbook.release_resources() del
workbook

程式碼封裝後當成模組引用,這還是最開始呢。

二、引用log模組獲取日誌

準備工作:
需要一個日誌的捕獲,包括框架和原始碼丟擲的expection。
程式碼如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 基礎包:日誌服務
import logging
import time

def getLogger():
global tezLogPath
try:
    tezLogPath
except NameError:
    tezLogPath = "/data/log/apiTest/"

FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
# file = tezLogPath + time.strftime("%Y-%m-%d", time.localtime()) + ".log"
# logging.basicConfig(filename=file, level=logging.INFO, format=FORMAT)
# 開發階段為了方便除錯,可不輸出到檔案
logging.basicConfig(level=logging.INFO, format=FORMAT)
return logging

三、引用requests模組介面測試

準備工作:
需要的請求型別和執行測試的方法。
程式碼如下:

#!/usr/bin/python#
#-*- coding: UTF-8 -*-
# 基礎包:介面測試的封裝

import requests
import tezLog as log
logging = log.getLogger()

def apiTest(method, url, data ,headers):    
    """
    定義一個請求介面的方法和需要的引數 
    :Args:
    method  - 企業名稱 str
    url - 使用者暱稱 str
    data - 引數 str
    headers - 請求頭資訊 dict
    """  
      try:
          if method == "post":
             results = requests.post(url, data, headers=headers)
          if method == "get":
            results = requests.get(url, data, headers=headers)
          if method == "put":
            results = requests.put(url, data, headers=headers)
          if method == "delete":
             results = requests.delete(url, headers=headers)
          if method == "patch":
             results == requests.patch(url, data, headers=headers)
          if method == "options":
             results == requests.options(url, headers=headers)
          response = results.json()
          code = response.get("code")
          return code
         except Exception, e:
             logging.error("service is error", e)

def runTest(sheet):
    """
    定義一個執行和斷言的方法 
    :Args:
    sheet  - 服務名稱 str(excel頁尾名稱識別的)
    """  
    rows = excel.getRows(sheet)
    fail = 0
    for i in range(2, rows):
        #這裡為什麼從第二行開始跑,因為會先執行SQL如之前Excel展示的空白位置
        testData = excel.getContent(sheet, i, gl.CASE_DATA)
        testUrl = excel.getContent(sheet, i, gl.CASE_URL)
        testMethod = excel.getContent(sheet, i, gl.CASE_METHOD)
        testHeaders = eval(excel.getContent(sheet, i, gl.CASE_HEADERS))
        testCode = excel.getContent(sheet, i, gl.CASE_CODE)
        actualCode = request.apiTest(testMethod, testUrl, testData, testHeaders)
        expectCode = str(int(testCode))
        failResults = ' url: ' + testUrl + ' params: ' + testData + ' actualCode: ' +     actualCode + ' expectCode: ' + expectCode
        if actualCode == expectCode:
            logging.info("pass")
        elif actualCode != expectCode:
            logging.info("fail %s", failResults)
            fail += 1
    if fail > 0 :
        return False
    return True

四、關於引數中gl

準備工作:
所有的引數和常量我們會整理到這個檔案中,因為設計業務和服務密碼、資料庫密碼這裡展示一部分。
程式碼如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 指令碼功能:全部變數

import time
import uuid

CASE_NUMBER = 0  # 用例編號
CASE_NAME = 1    # 用例名稱
CASE_DATA = 2    # 用例引數
CASE_URL = 3     # 用例介面地址
CASE_METHOD = 4  # 用例請求型別
CASE_CODE = 5    # 用例code
CASE_HEADERS = 6 # 用例headers

SQL_ROW = 0      # 預執行SQL的行號
SQL_COL = 1      # 預執行SQL的列號

五、寫一個run檔案,只是用來執行的

程式碼如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 驗證包:介面測試指令碼

import sys
import core.tezLog as log
import function.common as common

logging = log.getLogger()

"""1.外部輸入引數"""
path = sys.path[0]  # 當前路徑
module = sys.argv[1]  # 服務模組名
url = sys.argv[2]  # 服務地址
host = sys.argv[3]      # 資料庫地址
user = sys.argv[4]      # 資料庫使用者名稱
password = sys.argv[5]  # 資料庫密碼
db = sys.argv[6]        # 資料庫名稱

"""2.根據module獲取Sheet"""
logging.info("-------------- Execute TestCases ---------------")
sheet = common.getExcelSheet(path + "/" + common.filename,     module)

"""3.資料準備"""
logging.info("-------------- Prepare data through MysqlDB --------------")
sql = common.getPrepareSql(sheet)
common.prepareData(host=host, user=user, password=password, db=db, sql=sql)

"""4.執行測試用例"""
res = common.runTest(sheet, url)
logging.info("-------------- Get the result ------------ %s", res)
#這裡的res是我們平滑升級的時候需要返回結果為TRUE才會繼續下面走。

六、檢視測試報告(部署到jenkins會通過控制檯檢視)


報告.png

相關推薦

python+requests介面自動化測試框架例項詳解教程

前段時間由於公司測試方向的轉型,由原來的web頁面功能測試轉變成介面測試,之前大多都是手工進行,利用postman和jmeter進行的介面測試,後來,組內有人講原先web自動化的測試框架移駕成介面的自動化框架,使用的是java語言,但對於一個學java,卻在學python的我來說,覺得python比起jav

python+requests介面自動化測試框架例項詳解教程(米兔888)

前段時間由於公司測試方向的轉型,由原來的web頁面功能測試轉變成介面測試,之前大多都是手工進行,利用postman和jmeter進行的介面測試,後來,組內有人講原先web自動化的測試框架移駕成介面的自動化框架,使用的是java語言,但對於一個學java,卻在學python的我

Python+Requests介面自動化測試框架

公司內部的一個介面自動化使用框架(之前的基礎上改進) 1.資料準備 -資料插入(容易實現的測試場景下所需外部資料) -準備sql (介面需要重複使用,引數一定得是變數) 2.整合部署(運維相關了解即可) -平滑升級驗證指令碼加入自動化 3.自動化框架實現 -呼叫mysql -excel遍

python--utp介面自動化測試框架

測試套件:testsuite  多個用例放在一起 unittest  1、函式名必須是test開頭,unittest才會幫你執行               2、用例執行的順序是按照函式的首字母排序的,a-z te

python+requests介面自動化測試實戰

python+request+unittest+HTMLTestRunner 首先介紹一下python的requests模組: requests的使用介紹:requests快速入門 環境說明: 1.WIN 7, 64位 2.Python3.4.3 (pip-8.1.2)

python+requests介面自動化測試

轉自https://my.oschina.net/u/3041656/blog/820023 原來的web頁面功能測試轉變成介面測試,之前大多都是手工進行,利用postman和jmeter進行的介面測試,後來,組內有人講原先web自動化的測試框架移駕成介面的自動化框架,使用的是java語言,但對於一個學ja

Python+Requests+Unittest+Excel 介面自動化測試框架之Request模組01

1.Requests模組  a.Request模組是Python中可以實現模擬Http協議的模組  b.安裝方式很多,可以用pip install requests 2.舉例 import requests class Http_Request:     #定義一個請求函

【作者: 艾裡艾蘭 】Python+requests+unittest+excel實現介面自動化測試框架

python自動化語言基礎 介面測試知識基礎 一、框架結構:  工程目錄 二、Case檔案設計 三、基礎包 base 3.1 封裝get/post請求(runmethon.py)

Python介面自動化測試框架: pytest+allure+jsonpath+requests+excel實現的介面自動化測試框架(學習成果)

[toc] # 廢話 最近在自己學習介面自動化測試,這裡也算是完成一個小的成果,歡迎大家交流指出不合適的地方,原始碼在文末 # 問題 整體程式碼結構優化未實現,導致最終測試時間變長,其他工具單介面測試只需要39ms,該框架中使用了101ms,考慮和頻繁讀寫用例資料導致 # 環境與依賴 | 名稱

python介面自動化測試框架(post提交新增變數)

1、python介面測試框架包含哪幾部分 資料來源-> GET/POST 傳送請求->接收返回結果->斷言測試結果->生成測試報告(html報告)->網頁報告   2、python介面測試框架 config:存放配置檔案,比如資料庫設定、郵件配置、log配置

Python 基於python+Testlink+Jenkins實現的介面自動化測試框架

目錄 8、 說明 win7 PyCharm 4.0.5 python 3.3.2 testlink-1.9.14 TestLink-API-Python-client-master 1、框架集成了Testlink,可

python + selenium + unittest 自動化測試框架 -- 入門篇

、 預置條件: 1. python已安裝 2. pycharm已安裝 3. selenium已安裝 4. chrome.driver 驅動已下載     二、工程建立 1. New Project:建立自己的工程 2. New Package:建立各個配置包 3. Ne

python+requests介面自動化--請求方法封裝

1 import requests 2 from common.logger import Log 3 from common import cof 4 from common import base 5 6 7 class MyHttpservice(object): 8 9

Python-requests介面自動化小記

       之前用過Jmeter和Postman做http介面請求,因工作需要需用程式碼自動化跑覆蓋,我用的是python語言;經過快2周的實踐,已經基本可以實現介面自動化,現將使用過程中遇到的問題和大家分享下。   1、請求https安全

Jmeter+Ant+Jenkins介面自動化測試框架搭建for Windows

前言 軟體開發的V模型大家都不陌生,其中測試階段分為單元測試→功能測試→系統測試→驗收測試。其中單元測試一般由開發同學們自己完成,大部分測試具體實施(這裡不包括用例設計)是從單體功能測試開始著手的。 如果測試一個功能,發現主流程無法走下去,也就是介面不通,這時再打回去開發手裡繼續改,改

介面自動化測試框架開發 (pytest+allure+aiohttp+ 用例自動生成)

近期準備優先做介面測試的覆蓋,為此需要開發一個測試框架,經過思考,這次依然想做點兒不一樣的東西。 介面測試是比較講究效率的,測試人員會希望很快能得到結果反饋,然而介面的數量一般都很多,而且會越來越多,所以提高執行效率很有必要 介面測試的用例其實也可以用來兼做簡單的壓力測試,而壓力測

HttpRunnerManager介面自動化測試框架在win環境下搭建教程

    近幾日一直在研究如何把介面自動化做的順暢,目前用的是輕量級jmeter+ant+Jenkins自動化測試框架,目前測試界的主流是python語言,所以一直想用搭建一個基於python的HttpRunnerManager。公司專案也比較多,在上班的過程中偶爾研究了一下,於是就利用週末,在家操作

jmeter--輕量級介面自動化測試框架 jmeter--輕量級介面自動化測試框架

jmeter--輕量級介面自動化測試框架 大致思路: jmeter完成介面指令碼,Ant完成指令碼執行並收集結果生成報告,最後利用jenkins完成指令碼的自動整合執行. 環境安裝: 1.jdk1.7 配置環境變數(參考前面的分頁) 2.jmeter解壓到本地,ant解

pytest介面自動化測試框架學習總結

入職已經1個月多了,前段時間一個緊急的專案,用緊急的手段做成介面自動化,框架用的是jmeter+ant+Jenkins,這個框架的優點就是上手快,寫用例快,總之就是越快越好!明天開始新的專案,估計又是996,抽空把今天學習的pytest框架一些知識做下總結: 1,Assert就是斷言,每個測試用

【selenim3+Python介面自動化測試教程

一、開啟瀏覽器 selenium3支援基本上目前市面上最常見的幾種瀏覽器,本文只寫其中的chrome、firefox和ie的相關操作; 1、chrome瀏覽器 (1)、chromeDriver獲取 chromeDriver獲取地址為:http://chromed