接口測試實戰-excel用例操作、fixtrue初始化操作

2021-03-02 次次的印記

1、編寫EXCEL用例

2、Python操作excel

讀取excel數據

把excel讀取的數據關聯到請求代碼裡

寫入測試結果到表裡

import xlrdfrom xlutils.copy import copyimport jsondef get_excelData(sheetName,startRow,endRow):    resList=[]        excelDir = '../data/接口自動化測試用例模板.xls'        workBook = xlrd.open_workbook(excelDir,formatting_info=True)    workSheetName = workBook.sheet_names()         worksheet= workBook.sheet_by_name(sheetName)        for one in range(startRow-1,endRow):        reqBodyData = worksheet.cell(one,9).value        reqpData = worksheet.cell(one,11).value          resList.append((reqBodyData,reqpData))    return resList
def set_excelData(): excelDir = '../data/接口自動化測試用例模板.xls' workBook = xlrd.open_workbook(excelDir,formatting_info=True) workBookNew = copy(workBook) workSheetNew = workBookNew.get_sheet(0) return workBookNew,workSheetNew
def get_excelData2(sheetName,caseName): ''' :param sheetName: 表名 :param caseName: 某一個接口的用戶名稱 :return: ''' resList=[] excelDir = '../data/接口自動化測試用例模板.xls' workBook = xlrd.open_workbook(excelDir,formatting_info=True) workSheetName = workBook.sheet_names() worksheet= workBook.sheet_by_name(sheetName) idx = 0 for one in worksheet.col_values(0): if caseName in one: reqBodyData = worksheet.cell(idx,9).value reqpData = worksheet.cell(idx,11).value resList.append((json.loads(reqBodyData),json.loads(reqpData))) idx +=1 return resList
if __name__ == '__main__': for one in get_excelData('登錄模塊'): print(one) for one in get_excelData2('登錄模塊','Login'): print(one)

3、Pytest執行測試用例

import requestsfrom config.config import HOSTimport hashlibimport jsondef get_md5(psw):    md5 =hashlib.md5()    md5.update(psw.encode('utf-8'))    return md5.hexdigest()
class Login: def login(self,inData,getToken=True): url = f'{HOST}/account/sLogin' inData = json.loads(inData) inData['password']=get_md5(inData['password']) payload = inData resp = requests.post(url,data=payload) if getToken: return resp.json()['data']['token'] else: return resp.json()
if __name__ == '__main__': print(Login().login({'username':'sq0001','password':'123456'}))

from tools.getExcel import get_excelData2,set_excelDataimport json,pytestfrom lib.login import Loginimport allure,osclass TestLogin:        @pytest.mark.parametrize('inData,respData',get_excelData2('登錄模塊','Login'))  # parametrize('變量',值)    def test_login(self,inData,respData):                res=Login().login(json.dumps(inData),getToken=False)                assert res['msg'] ==respData['msg']
if __name__ == '__main__': pytest.main(['test_func01.py', '-s', '--alluredir', '../report/tmp']) os.system('allure generate ../report/tmp -o ../report/report --clean') os.system('allure server ../report/tmp')

4、環境的初始化和數據清除

需要創建configtest文件 ,

Pytest的fixtrue操作

    初始化文件,自動識別,放在工程裡對整個工程有效,放在包裡對該包有效

import pytestfrom config.config import HOSTfrom lib.login import Loginfrom lib.myShop import MyShop'''scope='session' 整個包執行一次scope='function' 包裡的方法都執行autouse=True   自動執行'''@pytest.fixture(scope='session',autouse=True)def start_demo(requests):    print('--開始執行自動化測試---')
def fin(): print('--自動化測試結束--') requests.addfinalizer(fin)
@pytest.fixture(scope='function')#需要才調,不要加autouse=Truedef update_shop_init(): print('---我的作用是商鋪更新的初始化操作---') token=Login().login({'username': 'sq0001', 'password': '123456'},getToken=True) shopId=MyShop(token).shop_list({'page':1,'limit':20})['data']['records'][0]['id'] imageInfo = MyShop(token).file_upload('123.png','../data/123.png') return shopId,imageInfo

import requestsfrom config.config import HOSTfrom lib.login import Login
class MyShop: def __init__(self,inToken): self.header = {'Authorization':inToken} def shop_list(self,inData): payload = inData url = f'{HOST}/shopping/myShop' resp= requests.get(url,headers = self.header,params=payload) return resp.json()
def file_upload(self,fileName,fileDir): ''' :param fileName:文件名 :param fileDir: 文件路徑 :return: 文件上傳的參數為files ''' user_file = {'file':(fileName,open(fileDir,'rb'),'image/png')} resp = requests.post(f'{HOST}/file',files=user_file,heards=self.header) return resp.json()['data']['realFileName'] def shop_update(self,inData,shopId,imageInfo): ''' :param inData: :param shopId: :param imageInfo: :return: ''' inData['id']= shopId inData['image_path'] = imageInfo inData['image'] = f"{HOST}/file/getImgStream?fileName={imageInfo}" payload = inData url = f'{HOST}/shopping/updatemyshop' resp= requests.post(url,headers = self.header,params=payload) return resp.json()
if __name__ == '__main__': token=Login().login({'username': 'sq0001', 'password': '123456'},getToken=True) res=MyShop(token).shop_list({'page':1,'limit':20}) id=res['data']['records'][0]['id'] res = MyShop(token).file_upload('123.png','../data/123.png')


