Python+Requests接口自动化测试框架

Python+Requests接口自动化测试框架

公司内部的一个接口自动化使用框架(之前的基础上改进)
  • 1.数据准备

    -数据插入(容易实现的测试场景下所需外部数据)
    -准备sql (接口需要重复使用,参数一定得是变量)

  • 2.集成部署(运维相关了解即可)

    -平滑升级验证脚本加入自动化

  • 3.自动化框架实现

    -调用mysql
    -excel遍历测试用例
    -requests实现接口调用
    -根据接口返回的code值和Excel对比
    -报告反馈
    -暴露服务

写一个简单登录的接口自动化测试

代码的分层如下图:

coding.png
一、写一个封装的获取excel表格的模块

excel.png

代码实现如下:

#!/usr/bin/python
#-*- coding: UTF-8 -*-
# 基础包:excel的封装
import xlrd
workbook = None
def openExcel(path):    
     """打开excel"""    
      global workbook    
      if (workbook == None):        
          workbook = xlrd.open_workbook(path, on_demand=True)

def getSheet(sheetName):    
     """获取行号"""    
      global workbook    
      return workbook.sheet_by_name(sheetName)

def getRows(sheet):    
    """获取行号"""    
      return sheet.nrows

def getContent(sheet, row, col):    
    """获取表格中内容"""    
       return sheet.cell(row, col).value

def release(path):    
    """释放excel减少内存"""    
      global workbook    
      workbook.release_resources()    
      del workbook

代码封装后当成模块引用,这还是最开始呢。

二、引用log模块获取日志

准备工作:
需要一个日志的捕获,包括框架和源码抛出的expection。
代码如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 基础包:日志服务
import logging
import time

def getLogger():
global tezLogPath
try:
    tezLogPath
except NameError:
    tezLogPath = "/data/log/apiTest/"

FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
# file = tezLogPath + time.strftime("%Y-%m-%d", time.localtime()) + ".log"
# logging.basicConfig(filename=file, level=logging.INFO, format=FORMAT)
# 开发阶段为了方便调试,可不输出到文件
logging.basicConfig(level=logging.INFO, format=FORMAT)
return logging
三、引用requests模块接口测试

准备工作:
需要的请求类型和执行测试的方法。
代码如下:

#!/usr/bin/python#
#-*- coding: UTF-8 -*-
# 基础包:接口测试的封装

import requests
import tezLog as log
logging = log.getLogger()

def apiTest(method, url, data ,headers):    
    """
    定义一个请求接口的方法和需要的参数 
    :Args:
    method  - 企业名称 str
    url - 用户昵称 str
    data - 参数 str
    headers - 请求头信息 dict
    """  
      try:
          if method == "post":
             results = requests.post(url, data, headers=headers)
          if method == "get":
            results = requests.get(url, data, headers=headers)
          if method == "put":
            results = requests.put(url, data, headers=headers)
          if method == "delete":
             results = requests.delete(url, headers=headers)
          if method == "patch":
             results == requests.patch(url, data, headers=headers)
          if method == "options":
             results == requests.options(url, headers=headers)
          response = results.json()
          code = response.get("code")
          return code
         except Exception, e:
             logging.error("service is error", e)

def runTest(sheet):
    """
    定义一个执行和断言的方法 
    :Args:
    sheet  - 服务名称 str(excel页脚名称识别的)
    """  
    rows = excel.getRows(sheet)
    fail = 0
    for i in range(2, rows):
        #这里为什么从第二行开始跑,因为会先执行SQL如之前Excel展示的空白位置
        testData = excel.getContent(sheet, i, gl.CASE_DATA)
        testUrl = excel.getContent(sheet, i, gl.CASE_URL)
        testMethod = excel.getContent(sheet, i, gl.CASE_METHOD)
        testHeaders = eval(excel.getContent(sheet, i, gl.CASE_HEADERS))
        testCode = excel.getContent(sheet, i, gl.CASE_CODE)
        actualCode = request.apiTest(testMethod, testUrl, testData, testHeaders)
        expectCode = str(int(testCode))
        failResults = ' url: ' + testUrl + ' params: ' + testData + ' actualCode: ' +     actualCode + ' expectCode: ' + expectCode
        if actualCode == expectCode:
            logging.info("pass")
        elif actualCode != expectCode:
            logging.info("fail %s", failResults)
            fail += 1
    if fail > 0 :
        return False
    return True
四、关于参数中gl

准备工作:
所有的参数和常量我们会整理到这个文件中,因为设计业务和服务密码、数据库密码这里展示一部分。
代码如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 脚本功能:全部变量

import time
import uuid

CASE_NUMBER = 0  # 用例编号
CASE_NAME = 1    # 用例名称
CASE_DATA = 2    # 用例参数
CASE_URL = 3     # 用例接口地址
CASE_METHOD = 4  # 用例请求类型
CASE_CODE = 5    # 用例code
CASE_HEADERS = 6 # 用例headers

SQL_ROW = 0      # 预执行SQL的行号
SQL_COL = 1      # 预执行SQL的列号
五、写一个run文件,只是用来执行的

代码如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 验证包:接口测试脚本

import sys
import core.tezLog as log
import function.common as common

logging = log.getLogger()

"""1.外部输入参数"""
path = sys.path[0]  # 当前路径
module = sys.argv[1]  # 服务模块名
url = sys.argv[2]  # 服务地址
host = sys.argv[3]      # 数据库地址
user = sys.argv[4]      # 数据库用户名
password = sys.argv[5]  # 数据库密码
db = sys.argv[6]        # 数据库名称

"""2.根据module获取Sheet"""
logging.info("-------------- Execute TestCases ---------------")
sheet = common.getExcelSheet(path + "/" + common.filename,     module)

"""3.数据准备"""
logging.info("-------------- Prepare data through MysqlDB --------------")
sql = common.getPrepareSql(sheet)
common.prepareData(host=host, user=user, password=password, db=db, sql=sql)

"""4.执行测试用例"""
res = common.runTest(sheet, url)
logging.info("-------------- Get the result ------------ %s", res)
#这里的res是我们平滑升级的时候需要返回结果为TRUE才会继续下面走。
六、查看测试报告(部署到jenkins会通过控制台查看)

报告.png
  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Python的unittest库提供了一种基于单元测试的测试框架,是一个方便易用的Python测试框架。使用unittest库进行接口自动化测试可以提高测试效率和质量,本文将分享如何使用Python unittest库搭建接口自动化测试框架。 第一步:安装Python unittest库 首先需要安装Python unittest库,Python unittest库是默认安装在Python中的,无需单独安装。 第二步:安装requests模块 接口自动化测试需要使用requests模块来发送HTTP请求、获取响应等操作,因此需要安装requests模块。使用pip安装requests命令如下: pip install requests 第三步:编写测试用例 使用unittest框架编写测试用例,首先需要导入unittest库并创建测试类,编写测试方法,方法名必须以test开头,并使用assert断言方法进行验证。例如: import unittest import requests class TestApi(unittest.TestCase): def test_get_users(self): url = 'http://localhost:8080/api/users' res = requests.get(url) self.assertEqual(res.status_code, 200) self.assertIsNotNone(res.json()) 第四步:执行测试用例 使用unittest框架执行测试用例,使用unittest.main()方法运行所有测试用例。例如: if __name__ == '__main__': unittest.main() 执行测试用例后,将输出测试结果,包括测试用例总数、成功数、失败数等。 第五步:持续集成 持续集成可以帮助实现自动化测试,可以将上述步骤集成到自动化测试框架中,提高测试效率和质量。使用持续集成工具,例如Jenkins,可以实现自动化测试的调度和执行,定期输出测试报告,是测试自动化化的不二选择。 在以上步骤中,请求地址和验证方法需要根据具体需求进行更改,但是编写测试用例的方法是类似的,熟练掌握unittest库可以快速搭建接口自动化测试框架,提高测试效率和质量。 ### 回答2: Python unittest requests 接口自动化测试框架搭建教程博客是指一篇博客文章,介绍如何使用Python unittest与requests库搭建接口自动化测试框架。该教程博客有如下几个方面: 1. 简单介绍Python unittest与requests库,以及它们在接口自动化测试中的使用; 2. 详细讲解如何安装Python unittest和requests库,并编写测试用例; 3. 讲解如何通过使用Python unittest的setUp()和tearDown()方法,在测试用例执行前后进行一些操作,以便更好地进行测试; 4. 介绍如何运行测试用例,并查看测试结果,以及如何进行测试报告生成; 5. 提供一些实例,展示如何使用Python unittest与requests库搭建接口自动化测试框架。 通过这篇教程博客,读者可以学习如何使用Python unittest与requests库搭建接口自动化测试框架,并且能够快速了解并掌握这种接口自动化测试方法的流程和基本方法。此外,该教程博客也提供一些实例,帮助读者更好地理解和应用这种方法。因此,这篇教程博客对于想要学习接口自动化测试以及深入了解Python unittest和requests库的读者来说,是一篇非常有价值的文章。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值