项目背景:

  XXXX银行项目采用的是B/S架构,主要是为了解决银行业务中的柜员、凭证、现金、账务等来自存款、贷款、会计模块的管理。

手工弊端:

1.项目业务复杂度高,回归测试工作量大
2.单个接口功能比较简单,容易实现自动化集成,且相对UI更稳定,更能达到监控项目质量的目的
3.从前后端分离的角度说,只依赖前端限制并不能满足安全要求

优化方案及工具选择:

Postman:

  功能强大Chrome插件,界面好看响应格式自主选择,缺点支持的协议单一且不能数据分离,比较麻烦的还有不是所有的公司都能上谷歌
SoupUI:

  支持多协议(http\soup\rest等),能实现功能和性能测试的开源接口测试工具,灵活性高可在此基础上开发脚本,缺点上手比较难
Jmeter:

  Java御用的接口压力测试工具,做接口功能测试有点大材小用,缺点不能生成可视化的接口测试报告

综上:手动开发比较合适

框架原理:

采用数据驱动模式,将数据和业务逻辑分离,完成测试用例编写-》测试用例执行-》测试报告发送的目的

测试用例格式编写如下:

代码实现:

注:为了数据脱敏,以百度翻译接口为例

1.读取测试用例数据data.py

# coding=utf-8
import json
import xlrd
import sys
reload(sys)
sys.setdefaultencoding('utf-8')def tableToJson():source = xlrd.open_workbook(r"C:\Users\HP\Desktop\0608\InterfaceData.xlsx")table = source.sheet_by_index(0)list = []  # 字典列表totalList = []  # json列表for i in xrange(1,2):         #获取第i个表第2行起的值作为用例的参数keys = table.col_values(1)  # 获取第i个表第2列的值
        keys.pop(0)for j in xrange(3, table.ncols):test_value = table.col_values(j)  # 获取第i个表第4列起的值作为用例的参数值
            test_value.pop(0)for k in range(len(test_value)):s = test_value[k]# print sdata = dict(zip(keys, test_value))  # 等长两列表转为字典
            list.append(data)data = {}data[table.name] = listlist = []data_to_json = json.dumps(data, ensure_ascii=False, encoding="gb2312")  # 将列表中的unicode转中文print u"用例数据:", data_to_jsontotalList.append(data_to_json)return totalListif __name__ == '__main__':jsonData = tableToJson()# 写入文件f = open(r"F:\TestData0618.json", 'w+')for i in jsonData:f.write(i)f.write('\n')f.close()

运行结果:

2.执行测试用例test.py

#coding=utf-8
import requests
import unittest
import jsonclass MyTest(unittest.TestCase):  # 封装测试环境的初始化和还原的类def setUp(self):print("start test")def tearDown(self):print("end test")class Test_transapi(MyTest):  # 一个接口封装一个类
@staticmethoddef getParams():Data = open(r"F:\TestData0618.json").read()temp = eval(Data)   #type(Data)为str,type(temp)为dictdata = temp['2100']return datadef test_transapi(self):self.url = "http://fanyi.baidu.com/v2transapi"self.headers = {'Host': 'fanyi.baidu.com','Upgrade-Insecure-Requests': '1','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Encoding': 'gzip, deflate, sdch, br','Accept-Language': 'zh-CN,zh;q=0.8','Cache-Control': 'max-age=0','Connection': 'keep-alive'}data = self.getParams()for i in data:print iself.params = i#print u'参数:',self.paramsr = requests.get(url=self.url, params=self.params,headers=self.headers)#print (r.text)print (r.status_code)self.assertEqual(200,r.status_code)if __name__=="__main__":unittest.main()    

运行结果:

3.构建测试报告run.py

#coding=utf-8
from HTMLTestRunner import HTMLTestRunner
import time
import unittest#定义测试用例的目录为当前目录
test_dir = r'C:\Users\HP\Desktop\0608'
discover = unittest.defaultTestLoader.discover(test_dir,pattern = 'test*.py')  if __name__=="__main__":  #按照一定的格式获取当前的时间  now = time.strftime("%Y-%m-%d %H-%M-%S")  #定义报告存放路径  filename =test_dir + '/' + now + 'test_result.html'  fp = open(filename,"wb")  #定义测试报告  runner = HTMLTestRunner(stream =  fp,  title = u"2100接口测试报告",  description = u"测试用例执行情况:")  #运行测试
    runner.run(discover)  fp.close() #关闭报告文件

运行结果:

4.发送测试报告send.py

#coding=utf-8import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipartdef SendMail(subject,msg,to_addrs,from_addr,smtp_addr,password):'''@subject:邮件主题@msg:邮件内容@to_addrs:收信人的邮箱地址@from_addr:发信人的邮箱地址@smtp_addr:smtp服务地址,可以在邮箱看,比如163邮箱为smtp.163.com@password:发信人的邮箱密码'''mail_msg = MIMEMultipart()      #创建一个带附件实例#构造附件test.docxatt1 = MIMEText(open(r'C:\Users\HP\Desktop\0608\2017-06-18 22-33-24test_result.html','rb').read(), 'base64', 'gb2312')att1["Content-Type"] = 'application/octet-stream'att1.add_header('Content-Disposition', 'attachment', filename=u'测试报告.html'.encode('gbk')) mail_msg.attach(att1)#构建MIMEText纯文本内容txt = MIMEText(msg,'plain', 'utf-8')mail_msg.attach(txt)mail_msg['Subject'] = subjectmail_msg['From'] =from_addrmail_msg['To'] = ','.join(to_addrs)try:s = smtplib.SMTP()s.connect(smtp_addr)  #连接smtp服务器s.login(from_addr,password)  #登录邮箱s.sendmail(from_addr, to_addrs, mail_msg.as_string()) #发送邮件
        s.quit()print "success"except Exception,e:print str(e)if __name__ == '__main__':from_addr = "XXX"smtp_addr = "XXX"to_addrs = ["XXX"]subject = "send test"password = "XXX"msg = "hello,this is just a send test"SendMail(subject,msg,to_addrs,from_addr,smtp_addr,password)

