python+requests 搭建api自动化测试框架(源码免费下载)
2017-03-31 18:19
344 查看
python中的unittest测试,确实很方便。但是只对每个api都要定义TestCase,这就很繁琐。
那要是针对每个api,做单独的配置,让测试自动运行就方便很多。
下面,我们用requests库来搭建自己的测试框架。
1.首先,定义需要配置的api的list。
2.定义post方法需要的header
3,先进行api登录,登录之后才可以对api进行调用
4.封装requests的方法,实现单一的get,post,delete,put等方法的统一传值和调用。
5,针对list的每一个api,进行测试
6,对list进行遍历测试,并对结果进行统计
7,用flask_script进行app封装,和调用,并把错误记录到fail_log日志
8,用命令python main.py api 进行api自动化测试,可以得到如下测试结果
最后,只要对list进行配置,就可以进行api的自动化测试,并得到想要的测试报告
**完整代码和具体的框架我放到了我的资源中,供大家免费使用。地址:http://download.csdn.net/detail/u010445540/9800522
封装了requests 写法,unittest写法 和页面selenium的测试,请进入我的github进行下载:。。。。。。。。**
那要是针对每个api,做单独的配置,让测试自动运行就方便很多。
下面,我们用requests库来搭建自己的测试框架。
1.首先,定义需要配置的api的list。
url_prex='http://127.0.0.1:5000' [{'request_id': 1, 'request_name': 'api_url', 'request_method': 'GET',#或者是post,put之类的 'request_url': url_prex + '/api/test', 'request_data': None, 'respone_status_code': 200, 'respone_data': "success" }, {'request_id': 2, 'request_name': 'api_url', 'request_method': 'POST',#或者是post,put之类的 'request_url': url_prex + '/api/test', 'request_data': {'name':'testname'}, 'respone_status_code': 200, 'respone_data': "success" }, ]
2.定义post方法需要的header
headers = { 'Accept': 'application/json', 'Content-Type': 'application/json,application/x-www-form-urlencoded' }
3,先进行api登录,登录之后才可以对api进行调用
req = requests.session() req.get('http://127.0.0.1:5000/auth/login', data={'userName': 'admin', 'password': "admin"}) url_prex = 'http://99.1.15.23:8080'
4.封装requests的方法,实现单一的get,post,delete,put等方法的统一传值和调用。
def url_call(method, url, data): try: if not method or method.upper() == 'GET': response = req.request('GET', url, params=data) else: response = req.request(method, url, headers=headers, data=data) except Exception as e: raise e return response
5,针对list的每一个api,进行测试
def test_result(url): try: rs = url_call(url['request_method'], url['request_url'], url['request_data']) if "<title>404 Not Found</title>" in rs.text: return u'%s 测试结果为: %s!,原因:request_url 地址错误! request_id: %s,url:%s method:%s request_data:%s' % ( url['request_name'], 'FAIL', url['request_id'], url['request_url'], url['request_method'], change_request_data_str(url['request_data'])), False if "Traceback <em>(most recent call last)" in rs.text: return u'%s 测试结果为: %s!,原因:被调用的api发生了Exception! request_id: %s,url:%s method:%s request_data:%s' % ( url['request_name'], 'Api Exception', url['request_id'], url['request_url'], url['request_method'], change_request_data_str(url['request_data'])), False if url['respone_status_code'] and rs.status_code != url[ 'respone_status_code']: return u'%s 测试结果为: %s!,原因:status_code不一致! request_id: %s, url:%s method:%s request_data:%s' % ( url['request_name'], 'FAIL', url['request_id'], url['request_url'], url['request_method'], change_request_data_str(url['request_data'])), False if url['respone_data'] and url['respone_data'] not in rs.text: return u'%s 测试结果为: %s!,原因:期待的数据不在结果中! request_id: %s ,url:%s method:%s request_data:%s' % ( url['request_name'], 'FAIL', url['request_id'], url['request_url'], url['request_method'], change_request_data_str(url['request_data'])), False except Exception as e: return u'%s 测试结果为: %s!,原因:测试程序发生了内部错误,%s! request_id: %s ,url:%s method:%s request_data:%s' % ( url['request_name'], 'FAIL', e.__str__(), url['request_id'], url['request_url'], url['request_method'], change_request_data_str(url['request_data'])), False return u'%s 测试结果为: %s! request_id: %s ,url:%s metho bc39 d:%s request_data:%s' % ( url['request_name'], 'Success', url['request_id'], url['request_url'], url['request_method'], change_request_data_str(url['request_data'])), True
6,对list进行遍历测试,并对结果进行统计
def url_test(): result_false_list = [] begin_time = time.time() for url in url_map: result_str, result_status = test_result(url) print result_str if not result_status: result_false_list.append(result_str) percent = float( url_map.__len__() - result_false_list.__len__()) * 100 / float( url_map.__len__()) print u"总用时:%s ,测试总数:%s,失败个数:%s,测试成功率为:%.2f%%" % ( time.time() - begin_time, url_map.__len__(), result_false_list.__len__(), percent) return result_false_list
7,用flask_script进行app封装,和调用,并把错误记录到fail_log日志
#!/usr/bin/env python # -*- coding: UTF-8 -*- import sys from flask import Flask from flask_script import Manager reload(sys) sys.setdefaultencoding('utf-8') app = Flask(__name__) manager = Manager(app) @manager.command def api(): from tests.api.requests_help import url_test result = url_test() if result: import time date_str = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) + '\r\n' log_str = '\r\n'.join(result) + '\r\n' open('fail_log', 'a').write(date_str + log_str) if __name__ == "__main__": manager.run(default_command='runserver')
8,用命令python main.py api 进行api自动化测试,可以得到如下测试结果
test_ip_url 测试结果为: Success! request_id: 13 ,url:http://127.0.0.1:5000/api/test method:GET request_data:{'command': 'true', 'Name': 'office_pooxl'} test_ip_url 测试结果为: FAIL!,原因:status_code不一致! request_id: 14, url:http://127.0.0.1:5000/api/test/name method:GET request_data:{'virtualName': 'NameServer', 'ip': '110.65.139.196'} 总用时:24.8880000114 ,测试总数:2,失败个数:1,测试成功率为:50.00%
最后,只要对list进行配置,就可以进行api的自动化测试,并得到想要的测试报告
**完整代码和具体的框架我放到了我的资源中,供大家免费使用。地址:http://download.csdn.net/detail/u010445540/9800522
封装了requests 写法,unittest写法 和页面selenium的测试,请进入我的github进行下载:。。。。。。。。**
相关文章推荐
- 40行python代码,搭建一个网站并实现用户登陆功能(附源码下载)
- XNA最新免费教程电子书籍下载(附带源码),目前发布第1、2、3章(强烈推荐)
- 示例项目Codematicdemo的Asp.net2.0版源码发布免费下载,代码生成器Codematic2.0bate版预览
- 推荐免费下载380套大型商业源码
- 免费下载430套大型商业源码
- [置顶]▁▂▃ 【2011-9-22日前Himi所有博文锦集-CHM文档】+【Android游戏开发系列源码】+【免费提供打包下载】▃▂▁
- 示例项目Codematicdemo的Asp.net2.0版源码发布免费下载,代码生成器Codematic2.0bate版预览
- Android开发之ListView详解(带按钮布局)【免费提供源码下载】
- 华软资源共享--免费下载380套大型企业管理源码
- MP3编码解码详解/MP3编码原理专题/MP3编码源码/MP3解码器源码/免费/下载
- 书籍源码免费下载 关老师 作品《Android开发案例驱动教程》
- Asp.net源码本周更新(免费下载)—4月10日开始
- 免费网络远程视频会议系统,免费美女多人视频聊天(附源码下载)(Flex和Fms3开发)
- 国内各大优秀免费源码下载站集合!
- 推荐免费下载380套大型商业源码
- XNA最新免费教程电子书籍下载(附带源码),目前发布第4章(强烈推荐)
- 上周Asp.net源码(11.5-11.10)免费下载列表
- JSP搭建SSH框架mvc视频教程+源码下载[it560首发]
- 推荐免费下载430套大型商业源码 ERP源码 企业信息化管理咨询
- Android开发环境的搭建之三 下载android2.2源码