自动化测试框架Taffy
Taffy
Taffy是基于nosetests的自动化测试框架。
Taffy主要用来测试后台服务(包括且不限于Http, Dubbo/hessian, Webservice, Socket等类型接口),也可集成Selenium, Appium进行WEB或APP的自动化测试,或集成locust进行性能测试。
Taffy封装实现了结果对比,配置读取,DB/Redis操作,数据加解密等接口。
基本用法可以参考Tests/目录下示例demo.
Github地址:https://github.com/lovesoo/Taffy
QQ交流群:25452556
0. 更新记录
20171030 v1.6 支持模块自定义配置安装,详见setup.py
20171015 v1.5 新增《Taffy入门教学视频》
20171010 v1.4 支持分布式模式运行locust
20171009 v1.3 统一配置文件格式为YAML
20170928 v1.2 集成locust,同一脚本可同时进行功能自动化及性能测试,详见附录7-1
20170922 v1.1 集成selenium,新增相关测试demo
20170920 v1.0 第一个版本发布,支持http/hessian/webservice等类型接口功能自动化测试,并提供相关Util工具类
1. 运行环境
- macOS,linux,windows
- nose 1.3.7
- python 2.7
2. 项目结构
- config 配置文件
- Tests 测试用例
- Util 工具类
- checkTool 比较方法及结果校验
- commonTool 配置文件读取
- DBTool 数据库操作(mysql,sqlserver)
- hessianTool hessian接口调用
- httpTool http接口调用
- locustTool locust性能框架
- OATool 正交表设计测试用例
- redisTool redis操作(支持redis及redis cluster)
- securityTool 数据加解密
- seleniumTool selenium PageObject对象封装
- webserviceTool webservice接口调用
3. 环境部署
3.1 Python
请下载安装Python2.7.x版本:
https://www.python.org/downloads/
3.2 IDE
推荐使用PyCharm:
官网地址:http://www.jetbrains.com/pycharm/ 下载安装完成后,注册时选择License server,输入:http://idea.imsxm.com 即可激活^^
3.3 Lib
requirements.txt中存放了Taffy用到的第三方lib库,可以通过setup.py进行最大化、最小化及自定义模块安装配置:
# 默认最大化安装(安装全部模块)
$ python setup.py # -m或--min,最小化安装(只安装必须的nose,requests,PyYAML等)
$ python setup.py -m # -w或--without A B,不安装模块A,B
# 示例:不安装db redis locust模块
$ python setup.py --without db redis locust # --with A B,在最小化安装基础上,只安装模块A,B
# 示例:只安装db redis locust模块
$ python setup.py --with db redis locust # 其中,--with及--without选项支持的模块列表为:[redis,security,db,webservice,selenium,locust,hessian] # -h或--help,查看帮助
$ python setup.py -h
当默认最大化安装全部模块时,Windows系统下一些棘手的lib安装方法:
mysql-python
首先安装Microsoft Visual C++ Compiler for Python 2.7:http://aka.ms/vcpython27
然后下载msi包安装:https://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.3/
pymssql
可直接下载exe包安装: https://pypi.python.org/pypi/pymssql/2.1.1#downloads
python2.7+32位windows系统,请选择:pymssql-2.1.1.win32-py2.7.exe (md5)
webdriver
这里只说下chromedriver的下载配置方法:
下载地址:https://sites.google.com/a/chromium.org/chromedriver/downloads
下载chromedriver_win32.zip,解压后将chromedriver.exe放到Python安装路径下(如C:\Python27\)
3.4 PyCharm配置
运行PyCharm,打开下载的项目:taffy
「File」–>「Settings 」–>「Project:Taffy」->「Project Interpreter」,配置Python interpreter为当前python版本安装目录
「File」–>「Settings 」–>「Tools」->「Python Integrated Tools」–>「Nosetests」,配置Default test runner为Nosetests
「Run」–>「Edit Configurations」–>「Defaults」->「Python」,配置Python interpreter为当前python版本安装目录
「Run」–>「Edit Configurations」–>「Defaults」->「Python tests」–>「Nosetests」,配置Python interpreter为当前python版本安装目录,并在Interpreter options中填入-s用以显示nose运行及调试信息
4. 测试编写执行及报告导出
4.1 功能自动化测试
4.1.1 测试编写
taffy目前只支持nose方式编写测试用例,详见附录7-2
后续若有需求,可扩展支持其他方式,如以excel,csv,yaml等数据驱动形式保存用例
4.1.2 测试执行
可以使用两种方式执行功能自动化测试脚本:
图形用户界面GUI
在PyCharm中,选中测试文件,如Tests/test_demo.py
鼠标右键选择Run 'Nosetests in test_demo.py'即可执行测试
注1:也可使用快捷键:Ctrl+Shift+F10
注2:在脚本里使用快捷键Ctrl+Shift+F10,会单独执行选中的test class或test func
命令行界面CLI
在PyCharm下方Terminal终端中,输入命令执行测试:
# 执行测试文件test_demo.py
$ nosetests -v Tests/test_demo.py # 单独执行测试文件test_demo.py中测试类test_demo下的test_http测试方法
$ nosetests -v Tests/test_demo.py:test_demo.test_http
更多nosetests运行选项,请参考nostests官方文档
4.1.3 测试报告
功能自动化测试执行完成后,在Pycharm左下方Run窗口的Testing toolbar中,选择“Export Test Results”按钮即可导出测试报告
4.2 性能测试
4.2.1 配置config/locust.yml
4.2.2 运行locust
运行test_locust.py生成locustfile及执行性能测试,命令如下:
$ cd Taffy\Tests
$ python test_locust.py
4.2.3 测试报告
普通模式
locust以普通模式运行时,可在web页面实时查看运行结果,包括请求数,响应时间,RPS,失败率等
测试执行完成后可在WEB页面下载CSV格式测试报告(选择Download Data -> Download response time distribution CSV)
no-web模式
locust以no-web模式运行时,csv格式数据会定时保存在运行目录下,如locust_distribution.csv和locust_requests.csv
Taffy集成locust性能测试框架使用说明,详见附录7-1
5. 参考资料
6. 联络方式
QQ交流群:25452556
自动化测试框架Taffy的更多相关文章
- Taffy自动化测试框架简介
Taffy Taffy是基于nosetests的自动化测试框架. Taffy主要用来测试后台服务(包括且不限于Http, Dubbo/hessian, Webservice, Socket等类型接口) ...
- Taffy自动化测试框架Web开发,Python Flask实践详解
1. 前言 最近为Taffy自动化测试框架写了个页面,主要实现了用例管理.执行,测试报告查看管理.发送邮件及配置等功能. 本页面适用所有基于taffy/nose框架编写的自动化测试脚本,或基于un ...
- 避免重复造轮子的UI自动化测试框架开发
一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...
- [转]Android Studio 里搭建自动化测试框架Robotium
Android的自动化测试框架可选择的不多,后来选了Robotium(https://code.google.com/p/robotium/),它的语法及易用性挺像我们用在iOS里的KIF. 官方文档 ...
- 基于Ruby的Watir-WebDriver自动化测试框架
基于Ruby的watir-webdriver自动化测试方案与实施(五) 基于Ruby的watir-webdriver自动化测试方案与实施(四) 基于Ruby的watir-webdriver自动 ...
- Windows下部署Appium教程(Android App自动化测试框架搭建)
摘要: 1,appium是开源的移动端自动化测试框架: 2,appium可以测试原生的.混合的.以及移动端的web项目: 3,appium可以测试ios.android.firefox os: 4,a ...
- IntelliJ IDEA 自动化工具安装并添加自动化测试框架
IntelliJ IDEA是一个用于开发人员开发和测试人员自动化测试的测试工具,类似于eclipse. 优点:插件多自身可以携带,自身携带cucumber自动化测试框架,类似于junit一样 缺点:r ...
- Selenium自动化测试框架介绍
Selenium自动化测试框架介绍 1.测试架构作用 a.可维护性 b.提高编写脚本效率 c.提高脚本的可读性 2.框架的几大要素: Driver管理,脚本,数据,元素对象,LOG,报告,运行机制,失 ...
- UiAutomator自动化测试框架介绍
UiAutomator自动化测试框架介绍 环境搭建 1 必要条件 1.1 JDK 1.2 SDK(API高于15) 1.3 Eclipse 2 ...
随机推荐
- [noip模拟题]科技节 - 搜索 - 位运算优化
[问题描述] 一年一度的科技节即将到来.同学们报名各项活动的名单交到了方克顺校长那,结果校长一看皱了眉头:这帮学生热情竟然如此高涨,每个人都报那么多活动,还要不要认真学习了?!这样不行!……于是,校长 ...
- Python3基础 hasattr 测试类是否有指定的类属性
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Mysql数据库基础知识
什么是Mysql数据库 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQ ...
- git如何列出最简短的commit(tag和head名都不显示)
答:git log --oneline --no-decorate --oneline: 将commit显示成一行 --no-decorate: 将tag和head名隐藏掉
- JS事件监听器
JS事件监听器 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Javasc ...
- 【修改帐号信息】Eclipse中修改SVN用户名和密码方法
由于在svn 的界面中并没有为我们提供直接更换用户名密码的地方,所以一旦我们需要更换用户名的就需要自己想一些办法. 解决方案: 在Eclipse 使用SVN 的过程中大多数人往往习惯把访问SVN 的用 ...
- Codeforces Round #527 (Div. 3)
一场div3... 由于不计rating,所以打的比较浪,zhy直接开了个小号来掉分,于是他AK做出来了许多神仙题,但是在每一个程序里都是这么写的: 但是..sbzhy每题交了两次,第一遍都是对的,结 ...
- cent os下搭建简单的服务器
作为常和网络打交道的程序员,经常会遇到需要服务器的场合,比如搭建一个web服务器,一个代理服务器,又或者一个小型的游戏服务器. 我时常和朋友一起玩一款叫我的世界的游戏,为了能够长期稳定地联机玩,所以特 ...
- Codeforces Round #223 (Div. 2) E. Sereja and Brackets 线段树区间合并
题目链接:http://codeforces.com/contest/381/problem/E E. Sereja and Brackets time limit per test 1 secon ...
- python 判断字符串是否以数字结尾
import re def end_num(string): #以一个数字结尾字符串 text = re.compile(r".*[0-9]$") if text.match(st ...