偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

用Python實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)的接口自動(dòng)化測(cè)試

開(kāi)發(fā) 開(kāi)發(fā)工具 后端 自動(dòng)化
在接口測(cè)試的過(guò)程中,很多時(shí)候會(huì)用到對(duì)CSV的讀取操作,本文主要說(shuō)明Python3對(duì)CSV的寫(xiě)入和讀取。

在接口測(cè)試的過(guò)程中,很多時(shí)候會(huì)用到對(duì)CSV的讀取操作,本文主要說(shuō)明Python3對(duì)CSV的寫(xiě)入和讀取。

1. 需求

某API,GET方法,token,mobile,email三個(gè)參數(shù)

  • token為必填項(xiàng)
  • mobile,email 必填其中1項(xiàng)
  • mobile為手機(jī)號(hào),email為email格式

2. 方案

針對(duì)上面的API,在做接口測(cè)試時(shí),需要的測(cè)試用例動(dòng)輒會(huì)多達(dá)10+, 這個(gè)時(shí)候采用數(shù)據(jù)驅(qū)動(dòng)的方式將共性的內(nèi)容寫(xiě)入配置文件或許會(huì)更合適。

這里考慮把API、參數(shù)、以及預(yù)期結(jié)果預(yù)行在格式化的CSV里保存,利用csv組件從CSV里讀取URL、參數(shù)以及預(yù)期結(jié)果,Requests組件發(fā)起請(qǐng)求,將響應(yīng)結(jié)果與預(yù)期結(jié)果進(jìn)行比對(duì),***把比對(duì)結(jié)果寫(xiě)到結(jié)果CSV。

流程如下圖

3. 實(shí)現(xiàn)

(1) 在上代碼之前,先安裝好如下幾個(gè)組件:

  • csv 讀寫(xiě)CSV文件
  • json
  • requests 發(fā)起請(qǐng)求,獲取響應(yīng)結(jié)果
  • unittest 測(cè)試用例調(diào)度

(2) data.csv(本示例選取部分用例)

(3) reader_CSV函數(shù)代碼示例

  1. import csv 
  2. import json 
  3. import requests 
  4. import time 
  5. import unittest 
  6. def readCSV(self,filename): 
  7.  ''' 
  8.  :param filename: 需要讀取的數(shù)據(jù)文件 
  9.  :return: [{data1},{data2}...] 
  10.  ''' 
  11.  datas = [] 
  12.  try: 
  13.  #以DictReader的方式讀取數(shù)據(jù)文件,方便與json互做轉(zhuǎn)換 
  14.  with open(filename,'r') as csvfile : 
  15.  #從文件里讀取到的數(shù)據(jù)轉(zhuǎn)換成字典列表的格式 
  16.  reader = csv.DictReader(csvfile) 
  17.  for row in reader: 
  18.  data = {} 
  19.  data['id'] = row['id'] 
  20.  data['url'] = row['url'] 
  21.  data['token'] = str(row['token']) 
  22.  data['mobile'] = row['mobile'] 
  23.  data['email'] = row['email'] 
  24.  data['expect'] = json.dumps(row['expect']) \ 
  25.  if isinstance(row['expect'],dict) \ 
  26.  else row['expect'] #如果expect讀取出來(lái)的不是json則取其原值,否則轉(zhuǎn)為json格式保存到result里 
  27.  datas.append(data) 
  28.  return datas 
  29.  #如果文件找不到,返回空的datas 
  30.  except FileNotFoundError: 
  31.  print("文件不存在",filename) 
  32.  return datas 

(4) request_URL函數(shù)示例(包含GET請(qǐng)求和POST請(qǐng)求2個(gè)方法)

  1. def get_request(self,url,params): 
  2.  ''' 
  3.  通用的調(diào)用GET接口方法 
  4.  :param url:string 接口路徑 
  5.  :param params:{"":"","":""} 需要傳入的參數(shù) 
  6.  :return: response響應(yīng)體 
  7.  ''' 
  8.  print("調(diào)用API...") 
  9.  r = requests.get(url,paramsparams=params) 
  10.  print(r.text) 
  11.  return r 
  12. def post_request(self,url,params): 
  13.  ''' 
  14.  通用的調(diào)用POST接口方法 
  15.  :param url: string 接口路徑 
  16.  :param params: {"":"","":""} 需要傳入的參數(shù) 
  17.  :return:response響應(yīng)體 
  18.  ''' 
  19.  print("調(diào)用API...") 
  20.  r = requests.post(url,params=json.dumps(params)) #post的方法必須用json.dumps()轉(zhuǎn)化成json格式 
  21.  print(r.text) 
  22.  return r 

(5) assert_Result函數(shù)示例

  1. def assertResult(self,except_value,real_value): 
  2.  ''' 
  3.  校驗(yàn)樣本字符串中是否包含指定字符串 
  4.  :param except_value: string 指定字符串 
  5.  :param real_value: string 樣本字符串 
  6.  :return: Boolean 樣本中包含指定字符串返回True,否則返回False 
  7.  ''' 
  8.  ifsuccess = except_value in str(real_value) 
  9.  return ifsuccess 