from lib.myShop import MyShopfrom lib.login import Loginfrom tools.getExcel import get_excelData2import pytest,osclass TestMyShop:     def setup_class(self):         self.token = Login().login({'username':'sq0001','password':'123456'},getToken=True)        @pytest.mark.parametrize('inData,respData',get_excelData2('我的商鋪','listshopping'))    def test_shop_list(self,inData,respData):        res = MyShop(self.token).shop_list(inData)                if res.get('code') !=None:            assert res['code'] ==respData['code']        else:            assert res['error'] == respData['error']
@pytest.mark.parametrize('inData,respData', get_excelData2('我的商鋪', 'updateshopping')) def test_shop_update(self, inData, respData,update_shop_init): res = MyShop(self.token).shop_update(inData,update_shop_init[0],update_shop_init[1]) if res.get('code') != None: assert res['code'] == respData['code'] else: assert res['error'] == respData['error']'''pytest 輸出的信息 . 用例通過 F 用例失敗 --沒有語法報錯 E 語法錯誤 清除接口案例跑完之後的數據: for one in os.listdir('../report/tmp') if 'json' in one: os.remove(f'../report/tmp/{one}') '''if __name__ == '__main__': pytest.main(['test_myShop.py', '-s', '--alluredir', '../report/tmp']) os.system('allure generate ../report/tmp -o ../report/report --clean')


