宣言:
我们已开始步入万物互联时代,在此背景下,企业以及个人的Service更加趋向于高度集成、快速迭代的模式,因此在重中之重的【质量验证】这一阶段将变得更加复杂,如果你想提高效率,又不想增加回归测试的耗时,那么你可以将一些有规律、可以批量完成的工作抽取出来,改造为自动化或者半自动化,使得人力从繁杂的回归验证中解放,稳稳的跟上快速迭代的步伐,让团队变得高效化!下面我将以描述+示例的方式,来帮你打出自动化测试第一枪!
一. 学习之前我要做哪些准备?
1. 基础知识:
-
Python语法入门
-
了解接口测试规范
-
了解Json数据结构
2. 软件安装:
-
PyCharm 下载与安装
-
Python 3.6.x 下载与安装
-
2个Python库的安装[flask、requests]
二. 环境布置和代码编写
如果你完全掌握了第一步的基础知识点,那可以开始部署环境并投入编码了,请务必放松,放轻松,我会尽量以最最简洁的代码、不掺杂多余知识点的方式,只以完成基本功能为最终目标,来创建这个接口自动化代码示例。
在正式编程之前,需要先梳理好本次的程序功能点,然后全部以函数式编程来完成各个节点,最后将其串联起来,即可实现本次的目标程序。
总共需要实现5个组件:
1.一个简易http接口服务器 [非必须,如果你有其他http服务器也可以不再创建]
2.一个接口用例数辅助计算器 [非必须,辅助计算用例的个数]
3.一个执行器 [Json解析、参数组装执行]
4.一个requests发送器 [可分别以get和post请求来获取返回值]
5.一个结果收集与分析器
结构示意图:
首先创建一个简易的http接口服务器,使其支持Get和Post 2种方式的请求,并且逻辑带有参数错误检查
# -*- coding: utf-8 -*-
"""
@version: 1.0
@author: TerryJay
@license: Apache Licence 2.0
@file: panda_http_server.py
@time: 2018/5/25 22:00
"""
from flask import Flask, request, jsonify
from .panda_connect_mysql import SQL
app = Flask(__name__)
@app.route('/')
def default_page():
return 'Hi, Panda!'
@app.route('/get_login', methods=['GET'])
def get_login():
if request.values.get('user') == 'panda' and request.values.get('password') == '12345':
return jsonify({'result': '200', 'data': 'Login success'})
else:
print(request.values.get('user'), request.values.get('password'))
return jsonify({'result': '502', 'data': 'Login failure'})
@app.route('/post_login', methods=['POST'])
def post_login():
if request.form.get('user') == 'panda' and request.form.get('password') == '12345':
print('post接口登录成功', request.form.get('user'), request.form.get('password'))
return jsonify({'result': '200', 'data': 'Login success'})
else:
# print(request.values.get('user'))
# print(request.headers)
print(request.form.get('user'), request.form.get('password'))
# print(request.form.getlist('user'))
return jsonify({'result': '502', 'data': 'Login failure'})
# print(request.form.get('user', default='little apple'))
# 下面新增2个函数,更新时间为2018-06-02
@app.route('/get_mysql_data_login', methods=['GET'])
def get_mysql_data_login():
# 取出接口携带的user和password
interface_user = request.values.get('loginId')
interface_password = request.values.get('password')
mysql = SQL()
# 根据接口发过来的参数去数据库查询,但是如果发现user和password都为空,无需进行查询,直接返回500
if interface_user == '' or interface_password == '':
return jsonify({'result': '500', 'data': '请输入用户名和密码'})
else:
account_id = mysql.sql_select_one("SELECT `id` FROM `account` WHERE `user`='%s'" % interface_user)
if account_id is not None:
account_pwd = mysql.sql_select_one("SELECT `password` FROM `account` WHERE `id`='%s'" % account_id[0])
if interface_password == account_pwd[0]:
return jsonify({'result': '200', 'data': '登录成功'})
else:
return jsonify({'result': '602', 'data': '密码错误,请重新输入'})
else:
return jsonify({'result': '603', 'data': '用户名错误,请重新输入'})
@app.route('/post_mysql_data_login', methods=['POST'])
def post_mysql_data_login():
# 取出接口携带的user和password
interface_user = request.values.get('loginId')
interface_password = request.values.get('password')
mysql = SQL()
# 根据接口发过来的参数去数据库查询,但是如果发现user和password都为空,无需进行查询,直接返回500
if interface_user == '' or interface_password == '':
return jsonify({'result': '500', 'data': '请输入用户名和密码'})
else:
account_id = mysql.sql_select_one("SELECT `id` FROM `account` WHERE `user`='%s'" % interface_user)
if account_id is not None:
account_pwd = mysql.sql_select_one("SELECT `password` FROM `account` WHERE `id`='%s'" % account_id[0])
if interface_password == account_pwd[0]:
return jsonify({'result': '200', 'data': '登录成功'})
else:
return jsonify({'result': '602', 'data': '密码错误,请重新输入'})
else:
return jsonify({'result': '603', 'data': '用户名错误,请重新输入'})
if __name__ == '__main__':
app.run(port=7777, debug=True)
执行结果:
Restarting with stat
Debugger is active!
Debugger PIN: 719-789-943
Running on http://127.0.0.1:7777/ (Press CTRL+C to quit)
创建第二个组件,用来测试上面的接口服务器是否可以正常访问
"""
@version: 1.0
@author: TerryJay
@license: Apache Licence 2.0
@file: panda_request_test.py
@time: 2018/5/25 22:08
"""
import requests
# get请求测试
get_headers = {'Content-Type': 'application/json'}
get_url = 'http://127.0.0.1:7777/get_login'
get_body = {'user': 'panda', 'password': '12345'}
panda_get = requests.get(url=get_url, params=get_body, headers=get_headers)
print('get请求测试 ', panda_get.json())
# post请求测试
post_url = 'http://127.0.0.1:7777/post_login'
post_headers = {'Content-Type': 'application/x-www-form-urlencoded'}
post_body = {'user': 'panda', 'password': '12345'}
panda_post = requests.post(url=post_url, data=post_body, headers=post_headers)
print('post请求测试', panda_post.json())
执行结果:
get请求测试 {'data': 'Login success', 'result': '200'}
post请求测试 {'data': 'Login success', 'result': '200'}
现在,我们已经将2个主要组件完成了,接下来创建用例执行器,它包含Json解析器以及自动读取参数并执行的功能,下一章继续更新!
传送门:初出茅庐——用python打出你的接口自动化测试第一枪(2)
版权归作者@TerryJay所有,转载请注明出处