基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码

  引言

  在上一篇《基于Python接口自动化测试框架(初级篇)附源码》讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构:

 

 

 

  可以看出testcase下有很多测试用例,并且每个测试用例都写了请求地址,请求参数,请求头等相关数据,还有一些断言的数据。如果接口很多的话,这样每个case写都要写,导致后期工作量大,维护起来不方便。

  针对上述情况,引入python一个非常好用的第三方库ddt,其作用就是数据驱动,将数据与代码分离,可以把所有的接口相关的测试用例数据存放在excel里,然后维护一个API文件,这样做就不需要写很多case代码。

 

  框架设计思路

1.大致处理流程:

 

2.接口自动化测试框架处理过程:

  1. 首先,测试数据初始化,维护的业务数据到数据库中,也就是截图中的第一步
  2. 第二步,用Excel维护一份接口测试用例数据(用例id、请求方法、请求参数、请求头、请求类型、返回数据,测试结果等)。
  3. 测试框架只需写一份调用API的代码,读取第二步的维护的接口测试数据,然后向被测系统发送请求,也就是图中的第三步。
  4. 当调用接口的时候,会查询数据库,就是第四步。
  5. 测试框架根据接口返回的数据和Excel的数据进行比较,生成最终测试结果写入Excel中,并且生成测试报告。

 

大致流程:初始化测试数据→读取测试数据→发送请求→写入测试结果→生成测试报告→发送测试邮件。

如图:

 

  框架结构

 

 

这里就不重复介绍了,可以参考初级篇,对比一下。

运行程序:

...............
Time Elapsed: 0:00:01.106878
邮件发送成功!

测试报告:

 

  PS:右侧那个饼图是鼠标放上去自动会放大。

  邮件模块

import os,sys
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
from config import setting
import smtplib
from main.newReport import new_report
import configparser
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart


def send_mail(file_new):
    """
    定义发送邮件
    :param file_new:
    :return: 成功:打印发送邮箱成功;失败:返回失败信息
    """
    f = open(file_new,'rb')
    mail_body = f.read()
    f.close()
    #发送附件
    con = configparser.ConfigParser()
    con.read(setting.TEST_CONFIG,encoding='utf-8')
    report = new_report(setting.TEST_REPORT)
    sendfile = open(report,'rb').read()
    # --------- 读取config.ini配置文件 ---------------
    HOST = con.get("user","HOST_SERVER")
    SENDER = con.get("user","FROM")
    RECEIVER = con.get("user","TO")
    USER = con.get("user","user")
    PWD = con.get("user","password")
    SUBJECT = con.get("user","SUBJECT")

    att = MIMEText(sendfile,'base64','utf-8')
    att["Content-Type"] = 'application/octet-stream'
    att.add_header("Content-Disposition", "attachment", filename=("gbk", "", report))

    msg = MIMEMultipart('related')
    msg.attach(att)
    msgtext = MIMEText(mail_body,'html','utf-8')
    msg.attach(msgtext)
    msg['Subject'] = SUBJECT
    msg['from'] = SENDER
    msg['to'] = RECEIVER

    try:
        server = smtplib.SMTP()
        server.connect(HOST)
        server.starttls()
        server.login(USER,PWD)
        server.sendmail(SENDER,RECEIVER,msg.as_string())
        server.quit()
        print("邮件发送成功!")
    except Exception as  e:
        print("失败: " + str(e))

  运行代码后:

  Excel写入测试结果

  报告和邮件都有了,再来看看测试结果回写Excel的数据:

 

  结果和测试报告中结果一致。

  总结

  到此,接口自动化测试框架开发基本完成,本文主要讲述利用ddt进行数据驱动,实现测试数据与测试代码分开模式,以便提高可读性、执行效率和降低维护成本。
  还有一点需要说明,这套测试用例中的接口基本上是没有关联关系的,如果有上下关联的,就不能这样写了,不然第一个接口执行失败,后面基本全部失败。所以只适用于没有上下依赖关系的接口测试。
  虽然代码已经完成,还有一些细节的地方需要优化,比如日志、报告自动清理,定时发送邮件,Jenkins集成等等。

  附录

  更多干货:加入测试开发交流QQ群:696400122
  微信公众号:全栈测试开发日记,
  CSDN地址:https://blog.csdn.net/liudinglong1989/article/details/104457379

 

posted @ 2020-02-23 22:25  全栈测试开发日记  阅读(3811)  评论(1编辑  收藏  举报