Python 之接口自動化測試框架完整搭建


  接口自動化框架

  一、整個框架的目錄結構,本次內容着重講解測試用例類,只要掌握了測試用例類和接口測試用例怎么寫就可以運用此框架。

  common目錄

  1.contants是處理項目路徑模塊,本項目路徑全部采取相對路徑(這樣做的好處是copy到任意地方可以直接運行,不用擔心會路徑報錯)

  2.handle_data處理excel用例中需要替換的參數,用來存儲臨時變量,和需要替換的excel用例中需要替換的字符串(注意存放臨時變量時int類型應轉換成str類型存放)

  3.handle_db是連接數據庫(mysql)處理需要進行數據庫校驗的模塊,封裝了三個方法,分別是:獲取到查詢的第一條數據、獲取到查詢的所有數據、獲取查詢到的數據條數

  4.handle_request是用來發送請求的(支持cookie和token)

  5.handle_webservice是用來發送webservice類型接口的請求(用到的比較少可以忽略此模塊)

  6.myconfig是讀取和寫入配置文件的模塊

  7.mylogger是輸出日志模塊,用來調用代碼運行的時候哪些信息需要寫入日志中,方便自己調試和找出接口錯誤信息,哪里需要就直接調用

  8.readexcel讀取excel用例數據的模塊

  9.send_email是發送測試報告郵件模塊

  comf配置文件

  1.日志等級和測試報告名稱,項目地址,賬號,和數據庫連接信息修改的地方

  data存放excel用例數據

  library存放一些下載的第三方庫

  1.ddt數據驅動的

  2.HTMLTestRunner生成測試報告的模塊

  log存放日志

  查看日志,日志是輪轉的

  reports存放測試報告

  在此文件夾下查看報告

  testcases存放用例類的模塊

  所有的測試用例類必須放在此模塊

  run.py測試運行程序

  整個項目只需要運行此模塊就可以

  二、下面我們來詳細介紹下excel中接口用例該怎么寫

  這里注意下接口傳入參數data里的用例1和用例2中的mobile_phone的傳參為什么是#phone#,為什么不傳入具體手機號,因為傳入具體的手機號,測試用例只能運行一次,需要手動修改這里的測試用例數據在進行運行比較。那我們該采用什么辦法呢,在代碼里面隨機生成手機號進行替換(后面代碼中會指出),怎么替換呢首先判斷每條用例數據中是否有#phone#,如果有就用生成的隨機手機號進行替換,反之,就直接將接口參數傳入接口中進行請求,獲取結果

  還需要注意的是將表單名稱進行修改,如上圖中的下方,名稱隨意取

  講完了excel用例,接口用例類怎么寫(python基礎語法就不多說)我們只講接口的excel用例數據讀取,請求接口,在進行斷言,預期結果和實際結果進行比對

  # -*- coding: utf-8 -*-

  # @Time : 2019/12/5 9:23

  # @File : test_01_login__register.py

  # @Software: PyCharm

  import unittest

  import random

  from library.ddt import ddt,data

  from common.readexcel import read_excel

  from common.contants import URL_DIR

  from common.myconfig import conf

  from common.handle_request import token_http,cookie_http

  from common.mylogger import Log

  from common.handle_db import db

  @ddt

  class Testregister(unittest.TestCase):

  #傳入excel用例所在的路徑和表單名

  excel=read_excel(URL_DIR,"register")

  #讀取用例數據

  cases=excel.read_data()

  @data(*cases)

  def test_register(self,case):

  # ------第一步:准備用例數據------------

  # 獲取請求的參數

  # 增加判斷,這里判斷是否有請求的參數需要替換

  if "#phone#"in case["data"]:

  # 生成手機號

  phone=self.random_phone()

  # 進行替換

  case["data"]=case["data"].replace("#phone#",phone)

  data=eval(case["data"])

  # 獲取請求的方法

  method=case["method"]

  # 獲取請求的地址(配置文件中讀取的路徑+excel中的讀取路徑做拼接)

  url=conf.get("url_project","url")+case["url"]

  # 獲取當前用例所在行

  row=case["case_id"]+1

  # 獲取請求頭(配置文件中讀取請求頭)

  headers=eval(conf.get("url_project","headers"))

  # 獲取預期結果

  expected=eval(case["expected"])

  # ------第二步:發送請求到接口,獲取實際結果--------

  #發送請求(傳入url、請求方法、請求參數,請求頭、)

  res1=token_http.send(url=url,method=method,json=data,headers=headers)

  #獲取實際結果鄭州哪個人流醫院好 http://www.csyhjlyy.com/

  res=res1.json()

  # -------第三步:比對預期結果和實際結果-----

  try:

  #斷言接口返回的code和預期結果中的code是否一致

  self.assertEqual(eval(expected["code"]),res["code"])

  #斷言接口返回的msg和預期結果中的msg是否一致

  self.assertEqual(expected["msg"],res["msg"])

  #判斷如果請求成功就到處數據庫中去查詢是否有該數據

  if res["msg"]=="ok":

  # 去數據庫查詢當前賬號是否存在

  sql = "SELECT * FROM futureloan.member WHERE mobile_phone ={}".format(phone)

  # 獲取數據庫中有沒有該用戶信息,(用handle_db封裝好的方法)

  count=self.db.count(sql)

  # 對數據庫中返回的數據做斷言,判斷數據庫中是否有一條數據

  self.assertEqual(1,count)

  except AssertionError as e :

  #回寫結果到excel中的result列

  self.excel.write_data(row=row,column=8,value="未通過")

  #打印到控制台

  print("預期結果:{}".format(expected))

  print("實際結果;{}".format(res))

  #將錯誤信息打印到日志

  Log.info("用例:{}--------->未通過".format(case["title"]))

  Log.error(e)

  #如果有錯誤信息拋出錯誤信息

  raise e

  else:

  #回寫結果到excel中的result列

  self.excel.write_data(row=row,column=8,value="通過")

  Log.info("用例:{}--------->通過".format(case["title"]))

  #隨機生成手機號方法

  @staticmethod

  def random_phone():

  phone="188"

  for i in range(8):

  phone+=str(random.randint(0,9))

  return phone

  代碼中部分問題

  1.上面的URL_DIR是已經拼接好的路徑導入進來的,在contants下URL_DIR里修改

  2.請求地址前半部分讀取conf.ini文件中的url(建議將接口中相同的請求地址放在此地方,這樣就不用每次在excel中url里寫入完整的接口地址)

  3.請求頭存放在conf.ini文件的headers用字典的方式存放

  4.數據庫校驗部分需要先連接數據庫,在conf.ini配置文件中填寫host主機,user用戶,password密碼,port端口號(注:這里只支持,mysql數據庫)

  請注意:框架中有許多的第三方庫需要自己安裝

  用例類和excel用例寫好后運行run.py文件

  在reports查看測試報告


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM