- 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