相關焦點

  • 接口測試用例設計
    1、正向用例優先測試,逆向用例次之(通常情況,非絕對);2、是否滿足前提條件 > 是否攜帶默認參值參數 > 參數是否必填 > 參數之間是否存在關聯 > 參數數據類型限制 > 參數數據類型自身的數據範圍值限制  3)   設計分析通常,設計接口測試用例需要考慮以下幾個方面:1
  • 實戰 | 接口自動化測試框架開發(Pytest+Allure+AIOHTTP+用例自動生成)
    ,然而接口的數量一般都很多,而且會越來越多,所以提高執行效率很有必要;接口測試的用例其實也可以用來兼做簡單的壓力測試,而壓力測試需要並發;接口測試的用例有很多重複的東西,測試人員應該只需要關注接口測試的設計,這些重複勞動最好自動化來做;Pytest 和 Allure 太好用了,新框架要集成它們;接口測試的用例應該儘量簡潔,最好用 yaml,這樣數據能直接映射為請求數據
  • 詳解Python操作Excel文件
    讀寫測試測試用例用例1. 讀.xls文件的整個表(表有5個分頁,每個分頁有2000行1200列的整數)。用例2. 讀.xlsx文件的整個表(表有5個分頁,每個分頁有2000行1200列的整數)。用例3. 讀.xls文件的整個表(表有1個分頁,頁有2000行1200列的整數)。用例4.
  • 如何使用Postman編寫Testlink測試用例
    testlink測試用例、測試套件、測試計劃、添加關鍵詞、添加自定義欄位等等。工具地址https://github.com/liyinchigithub/Postman2Testlink一、背景因團隊使用testlink對測試用例管理維護,而大家習慣用Xmind、Excel編寫、維護測試用例,再將將其轉成testlink xml格式,導入testlink中。
  • 技術中臺之DevOps自動化測試實踐
    RF特性:1、rf測試用例支持文本文件保存,使用制表符分隔數據,可方便使用任何文本編輯器,或者excel編輯測試用例,也可使用HTML格式創建用例;2、測試用例支持變量使用,可使用IF、ELSE以及For循環語句;3、支持關鍵字驅動、數據驅動和行為驅動;4、利用已有關鍵字,測試人員可進一步「封裝」,形成更高級別的行為;
  • 乾貨| 接口測試用例和報告模板
    一、接口用例模板提到測試用例,我們知道,其中最重要的兩個要素就是:其實對於接口測試也同樣如此
  • python+xlrd+xlwt操作excel
    500元;所有報名的同學均贈送《小強軟體測試瘋狂講義》書一本。報名微信長按下方二維碼課程介紹長按下方二維碼介紹xlrd(讀操作),xlwt(寫操作)上述軟體下載後,分別解壓,之後在cmd命令下分別進入對應的目錄中運行python setup.py install如果運行過程中提示缺少setuptools,
  • 光榮之路測試開發培訓班 | 半年期
    數據openpyxl模塊寫excel數據excel模塊常用方法封裝pymysql模塊的安裝與引入、連接資料庫pymysql讀資料庫數據pymysql更新寫入據庫數據多進程的概念、定義、使用課程(二)  Web Selenium自動化測試
  • PostMan接口測試(很全面的接口測試教程)
    前言在前後端分離開發時,後端工作人員完成系統接口開發後,需要與前端人員對接,測試調試接口,驗證接口的正確性可用性。而這要求前端開發進度和後端進度保持基本一致,任何一方的進度跟不上,都無法及時完成功能模塊的測試。
  • 自動化:利用excel開源庫自動生成文檔,解決重複性操作
    不管是生活還是工作,我們經常會使用excel文檔,如果仔細觀察,就會發現其中會很多重複性的操作。因此,這就給我們提出這樣的問題,怎樣才能自動生成文檔,解決重複性的操作。 初步的解決方案就是代碼層面上組合讀寫excel接口,從而實現自動生成文檔的功能。
  • 基於自動化用例的精準測試探索
    , 黑盒測試佔據了大部分的測試,即便是接口測試,也是基於場景的用例設計,這種測試方法完全依賴於測試人員的能力,經驗和業務熟悉度,而網際網路行業的一大特點就是人員流動性高,這使得線上質量經常是「靠天吃飯」。
  • 缺陷管理支持對接禪道,MeterSphere開源持續測試平臺v1.5發布
    功能優化■測試跟蹤: 測試用例同級模塊排序;■測試跟蹤: 測試計劃列表增加進度列;■刪除資源池時提示哪些測試正在使用;■接口測試報告頁面在左側請求列表中增加結果狀態顯示;■性能測試: 性能測試生成錯誤之後轉到日誌詳情;■接口測試: sql請求結果格式化;■接口測試: 接口的報告列表增加分頁;■接口測試: 選擇mutipart/from-data後,清除其他content-type;
  • 思路產品新人應如何撰寫測試用例功能性測試
    但如果你恰恰在一個創業公司,那麼你很可能要擔負器撰寫測試用例的重擔。那麼,作為產品新人的你,該如何撰寫測試用例呢?事先聲明,本文是給產品新人的一個指導方向,如果你是測試大牛,那更希望你能弄出一篇完整的教程來。既然你公司沒有測試,那麼作為產品汪,自然就得擔負起產品測試重責。一、產品測試的意義一個完整的開發流程。從提需求、開發、交付。
  • 手把手教你pytest測試框架(7)-fixture裝飾器
    (1)-初識框架手把手教你pytest測試框架(2)-參數講解手把手教你pytest測試框架(3)-用例失敗重跑手把手教你pytest測試框架(4)-前置和後置手把手教你pytest測試框架(5)-mark標記裝飾器概念fixture用來完成那些需要多次重複執行的用例,比如需要先退出
  • Excel文件另類操作,如何用Python中xlrd模塊獲取電子表格的信息
    )# 這裡excelName傳入Excel文件的路徑即可,它比較openpyxl的強大之處在於,它的兼容性比較好,可以讀取*.xls文件,貌似openpyxl只能讀取*.xlsx文件。02還有哪些內容需要掌握我們知道,xlrd為我們提供了一些讀取Excel文件的常用接口,這些接口簡單,容易記憶,唯一不足的地方就是編輯Excel
  • 輔助程序實現黑盒自動化測試的常見問題
    運行輔助程序過程中可以執行Uiautomator1.0或Uiautomator2.0測試用例,執行測試用例過程中輔助程序會被中斷,當測試用例執行結束後輔助程序會恢復運行;2. 大部分機型重啟設備,服務會自動運行,可以測試部分app開機自啟功能等功能;3.
  • 性能測試教程[7] jmeter接口自動化回歸測試
    SongTaste 用音樂傾聽彼此假設有一個登陸接口,要定期回歸測試以下幾個案例:1.正常登陸2.密碼沒填
  • 軟體測試學習教程:單元測試之UnitTest測試框架
    也經常應用到UI自動化測試和接口自動化測試中,用來管理和維護測試用例腳本使用UnitTest框架的好處:1. 能夠組織多個用例去執行(可以把多條測試用例封裝成一個測試套件,實現批量執行測試用例)2.提供了豐富的斷言方法,方便對用例執行的結果進行判斷3. 能夠生成HTML格式的測試報告4.
  • 接口自動化測試與Tesla自動化測試平臺
    那麼我們今天就由接口測試為切入點,講一講接口測試的概念和要點,講一講Tesla平臺,及其兩種測試模式(頁面接口模式與代碼託管模式)。文章嘗試從一些基礎知識開始講述,所以比較適合初學者。同時,從接口進行測試可以快速分辨是左側的問題,或者是右側的問題。「實現後的收益更高」接口的功能一般是較為穩定的,並且也會進行前向兼容。實現後的測試,就具備重複執行的能力,也具備驗證功能回歸的能力。「實現難度較低」相對於接口測試的實現(發送並接收,校驗),UI的操作和校驗會更加難以實現。
  • excel關於函數if與函數or聯合運用的操作技巧
    ,今天就為大家講述excel關於函數if與函數or聯合運用的操作技巧。IF(and(logical_test,logical_test),[value_if_true],[value_if_false]),而今天我們即將介紹的函數if與函數or聯合運用的語法形式是IF(or(logical_test,logical_test),[value_if_true],[value_if_false]),接下來我們還是按照老規矩來辦事,用實例來說話。