运行结果:

5.定时执行测试用例

详见Jenkins安装与使用

问题和挑战:

1.接口文档更新不及时,导致用例数据可能与实际需要的有所出入。推荐使用SwaggerUI工具管理接口测试文档

2.大部分用例执行之前为了安全需要保证已登录,简单的将cookie加入请求头不管用,用session

3.测试报告用的是通用版(一个脚本一条记录),所有现状将一个接口下所有用例都写在一个脚本里只会有一条记录

4.邮件中文附件名称乱码

转载于:https://www.cnblogs.com/Ryana/p/7027489.html

简陋版:基于python的自动化测试框架开发相关推荐

  1. python的web自动化框架实例_Selenium基于Python web自动化测试框架 -- PO

    关于selenium测试框架首先想到的就是PO模型,简单说下PO模型 PO模型的概念和理解: PO就是一个设计思想,将代码以页面为单位进行组织,针对这个页面上的所有信息.相关操作都放到一个类中,从而使 ...

  2. 基于Python的Flask框架开发的在线电影网站系统(附源码)

    来源丨网络 今天给大家分享的是基于Python的Flask框架开发的在线电影网站系统. 项目介绍 项目介绍:网站前端采用HTML5编写,使用Bootstrap前端开发框架,后端使用Python3语言编 ...

  3. Selenium基于Python web自动化测试框架 —— PO模型

    目录 1.前言: 2.PO模型的概念和理解: 3.PO模型的目录结构: 4.PO代码示例: 5.总结 6.重点:配套学习资料和视频教学 1.前言: 关于selenium测试框架首先想到的就是PO模型, ...

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

    目录 1.引言 1.框架设计思路 2.框架设计思路 3.运行程序 4.源码获取 引言 很多人都知道,目前市场上很多自动化测试工具,比如:Jmeter,Postman,TestLink等,还有一些自动化 ...

  5. 基于Python+unittest自动化测试框架说明文档

    一.unittest自动化框架介绍.... - 5 - 1.unittest核心工作原理.... - 5 - 1.1.TestCase. - 5 - 1.2.TestSuite. - 6 - 1.3. ...

  6. python接口自动化测试框架实战从设计到开发_Python接口自动化测试框架实战 从设计到开发...

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

  7. python appium自动化测试框架unittest_Appium基于Python unittest自动化测试 自动化测试框架 -- PO并生成html测试报告...

    基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...

  8. 设计自己的基于Selenium 的自动化测试框架-Java版(2) - 定义自己的工作流程

    设计自己的基于Selenium的自动化测试框架-Java版(2) -定义自己的工作流程 Work flow chart 上图是整个工作流程,红色虚线上面的需要手动来完成,红色虚线下面的实现自动化. 我 ...

  9. 11小时 python自动化测试从入门到_从设计到开发Python接口自动化测试框架实战,资源教程下载...

    课程名称 从设计到开发Python接口自动化测试框架实战,资源教程下载 课程简介: 课程从接口基础知识入门,从抓包开始,到接口工具的运用,再到常见接口库.接口开发.Mock服务.unittest框架的 ...

最新文章

  1. 深入理解position:relative 与 position:absolute(divb相对于diva进行绝对定位)
  2. 台湾国立大学郭彦甫Matlab教程笔记(2)
  3. python中all函数的用法_python中map、any、all函数用法分析
  4. 【Tool】sublime txt的使用
  5. 白鹭引擎egret wing编辑器提示报错 egret 命令不存在 乱码的情况解决方法
  6. 访问修饰符 c# 1613703072
  7. Linux 命令(60)—— strip 命令
  8. 小学计算机课教后小记,小学信息技术课开展生活化教学的方法
  9. javascript之生成一个指定范围内的随机数
  10. 取消2008关机对话框
  11. MT4的交易记录导入“复盘大师3”的解决办法
  12. adobe 不适应 Max to分屏软件的修改
  13. vue图片懒加载 以及 页面刷新加载不显示大括号{{}}
  14. gym102536部分简要题解
  15. 74HC238引脚定义 使用方法
  16. 面试突击51:为什么单例一定要加 volatile?
  17. 《设计模式之禅》-策略模式
  18. 2015-10-13 OC语言中的复合
  19. quick-cocos2d-x 飞机大战(打飞机)小demo教程------敌人类
  20. 【转载】阿里云服务器忘记了实例密码怎么办

热门文章

  1. org.apache.hadoop.hive.metastore.api.MetaException: Get request failed :xxxx
  2. 2020Alibaba数学竞赛预选赛第一轮参考答案
  3. Google Drive的linux客户端使用(还没弄完)
  4. Spark-shell进行粘贴模式
  5. url 转换中文_数字快速转换成中文大写,我有妙招
  6. 原生Aajax 和jQuery Ajax 写法个人总结(简单)
  7. System.getProperty(user.dir); 获得系统属性
  8. 数据回显---SpringMVC学习笔记(九)
  9. C#进阶系列——WebApi 异常处理解决方案
  10. Java等线程池执行完所有任务后再执行主线程