接口测试框架搭建

本文详细介绍了接口测试的重要性和正常流程,涵盖了不同阶段的目标,如进度协调、时间节省、效率提升及系统健壮性增强。文章深入探讨了接口测试框架的搭建过程,包括环境配置、框架结构设计、测试用例管理、测试报告生成及邮件通知机制,为读者提供了全面的实践指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,思考一下为什么要做接口测试?接口测试的正常流程是什么样的?明确了才容易着手搭建接口测试所需的框架。做接口测试的目的主要有以下几点:

(1)不同端(客户端、前端、后端)的工作进度不一样,需要对最开始出来的接口进行接口测试;(2)节约时间,缩短项目时间;(3)提高工作效率;(4)提高系统的健壮性等。而正常的测试流程大致分为:需求评审、场景设计、设计用例、配置需要的接口参数、执行测试、检查测试结果、生成测试报告这几个过程。

其次,还需要了解一下接口测试的种类有哪些?接口的种类主要分为外部接口、内部接口(包括上层服务和下层服务),不了解的可以查找相关资料,这个不作为本次重点讲述范围,所以不再此展开。

好了,下面开始讲述接口测试框架的搭建过程:

一、环境搭建

  • 本套框架是采用python3.6自带的requests库来进行接口测试的,所以需要先安装python3.6以及request库(安装方法比较简单,不再赘述)
  • 安装pycharm
  1. 在Pycharm官网,或者直接输入网址:http://www.https://www.jetbrains.com/pycharm/,下载PyCharm安装包,根据自己电脑的操作系统进行选择安装
  2. 安装后进入激活界面,选择第二个License server,然后输入注册码,这里提供四个(四个选一个即可):

http://idea.uri.ci

http://im.js.cn:8888 

http://idea.java.sx/

http://xidea.online

二、框架搭建

  • 框架主要分为:配置文件、接口相关文件、测试用例、测试用例脚本、生成测试报告以及发送测试报告邮件这几个模块。目的是使业务逻辑和测试脚本分离,便于灵活的使用和管理接口自动化测试框架,我的结构是这样的,可以参考一下。
  • 配置文件:
  1. config.ini配置文件:存放一些固定的数据,如域名、协议、端口、数据库账号密码、邮件发送人、邮件接收人,保存auth等。

   2.readConfig.py:用于读取config配置文件内容,

import os
import codecs
import configparser

proDir = os.path.split(os.path.realpath(__file__))[0]
configPath = os.path.join(proDir, "config.ini")

class ReadConfig:
    def __init__(self):
        fd = open(configPath)
        data = fd.read()

        if data[:3] == codecs.BOM_UTF8:
            data = data[3:]
            file = codecs.open(configPath, "w")
            file.write(data)
            file.close()
        fd.close()

        self.cf = configparser.ConfigParser()
        self.cf.read(configPath)

    def get_email(self, name):
        value = self.cf.get("EMAIL", name)
        return value

    def get_http(self, name):
        value = self.cf.get("HTTP", name)
        return value

    def get_db(self, name):
        value = self.cf.get("DATABASE", name)
        return value
  • 接口相关文件配置:
  1. configHttp.py接口配置脚本:因为python自带的requests库已经封装好了测试接口的方法,用起来也比较方便,所以只需要在configHttp中配置需要的方法就可以了。
  2. interfaceURL.xml接口url文件:因为整个接口的前半部分的域名是固定的,放在了config.ini配置文件中,而接口后半部分因业务功能不一样而有所不同,所以将接口的后半部分放在这个xml文件中,可以根据实际情况获取。
  • 测试用例管理:
  1. 使用excel表格来管理接口测试用例,一行对应一条测试用例,一个sheet表对应一个测试用例脚本
  2. 测试脚本统一放在testCase文件夹中,如图:
  3. caselist.txt文件:该配置文件用于配置每次执行的用例名称,如果不需要执行某一个测试用例,只需要在caselist.txt文件中将这个用例名称使用“#”号注释掉就好了
  4. result测试结果文件夹:该文件夹存放每次生成的测试结果,即测试报告和相关的日志文件,如图:
  • 测试报告
  1. HTMLTestRunner.py是用于生成html格式的测试报告,如图:
  2. HTMLTestRunner.py配置方法:

(1)打开终端,输入which python确认python的安装目录

(2)然后将HTMLTestRunner.py文件拷贝到python目录下,例如:cp HTMLTestRunner.py /Library/Frameworks/Python.framework/Versions/3.6/bin/python3

(3)进入python交互模式,输入import HTMLTestRunner,如果没有报错,则说明添加成功

  1. 如果在pycharm中运行HTMLTestRunner时,报错:PyCharm:ModuleNotFoundError: No module named ‘HTMLTestRunner’提示找不到这个模块,但在python交互模式下,是可以导入HTMLTestRunner的,在pycharm中会报错是因为PyCharm和之前命令行安装使用的不是一套资源,需要在pycharm中重新导入HTMLTestRunner。
  • configEmail.py把测试报告以附件的形式,通过email发邮件
  • runAll.py整个框架运行的入口:首先我们要从caselist.txt文件中读取需要执行的case名称,然后将他们添加到python自带的unittest测试集中,最后执行run()函数,执行测试集
    import unittest
    import HTMLTestRunner
    
        def set_case_list(self):
            fb = open(self.caseListFile)
            for value in fb.readlines():
                data = str(value)
                if data != '' and not data.startswith("#"):
                    self.caseList.append(data.replace("\n", ""))
            fb.close()
    
        def set_case_suite(self):
            self.set_case_list()
            test_suite = unittest.TestSuite()
            suite_model = []
    
            for case in self.caseList:
                case_file = os.path.join(readConfig.proDir, "testCase")
                print(case_file)
                case_name = case.split("/")[-1]
                print(case_name+".py")
                discover = unittest.defaultTestLoader.discover(case_file, pattern=case_name + '.py', top_level_dir=None)
                suite_model.append(discover)
    
            if len(suite_model) > 0:
                for suite in suite_model:
                    for test_name in suite:
                        test_suite.addTest(test_name)
            else:
                return None
            return test_suite
    
        def run(self):
            try:
                suit = self.set_case_suite()
                if suit is not None:
                    logger.info("********TEST START********")
                    fp = open(resultPath, 'wb')
                    runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title='Test Report', description='Test Description')
                    runner.run(suit)
                else:
                    logger.info("Have no case to test.")
            except Exception as ex:
                logger.error(str(ex))
            finally:
                logger.info("*********TEST END*********")
                # 发送邮件
                if int(on_off) == 0:
                    self.email.send_email()
                elif int(on_off) == 1:
                    logger.info("Doesn't send report email to developer.")
                else:
                    logger.info("Unknow state.")

    至此,这套接口测试框架基本搭建完成啦!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值