python+requests+unittest+HTMLTestRunner构建接口自动化测试框架(二)commonMoudle模板详解

上一篇文件已经讲了怎么设置配置文件和读取配置文件中的内容,这一篇主要针对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
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值