(6) write_CSV函數(shù)示例

  1. def writeCSV(self,filename,results): 
  2.  ''' 
  3.  寫(xiě)入csv文件指定內(nèi)容 
  4.  :param filename: string 需要寫(xiě)入的文件名稱 
  5.  :param results: [{data1},{data2},...] 寫(xiě)入的內(nèi)容 
  6.  :return: 無(wú) 
  7.  ''' 
  8.  print("寫(xiě)文件:",filename) 
  9.  #以DictWriter的方式寫(xiě)文件 
  10.  with open(filename,'w+') as csvfile: 
  11.  headers="id,url,token,mobile,email,expect,real_value,assert_value".split(",") 
  12.  writer = csv.DictWriter(csvfile,fieldnames=headers
  13.  #寫(xiě)表頭 
  14.  writer.writeheader() 
  15.  #寫(xiě)數(shù)據(jù) 
  16.  if results.__len__() > 0 : 
  17.  for result in results: 
  18.  writer.writerow(result) 
  19.  csvfile.close() 

(7) test_interface1函數(shù)示例

  1. def test_interface1(self): 
  2.  
  3.  #指定讀取的數(shù)據(jù)文件名稱 
  4.  data_file = "../data/data.csv" 
  5.  
  6.  #指定最終結(jié)果生成的數(shù)據(jù)文件名稱 
  7.  result_file = "../data/result_{}.csv".format(str(time.time()).split(".")[0]) 
  8.  
  9.  #讀取指定文件的數(shù)據(jù) 
  10.  datas = self.readCSV(data_file) 
  11.  
  12.  #數(shù)據(jù)文件有內(nèi)容則調(diào)用接口,否則直接測(cè)試結(jié)束 
  13.  if datas.__len__() > 0: 
  14.  results =[] 
  15.  
  16.  #獲取數(shù)據(jù)文件里的每一行 
  17.  for testcase in datas : 
  18.  result = {} 
  19.  result["id"] = testcase["id"] 
  20.  result["url"] = testcase["url"] 
  21.  result["token"] = testcase["token"] 
  22.  result["mobile"] = testcase["mobile"] 
  23.  result["email"] = testcase["email"] 
  24.  result["expect"] = testcase["expect"] 
  25.  
  26.  #組裝參數(shù) 
  27.  params = { 
  28.  "token":result["token"], 
  29.  "mobile":result["mobile"], 
  30.  "email":result["email"] 
  31.  } 
  32.  
  33.  #調(diào)用API接口,獲取響應(yīng)結(jié)果 
  34.  real_value = self.get_request(result["url"],params) 
  35.  
  36.  #調(diào)用assert方法,檢查預(yù)期結(jié)果是否在響應(yīng)結(jié)果中存在 
  37.  assert_value = self.assertResult(result["expect"],real_value.text) 
  38.  result["real_value"] = real_value.text 
  39.  result["assert_value"] = assert_value 
  40.  #獲取每一行里的所有字段以及實(shí)際結(jié)果和驗(yàn)證結(jié)果 
  41.  results.append(result) 
  42.  #執(zhí)行完所有記錄后,將所有結(jié)果寫(xiě)入result.csv 
  43.  self.writeCSV(result_file,results) #寫(xiě)入csv文件 
  44.  print("測(cè)試結(jié)束") 

8result_1523956055.csv(本示例中的測(cè)試結(jié)果請(qǐng)忽略)

4. 總結(jié)

python封裝了很多方法,對(duì)于測(cè)試來(lái)說(shuō)開(kāi)發(fā)速度相對(duì)較快,接口自動(dòng)化測(cè)試如果采用CSV管理的數(shù)據(jù)驅(qū)動(dòng)方式,使用csv+requests是測(cè)試開(kāi)發(fā)不容錯(cuò)過(guò)的利器之一。

【本文是51CTO專欄機(jī)構(gòu)“豈安科技”的原創(chuàng)文章,轉(zhuǎn)載請(qǐng)通過(guò)微信公眾號(hào)(bigsec)聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專欄
相關(guān)推薦

2018-05-11 13:39:05

PythonCSV接口測(cè)試

2023-12-25 09:52:32

2019-02-19 15:37:18

自動(dòng)化測(cè)試數(shù)據(jù)

2024-02-26 09:00:00

生成式AI主機(jī)自動(dòng)化

2021-12-30 07:33:03

數(shù)據(jù)庫(kù)

2022-12-26 12:30:28

接口測(cè)試

2023-09-13 11:40:12

2024-03-20 13:19:53

2010-08-12 18:08:03

ibmdwRational

2012-02-27 17:34:12

Facebook自動(dòng)化

2022-08-05 22:15:26

Python自動(dòng)化測(cè)試

2023-02-15 08:21:22

2010-09-27 09:13:36

Visual Stud

2021-08-17 09:00:00

架構(gòu)PythonWeb

2022-02-17 10:37:16

自動(dòng)化開(kāi)發(fā)團(tuán)隊(duì)預(yù)測(cè)

2022-08-14 16:11:23

Python自動(dòng)化測(cè)試數(shù)據(jù)

2023-09-01 09:21:03

Python自動(dòng)化測(cè)試

2024-06-11 10:41:14

2024-08-19 10:21:37

接口Python魔法方法

2023-03-27 15:37:43

自動(dòng)化測(cè)試開(kāi)發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)