渐入佳境——python接口自动化测试之实现mysql访问器(3)

接口测试实战训练预热

   接下来我们一起开始开发一个接口自动化测试的小框架,我暂且将其命名为Panda,相信你一定能快速掌握并且有所启发

一. 环境和数据的准备:

1. mysql数据库安装(快速查看)、建表和插入数据
2. mysql-connector-python驱动安装
3. 实战:用python完成一个mysql访问器 (本章仅对"查询"功能进行开发)
4. 实战:用python完成一个很简单的http请求发起器

 

『mysql-connector-python-8.0.11-py3.6-windows-x86-64bit.msi (2.8MB)』 官网下载链接
点我下载
『SQLyog_12.5.1+Ultimate (7.91MB)』MySQL可视化工具——小海豚 下载链接
点我下载

 

1. 在PyCharm里新建一个Project (或者直接在你的任意目录新建一个Panda文件夹,按以下结构放置文件,再用IDE的"File"-"Open"选中Panda工程包)图中有一些还没讲到但已经开发完成的组件,暂时先不要管,后续博客会逐步贴上,只需要关注本章的2个py文件和环境部署相关的文件即可。
2. 确保你的mysql服务成功启动后,用mysql连接工具登录后 (如果你还没装数据库访问工具,可以下载上面的SQLyog 解压即可使用),复制下面整段的数据库脚本到你的工具里执行,这样就完成了建表和插入数据。
/*
SQLyog Ultimate v12.5.1 (64 bit)
MySQL - 8.0.11 : Database - panda
*********************************************************************
*/

/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`panda` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `panda`;


/*创建测试用例储存表*/
DROP TABLE IF EXISTS `case`;

CREATE TABLE `case` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用例id',
  `module_name` varchar(200) NOT NULL COMMENT '功能模块名称',
  `request` char(20) NOT NULL COMMENT '请求方法',
  `url` varchar(200) NOT NULL COMMENT '请求地址',
  `sign` tinyint(1) NOT NULL COMMENT '是否需要KEY验证',
  `headers` json DEFAULT NULL COMMENT '接口请求头',
  `body` json NOT NULL COMMENT '接口参数',
  `run_notes` varchar(500) DEFAULT NULL COMMENT '接口执行备注',
  `create_auth` varchar(50) NOT NULL COMMENT '接口创建者',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

INSERT  INTO `case`(`module_name`,`request`,`url`,`sign`,`headers`,`body`,`run_notes`,`create_auth`,`create_time`,`update_time`) VALUES 
('get登录测试','get','http://127.0.0.1:7777/get_mysql_data_login',0,'{\"Content-Type\": \"application/json\"}','{\"loginId\": \"TerryJay\", \"password\": \"admin123\"}',NULL,'TerryJay',NOW(),NOW());

INSERT  INTO `case`(`module_name`,`request`,`url`,`sign`,`headers`,`body`,`run_notes`,`create_auth`,`create_time`,`update_time`) VALUES 
('post登录测试','post','http://127.0.0.1:7777/post_mysql_data_login',0,'{\"Content-Type\": \"application/x-www-form-urlencoded\"}','{\"loginId\": \"TerryJay\", \"password\": \"admin123\"}',NULL,'TerryJay',NOW(),NOW());



/*创建用户表`user`,登录接口的用户名和密码都依赖于此表的数据,以此来判断能否登录成功*/
CREATE TABLE `panda`.`account`( 
 `id` INT UNSIGNED NOT NULL AUTO_INCREMENT  COMMENT '账户id', 
 `user` VARCHAR(50) NOT NULL COMMENT '账户名', 
 `password` VARCHAR(50) NOT NULL COMMENT '密码', 
 PRIMARY KEY (`id`) 
) CHARSET=utf8;

INSERT INTO
`account`(`user`,`password`) VALUES 
('TerryJay','12345');


INSERT INTO
`account`(`user`,`password`) VALUES 
('Peppa','66666');


INSERT INTO
`account`(`user`,`password`) VALUES 
('panda','10086');


INSERT INTO
`account`(`user`,`password`) VALUES 
('panda','12345');

 

-----以上脚本执行成功后,可以看到account表的数据是这样子的:

 

3. mysql访问器的代码实现 [ 运行前请确保mysql服务正常运行且数据已插入成功 ]
# -*- coding: utf-8 -*-
"""
@version: 1.0
@author: TerryJay 
@license: Apache Licence 2.0
@file: panda_connect_mysql.py
@time: 2018/6/1 22:14
"""
import mysql.connector as my_connector
import sys


