一、前言

  本文章主要讲解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的数据驱动
"""

  
  

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

  
  

在这里插入图片描述

Logo

华为云1024程序员节送福利,参与活动赢单人4000元礼包,更有热门技术干货免费学习

更多推荐