【Python自动化测试20】接口自动化测试框架模型搭建

文章目录

  • 一、前言
  • 二、框架搭建流程
  • 2.1 项目创建
  • 2.2 README文件
  • 2.3 .gitignore文件
  • 2.4 什么是测试框架?
  • 2.5 分层设计
  • 2.6 框架搭建
  • 2.6.1 公用目录(common)
  • 2.6.2 测试用例目录(testcase)
  • 2.6.3 测试数据目录(data)
  • 2.6.4 测试报告目录(reports)
  • 2.6.5 配置文件目录(config)
  • 2.6.6 日志存放目录(logs)
  • 2.6.7 被测函数目录(funcs)
  • 2.6.8 运行文件(run.py)
  • 2.7 测试函数
  • 2.8 执行文件
  • 2.9 测试报告
  • 2.10 路径处理
  • 2.11 知识小结
  • 一、前言

      本文章主要讲解Python接口自动化测试框架模型的搭建,主要介绍如何设计框架,以及基础的框架运行等,除此之外下方有系列文章的传送门,还在持续更新中,感兴趣的小伙伴也可以前往查看,话不多说,让我们一起看看吧~

    系列文章:
      系列文章1:【Python自动化测试1】遇见Python之美
      系列文章2:【Python自动化测试2】Python安装配置及PyCharm基本使用
      系列文章3:【Python自动化测试3】初识数据类型与基础语法
      系列文章4:【Python自动化测试4】字符串知识总结
      系列文章5:【Python自动化测试5】列表与元组知识总结
      系列文章6:【Python自动化测试6】字典与集合知识总结
      系列文章7:【Python自动化测试7】数据运算符知识合集
      系列文章8:【Python自动化测试8】流程控制语句讲解
      系列文章9:【Python自动化测试9】函数知识合集
      系列文章10:【Python自动化测试10】文件基础操作
      系列文章11:【Python自动化测试11】模块、包与路径知识合集
      系列文章12:【Python自动化测试12】异常处理机制知识合集
      系列文章13:【Python自动化测试13】类、对象、属性与方法知识合集
      系列文章14:【Python自动化测试14】Python自动化测试基础与进阶练习题
      系列文章15:【Python自动化测试15】unittest测试框架的核心概念与作用
      系列文章16:【Python自动化测试16】测试用例数据分离
      系列文章17:【Python自动化测试17】openpyxl二次封装与数据驱动
      系列文章18:【Python自动化测试18】配置文件解析与实际应用
      系列文章19:【Python自动化测试19】日志系统logging讲解

      

    二、框架搭建流程

    2.1 项目创建

      框架搭建前必定是以一个项目的形式存在的,故此我们需要新建一个项目,你可以通过Open打开原有项目的一个包,以此来独立成一个项目,也可以直接使用New Project来创建一个新项目。

    2.2 README文件

      在任何一个项目中,我们都可以看到README这个文件,README文件是一个项目的说明文档,其中会包括基础的文件说明、框架搭建及维护的作者,框架认知、框架体系、框架结构、框架作用、项目说明、代码使用规范和注意事项等内容,具体内容通常依据个人或项目需要进行文件说明,文件可以采用md形式,也可以采用txt形式,可以附上一些说明,例如:

    2.3 .gitignore文件

      通常而言,我们项目中的代码需要进行版本控制,行业中常见的是svn与git,.gitignore文件用于git版本控制,而.gitignore文件的作用是:将特定的文件移除,不会进入至版本控制系统当中,不会进行上传。

      比如代码运行所产生的缓存文件,这些缓存文件大多数会放入至__pycache__文件夹中,故此我们可以选择该文件夹,不纳入版本控制系统。还有项目创建所生成的,idea/文件夹,我们也可以不纳入版本控制。

      在真实项目中需要特别注意,涉及到敏感数据,绝对不要放入至版本控制当中,例如测试账号、数据库地址等等,这样会暴露项目内容,严重会追究法律责任,如果你是在看本人文章的读者且正在使用公司项目实战,请务必小心!

       不纳入版本控制的做法很简单,只需要在.gitignore文件中添加对应的文件夹或文件即可,添加一个后并换行可添加第二个,则代表该文件或文件夹不纳入版本控制,后续的具体内容有兴趣大家可以继续了解。

    2.4 什么是测试框架?

      框架在生活中也能够比较常见,例如建造一座高楼大厦时,我们需要固定好这个大楼的外层结构,确保建造时大楼是笔直的,确保不会晃动,这就是高楼大厦的框架,而房屋的室内室外等均属于填充内容。

      测试框架也是如此,我们需要搭建起一个自动化的测试框架,可重复设计和利用的内容,写的代码就是在进行框架填充,代码中会包括:

    """
    工具、组件。-- 专门处理excel的工具、记录logger日志的工具、生成日志的工具等等
    """
    

      框架即意味着规则、规矩,任何人使用框架不能够违背,框架没有标准答案,只要你自己是框架的设计者,那么就是自己掌握话语权,好比我们在导入其他人所写的框架时,也必须遵守它们框架的语法、规则。
      

    2.5 分层设计

      什么是分层设计?分层设计的概念是如何进行模块与包的划分,每一个目录就好比一个部门,各司其职,最后的结果就会接近于完美,而独立划分就是分层设计的思想与理念。

      为什么需要进行分层设计?相信大家通过下图能够有基本概念,分层设计就是为了更好的进行框架整合、代码管理与维护,在某个"目录"出现异常时,我只需要对特定的"目录"进行管理即可有效解决问题,而不会对其他目录进行牵连。

    """
    框架结构
    - common      公共方法目录
    - testcase    测试用例目录
    - data        测试数据目录
    - reports     测试报告目录
    - config      配置文件目录
    - logs        日志系统目录
    - funcs       被测函数目录
    - run.py      项目启动文件
    
    """
    

      

    2.6 框架搭建

    2.6.1 公用目录(common)

      新建一个Python package,命名为common,之所以我们要创建Python包而不是一个文件夹的主要原因是Python package中有__init__,如果没有这个文件,可能会在导入文件时失败。故此选择Python package。通常而言,如果这个文件夹里有Python文件,那么我们会使用Python package进行创建。

      公用目录是通用的代码内容,可以理解成无论该框架如何进行移动、修改,公用目录内容均可以保持不变且在其他项目中,公用目录的内容可以完全复制过去进行使用。

    2.6.2 测试用例目录(testcase)

      testcase中存放的主要是自动化测试用例代码,里面包括各类的函数,因为存在py文件,故此我们需要Python package新建。

    2.6.3 测试数据目录(data)

      data中主要存放的是测试数据,数据可以是Excel的形式,也可以是Python模块的形式,故此我们这里的创建还是使用Python package

    2.6.4 测试报告目录(reports)

      测试报告的存放路径在reports,最终的测试报告不是Python模块,大多数是以html的方式存在的,在网页中可展示基础的数据信息和图表类信息,故此我们在创建时只需要建普通的文件夹即可,而不需要Python package

    2.6.5 配置文件目录(config)

      配置文件目录为config,可能会包括数据库地址、用户名密码等常见内容,配置文件有可能会存在Python模块,我们仍然选用Python package

    2.6.6 日志存放目录(logs)

      日志存放目录会存放关于程序运行的日志内容,同样使用Python package创建。

    2.6.7 被测函数目录(funcs)

      被测函数目录主要是用于Python函数的代码存放,存放开发的Python函数文件,使用Python package创建。

    2.6.8 运行文件(run.py)

      在顶级目录创建Python文件,名为run,当执行run.py时则会执行所有的测试用例,主要起到程序运行作用。

    2.7 测试函数

      在funcs下创建login.py,完成被测函数的填写,在testcase下创建test_login,补充一条测试用例:

    """login.py 被测函数"""
    def login(username=None, password=None):
        if username is None or password is None:
            return {"code": 400, "msg": "用户名或密码为空" }
        if username == "萌笑天" and password == "123456":
            return {"code": 200, "msg": "登录成功" }
        return {"code": 300, "msg": "用户名或密码错误" }
    
    """ test_login.py 测试用例"""
    import unittest
    from funcs.login import login
    
    class TestLogin(unittest.TestCase):
        def test_login_success(self):
            username = "萌笑天"
            password = "123456"
            expected = {"code": 200, "msg": "登录成功" }
            actual = login(username, password)
            self.assertEqual(expected, actual)
    

      如上图所示,执行结果为一条测试用例,耗时0.003s,测试通过。代表流程已经走通了。
      

    2.8 执行文件

      在run.py添加执行代码,并预备测试报告生成

    import unittest
    from unittestreport import TestRunner
    from datetime import datetime
    
    suite = unittest.defaultTestLoader.discover("testcase")
    
    # 当前时间
    data_str = str(datetime.now().strftime("%Y-%m-%d__%H-%M-%S"))
    # 测试报告名称
    reports_name = data_str + "项目框架演示测试报告.html"
    
    runner = TestRunner(suite,
                        tester="萌笑天",
                        report_dir="reports",
                        filename=reports_name)
    
    runner.run()
    

    2.9 测试报告

      文件输出到了reports:

      上半部分展示了一个基本的数据汇总,用例的总数、成功失败、错误等用例数量的具体数值,但这非实战阶段,故此测试用例只有1条演示的用例

      中间的部分会有一个图表,图表的形式呈现上述的数据

      最下层是详细信息,可以查看哪个类、哪个方法测试通过还是失败,可查看详情,也支持结果的筛选:

    2.10 路径处理

      我们在项目中还需要使用到路径处理,有些时候我们需要读取对应的路径来获取我们想要的文件或数据,那么需要使用到os路径模块,此处不过多的解释,大家可以先行简单了解,在后续的实战阶段中会重点讲解。

    import os
    # 获取当前文件路径
    current_path = os.path.abspath(__file__)
    
    # 获取config文件夹路径
    config_dir = os.path.dirname(current_path)
    
    # 项目根目录
    root_dir = os.path.dirname(config_dir)
    
    # data 目录
    data_dir = os.path.join(root_dir, "data")
    
    # xlsx文件目录
    case_path = os.path.join(data_dir, "cases.xlsx")
    
    
    

    2.11 知识小结

    """
    框架执行:
    第一步:框架设计、模块
    第二步:在cases里面写自动化测试用例
    第三步:在run.py收集测试用例,生成测试报告
    
    后续实战阶段讲解:
    第四步:封装通用的测试工具,公共代码
    第五步:在用例当中调用log变量以增加日志
    第六步:实现excel的数据驱动
    """
    

      
      

      好啦~以上就是本次文章分享的全部内容啦,你学会了吗?希望能给大家带来帮助哦!

      
      

    来源:萌笑天

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【Python自动化测试20】接口自动化测试框架模型搭建

    发表回复