python+requestsはapi自動化テストの枠組みを構築します.(ソース無料ダウンロード)
15326 ワード
pythonのunittestテストは、確かに便利です.しかし、どのアプリに対してもTestCaseを定義するだけでは煩わしい.それぞれのアプリに対して独自の設定をすれば、テストを自動で実行させることができます.次に、私たちはrequestsライブラリを使って自分のテストフレームを構築します.
1.まず、配置が必要なapiのリストを定義する.
*完全コードと具体的な枠组みは私の资源の中に入れて、みんなに无料で使うようにします.住所:http://download.csdn.net/detail/u010445540/9800522 requestsの書き方、unittestの書き方とページseleniumのテストを封入しました.私のgithubに入ってダウンロードしてください........
1.まず、配置が必要なapiのリストを定義する.
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,まずアプリ登録を行い、ログインしてからアプリを呼び出すことができます. 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の各アプリに対して、テストを行います.def test_result(url):
try:
rs = url_call(url['request_method'], url['request_url'],
url['request_data'])
if "404 Not Found " 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 (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 method:%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、リストを巡回テストし、結果を統計します. 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,flashkを使いますscriptはapパッケージを行い、呼び出しを行い、エラーをfailuに記録します.ログログ#!/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
'
log_str = '\r
'.join(result) + '\r
'
open('fail_log', 'a').write(date_str + log_str)
if __name__ == "__main__":
manager.run(default_command='runserver')
8,コマンドpython main.py appiで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%
最後に、リストを配置すれば、apiの自動化テストができ、希望のテストレポートが得られます.*完全コードと具体的な枠组みは私の资源の中に入れて、みんなに无料で使うようにします.住所:http://download.csdn.net/detail/u010445540/9800522 requestsの書き方、unittestの書き方とページseleniumのテストを封入しました.私のgithubに入ってダウンロードしてください........