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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章