引言

  在上一篇《基于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

基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码的更多相关文章

  1. 基于Python接口自动化测试框架(初级篇)附源码

    引言 很多人都知道,目前市场上很多自动化测试工具,比如:Jmeter,Postman,TestLink等,还有一些自动化测试平台,那为啥还要开发接口自动化测试框架呢?相同之处就不说了,先说一下工具的局 ...

  2. Python接口自动化测试框架实战 从设计到开发

    第1章 课程介绍(不要错过)本章主要讲解课程的详细安排.课程学习要求.课程面向用户等,让大家很直观的对课程有整体认知! 第2章 接口测试工具Fiddler的运用本章重点讲解如何抓app\web的htt ...

  3. Python接口自动化测试框架: pytest+allure+jsonpath+requests+excel实现的接口自动化测试框架(学习成果)

    废话 最近在自己学习接口自动化测试,这里也算是完成一个小的成果,欢迎大家交流指出不合适的地方,源码在文末 问题 整体代码结构优化未实现,导致最终测试时间变长,其他工具单接口测试只需要39ms,该框架中 ...

  4. 【python大牛分享】python——接口自动化测试框架环境的使用

    本文总结分享介绍接口测试框架开发,环境使用python3+selenium3+unittest+ddt+requests测试框架及ddt数据驱动,采用Excel管理测试用例等集成测试数据功能,以及使用 ...

  5. python 接口自动化测试--框架整改(五)

    代码结构: 目标架构: 1.用例分析器,自动根据接口的参数,类型生成测试用例 2.数据分析器,自动维护接口参数数据,动态数据自动生成,返回结果自动查询判断 3.核心调用引擎,分SOAP和HTTP两种, ...

  6. 基于python的自动化测试框架搭建

    滴~ 今日打卡!   好多天没来打卡了.博主最近一直在把碎片化知识转化为知识体系的过程中挣扎.Python语言.selenium.unittest框架.HTMLTestRunner框架都有所了解,也写 ...

  7. python接口自动化测试框架实现之字符串插入变量(字符串参数化)

    问题: 在做接口自动化测试的时候,请求报文是json串,但是根据项目规则必须转换成字符串,然后在开头拼接“data=” 接口中很多入参值需要进行参数化. 解决方案: 1.Python并没有对在字符串中 ...

  8. 关于js渲染网页时爬取数据的思路和全过程(附源码)

    于js渲染网页时爬取数据的思路 首先可以先去用requests库访问url来测试一下能不能拿到数据,如果能拿到那么就是一个普通的网页,如果出现403类的错误代码可以在requests.get()方法里 ...

  9. jquery省市区三级联动(数据来源国家统计局官网)内附源码下载

    很久很久没有写博了. 今天更新了项目的省市区三级联动数据,更新后最新的海南三沙都有,分享给所有需要的小伙伴们... JQUERY + JSON,无数据库,纯JS代码,无加密,无压缩,可直接使用在任何项 ...

随机推荐

  1. shell 颜色输出

    #!/bin/bash function display_method(){ clearDisplayMetho=0 if [ $displayMethod -eq 0 ]; then echo -e ...

  2. H5浏览器强制手机横屏

    H5强制手机横屏 1. 通过screen.orientation可以定义手机屏幕的方向,但是lock()方法仅在浏览器已经通过requestFullscreen()切换到全屏模式时起作用,例:强制手机 ...

  3. Android 6.0(棉花糖)新特性

    1.支持4K显示 Android 6.0本身已经支持4K显示,会通过一定优化形式使4K内容更加清晰. 2. 启动验证 (更完整的应用权限管理) Android 6.0在开机时会自动运行验证代码,检测设 ...

  4. [Redis-CentOS7]Redis集合操作(四)

    SADD 集合添加 127.0.0.1:6379> SADD bbs discuz.net (integer) 1 127.0.0.1:6379> SADD bbs "tiany ...

  5. 谈下slot-scope

    Vue里有个slot插槽的概念,常用的一般是命名的slot和默认的slot, 这里谈下slot-scope,Vue2.6后改成v-slot slot-scope场景是父组件用子组件的数据,但是样式自己 ...

  6. Asp.net Core MVC(三)UseMvc设置路由

    在家办公,下班继续看点东西,不废话,继续看MVC的路由. asp.net核心mvc的路由是建立在asp.net核心的路由之上的.通过终结点加载路由中间件的配置方式在此不细说了,(DOTNET Core ...

  7. ES6 - 报错整理(1): Unexpected end of JSON input while parsing near '...es":"7.0.0-alpha.11",'

    npm install --save-dev 安装 babel-preset-env时一直报错 Unexpected end of JSON input while parsing near '... ...

  8. 2、CentOS7密码重置

    一.重启系统,在开机过程中,快速按下键盘上的方向键↑和↓.目的是告知引导程序,我们需要在引导页面选择不同的操作,以便让引导程序暂停.  以下是暂停后的界面,可以查看下方的英文可知↑和↓的作用.  二. ...

  9. 【转载】structlog4j介绍

    源文章:structlog4j介绍 结构化日志对于日志的收集的作用挺大的,根据自身的业务场景,基于SLF4J实现了structlog4j. 相关引用 Gradle // 基础包 compile 'te ...

  10. 基于S2SH开发学生考勤管理系统 附源码

    开发环境: Windows操作系统开发工具:Eclipse+Jdk+Tomcat+mysql数据库 运行效果图 源码及原文链接:http://javadao.xyz/forum.php?mod=vie ...