初出茅庐——用python打出你的接口自动化测试第一枪(1)

前言:

   我们已开始步入万物互联时代,在此背景下,大量的企业、个人的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

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所有,转载请注明出处

猜你喜欢

转载自blog.csdn.net/qq_42183962/article/details/80460544