class SQL(object):
	def __init__(self, **panda_config):
		self.cnx = None
		self.cursor = None
		self.check = None
		# self.connect_config = panda_config
		if panda_config == {}:
			self.panda_config = {
				'user': 'root',
				'password': 'TerryJay123',
				'host': '127.0.0.1',
				'port': '3306',
				'database': 'panda',
				'charset': 'utf8',
				'raise_on_warnings': True,
				# 'raw': True
			}
		else:
			self.panda_config = panda_config
			print(self.panda_config)




	# 创建数据库游标,用它来执行增删改查等操作
	def create_connect(self):
		try:
			self.cnx = my_connector.connect(**self.panda_config)
			self.cursor = self.cnx.cursor()

		except my_connector.Error:
			print('\033[1;35;47m', '骚年,你的SQL连接参数错了 ~~(╬▔▽▔) ┴─┴ ︵', '\033[0m')
			sys.exit()
		else:
			return self.cursor





	# 查询多个,返回多个 [以二维数组 list类型返回]
	def sql_select_all(self, sql_script):

		a = self.create_connect()
		a.execute(sql_script)

		# 使用fetchall()直接获取所有execute结果作为一个list
		all_row = a.fetchall()

		if all_row:
			return all_row
		else:
			self.check = False

		# 关闭游标
		a.close()
		# 关闭数据库连接
		self.cnx.close()

	# 查询单个,返回单个 [以数组 tuple类型返回]
	def sql_select_one(self, sql_script):
		a = self.create_connect()
		# print(self.DATA)
		a.execute(sql_script)

		one_row = a.fetchone()
		if one_row:
			return one_row

		else:
			self.check = False

		# 关闭游标
		a.close()
		# 关闭数据库连接
		self.cnx.close()


if __name__ == '__main__':

	# 可以将数据库连接参数config 以传参的方式放入SQL类,它将以你指定的config来连接MySQL,避免了每次都找SQL类去手动改默认参数panda_config

	# 下面是一个自定义的连接参数示例
	# config = {
	# 	'user': 'root',
	# 	'password': 'TerryJay123',
	# 	'host': '127.0.0.1',
	# 	'port': '3306',
	# 	'database': 'panda',
	# 	'charset': 'utf8',
	# 	'raise_on_warnings': True,
	# }
	#
	# sql = " SELECT * FROM `account` WHERE `user`='panda'"
	# test = SQL(**config)

	""" 组件测试:访问器读取mysql的指定数据是否正常 """
	sql = " SELECT * FROM `account` WHERE `user`='panda'"
	test = SQL()

	# 只返回第一条(就算有多个符合条件的数据,也只返回第一条)
	print('单条用户数据查询:', test.sql_select_one(sql))

	# 返回全部符合where条件的结果
	print('多条用户数据查询:', test.sql_select_all(sql))

 

执行结果

单条用户数据查询: (3, 'panda', '10086')
多条用户数据查询: [(3, 'panda', '10086'), (4, 'panda', '12345')]

 

4. 再创建一个简单的http请求发起组件,仅2个方法
# -*- coding: utf-8 -*-
"""
@version: 1.0
@author: TerryJay 
@license: Apache Licence 2.0
@file: panda_http_request.py
@time: 2018/6/2 22:22
"""

import requests


# get请求方法
def auto_get(get_url, get_body, get_headers):
	panda_get = requests.get(url=get_url, params=get_body, headers=get_headers)
	return panda_get.json()


# post请求方法
def auto_post(post_url, post_data, get_headers):

	# 将传入的3个参数组装成一个完整的请求
	panda_post = requests.post(url=post_url, params=post_data, headers=get_headers)
	return panda_post.json()
	
"""
本组件留作下一章教程里的【run组件】调用,敬请期待~
"""

 

传送门:渐入佳境——python接口自动化测试之登录接口的测试实战(4)

版权归作者@TerryJay所有,转载请注明出处

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
、 开发环境................................................................................................................................................................... 1 2、 大致流程................................................................................................................................................................... 2 3、 框架简介................................................................................................................................................................... 2 4、 运行结果展示 ........................................................................................................................................................... 3 5、 文件与配置............................................................................................................................................................... 3 6、 测试接口样例 ........................................................................................................................................................... 4  1.登陆接口................................................................................................................................................................... 4  2.支付密码更改接口 ................................................................................................................................................... 6 7、 数据库设计............................................................................................................................................................... 7 8、 测试用例、测试数据准备 ....................................................................................................................................... 8 9、 模块与类、函数设计 ............................................................................................................................................. 10 10、 代码实现............................................................................................................................................................. 10

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木法星人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值