- python+requests+unittest+HTMLTestRunner構建接口自動化測試框架(一)瞭解基礎框架,讀取配置文件
- python+requests+unittest+HTMLTestRunner構建接口自動化測試框架(二)commonMoudle模板詳解
- python+requests+unittest+HTMLTestRunner構建接口自動化測試框架(三)數據庫、日誌、http請求、郵件方法封裝
- python+requests+unittest+HTMLTestRunner構建接口自動化測試框架(四)測試用例執行
上一篇文件已經講了怎麼設置配置文件和讀取配置文件中的內容,這一篇主要針對commonMoudle模塊詳細講解。在文章最後會貼出完整代碼,前部分主要講實現思路。
一、讀取Excel文件
1、引入需要用到的模塊
import os
import readConfig
from xlrd import open_workbook
from xml.etree import ElementTree
2、獲取文件路徑,不包括文件名
localReadconfig = readConfig.ReadConfig()
basePath = readConfig.basePath
3、定義方法get_excel獲取Excel內容
def get_excel(self, excel_name, sheet_name):
cls = []
#獲取用例文件路徑
excelPath = os.path.join(basePath, 'testData', 'case', excel_name)
#打開Excel文件讀取數據
file = open_workbook(excelPath)
#通過sheet名稱獲取內容
sheet = file.sheet_by_name(sheet_name)
'''
獲取sheet內容行數
如果這個Excel的這個sheet的第i行的第一列不等於case_name那麼把這行的數據添加到cls[]
'''
nrows = sheet.nrows
for i in range(nrows):
if sheet.row_values(i)[0] != u'caseName':
cls.append(sheet.row_values(i))
return cls
'''
二、分割字符串
1、查看實際請求響應結果
2、通過對比,發現每個接口的響應中都會有statusCode和statusString,所以封裝get_split方法用來獲取響應的statusCode和statusString值,代碼如下:
'''
partition() 方法用來根據指定的分隔符將字符串進行分割。
如果字符串包含指定的分隔符,則返回一個3元的元組,第一個爲分隔符左邊的子串,第二個爲分隔符本身,第三個爲分隔符右邊的子串
'''
def get_split(self, responseTxt, leftData, rightData):
partStr = responseTxt.partition(leftData)
statusCode = partStr[2].partition(rightData)[0][:]
return statusCode
三、從xml中讀取url
1、拼接子標籤成爲http請求的url
def get_url_from_xml(self, name):
#獲取interfaceURL.xml文件路徑
urlPath = os.path.join(basePath, "testData", "interface", "interfaceURL.xml")
urlList = []
tree = ElementTree.parse(urlPath)
#返回所有匹配的子元素列表
for u in tree.findall('url'):
#獲取url標籤的name值
url_name = u.get('name')
#將傳遞的name值與url標籤中的name值匹配
if url_name == name:
#返回url標籤中的name對應的所有子標籤
for c in u.getchildren():
urlList.append(c.text)
#拼接URL
url = '/cloud/common/' + '/'.join(urlList)
return url
四、讀取sql語句
1、讀取SQL.xml中的sql語句
def get_sql(self, database_name, table_name, sql_id):
"""
set sql xml
:return:
"""
database = {}
if len(database) == 0:
sql_path = os.path.join(basePath, "testData", "sql", "SQL.xml")
tree = ElementTree.parse(sql_path)
for db in tree.findall("database"):
db_name = db.get("name")
table = {}
for tb in db.getchildren():
table_name = tb.get("name")
sql = {}
for data in tb.getchildren():
sql_id = data.get("id")
sql[sql_id] = data.text
table[table_name] = sql
database[db_name] = table
database_dict = database.get(database_name).get(table_name)
sql = database_dict.get(sql_id)
return sql
附:完整代碼
# -*- coding:utf-8 -*-
#@Time : 2019/8/13 11:32
#@Author: csu
#@File : commonMoudle.py
import os
import readConfig
from xlrd import open_workbook
from xml.etree import ElementTree
localReadconfig = readConfig.ReadConfig()
basePath = readConfig.basePath
class CommonMoudle:
def __init__(self):
pass
def get_excel(self, excel_name, sheet_name):
cls = []
##獲取用例文件路徑
excelPath = os.path.join(basePath, 'testData', 'case', excel_name)
#打開Excel文件讀取數據
file = open_workbook(excelPath)
#通過sheet名稱獲取內容
sheet = file.sheet_by_name(sheet_name)
'''
獲取sheet內容行數
如果這個Excel的這個sheet的第i行的第一列不等於case_name那麼把這行的數據添加到cls[]
'''
nrows = sheet.nrows
for i in range(nrows):
if sheet.row_values(i)[0] != u'caseName':
cls.append(sheet.row_values(i))
return cls
'''
partition() 方法用來根據指定的分隔符將字符串進行分割。
如果字符串包含指定的分隔符,則返回一個3元的元組,第一個爲分隔符左邊的子串,第二個爲分隔符本身,第三個爲分隔符右邊的子串
'''
def get_split(self, responseTxt, leftData, rightData):
partStr = responseTxt.partition(leftData)
statusCode = partStr[2].partition(rightData)[0][:]
return statusCode
def get_url_from_xml(self, name):
#獲取interfaceURL.xml文件路徑
urlPath = os.path.join(basePath, "testData", "interface", "interfaceURL.xml")
urlList = []
tree = ElementTree.parse(urlPath)
#返回所有匹配的子元素列表
for u in tree.findall('url'):
#獲取url標籤的name值
url_name = u.get('name')
#將傳遞的name值與url標籤中的name值匹配
if url_name == name:
#返回url標籤中的name對應的所有子標籤
for c in u.getchildren():
urlList.append(c.text)
#拼接URL
url = '/cloud/common/' + '/'.join(urlList)
return url
def get_sql(self, database_name, table_name, sql_id):
"""
set sql xml
:return:
"""
database = {}
if len(database) == 0:
sql_path = os.path.join(basePath, "testData", "sql", "SQL.xml")
tree = ElementTree.parse(sql_path)
for db in tree.findall("database"):
db_name = db.get("name")
table = {}
for tb in db.getchildren():
table_name = tb.get("name")
sql = {}
for data in tb.getchildren():
sql_id = data.get("id")
sql[sql_id] = data.text
table[table_name] = sql
database[db_name] = table
database_dict = database.get(database_name).get(table_name)
sql = database_dict.get(sql_id)
return sql