python项目工具封装(mysql、sendmail、requests)
一、目录创建
创建过程:创建项目project——>Python package——>Python file——>编写内容。
二、Requests使用
什么是Request请求库
python需要发起⽹络请求,在标准库中 urllib2 模块已经包含了平常我们使⽤的大多数功能,但是它的 API使用起来让人感觉不太好,大神们是闲不住的,开发了Requests模块,继承了urllib2的所有特性,支持HTTP连接保持和连接池,支持使用cookie保持会话,⽀持文件上传等,本质就是封装了urllib3模块
文档:https://docs.python-requests.org/zh_CN/latest/
安装:pip install requests
示例代码如下,
三、pymysql使用
连接MySQL配置,Python3连接MySQL5.7示例。
数据库表创建语句,
CREATE TABLE `case` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '编号',
`app` varchar(128) DEFAULT NULL COMMENT '业务应用',
`module` varchar(128) DEFAULT NULL COMMENT '模块',
`title` varchar(128) DEFAULT NULL COMMENT '用例名称',
`method` varchar(128) DEFAULT NULL COMMENT 'Http提交方法',
`url` varchar(128) DEFAULT NULL COMMENT '接口',
`run` varchar(32) DEFAULT NULL COMMENT '是否运行 yes/no',
`headers` varchar(128) DEFAULT '{}' COMMENT '请求头',
`pre_case_id` int(11) DEFAULT '-1' COMMENT '是否有前置用例id',
`pre_fields` varchar(128) DEFAULT '[]' COMMENT '前置的字段, 获取请求结果的哪个字段,用于当前case的header还是body,双&name& 替代值',
`request_body` varchar(128) DEFAULT '{}' COMMENT '请求内容,$XX用于替换',
`expect_result` varchar(1024) DEFAULT NULL COMMENT '预期结果',
`assert_type` varchar(64) DEFAULT NULL COMMENT '断言类型, 判断状态码、data内容或数组长度',
`pass` varchar(64) DEFAULT NULL COMMENT '是否通过,yes, no',
`msg` varchar(128) DEFAULT NULL COMMENT '测试用例额外描述新',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`response` text COMMENT '实际结果',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4;
插入2条记录,
INSERT INTO `case` VALUES ('1', 'xdkt', 'user', '用户登录', 'post', '/pub/api/v1/web/web_login', 'no', '{\"Content-Type\": \"application/x-www-form-urlencoded\"}', '-1', '[]', '{\"phone\": \"13111237123\", \"pwd\": \"1234123123\"}', '0', 'code', 'True', '模块:user, 标题:用户登录,断言类型:code,响应:None', '2020-07-04 12:01:25', '');
INSERT INTO `case` VALUES ('4', 'xdkt', 'order', '用户订单列表', 'get', '/user/api/v1/order/find_orders', 'yes', '{\"token\":\"$token$\"}', '1', '[{\"field\":\"token\",\"scope\":\"header\"}]', '{}', '0', 'data_json', 'True', '模块:order, 标题:用户订单列表,断言类型:data_json,响应:None', '2020-07-04 12:01:25', '');
连接信息如下,
# -*- coding: utf-8 -*-
import pymysql
from warnings import filterwarnings
# 忽略MySQL告警信息
filterwarnings("ignore", category=pymysql.Warning)
class MysqlDb:
def __init__(self):
# 创建数据库连接
self.conn = pymysql.connect(host="192.168.140.129", user="sunny", password="Sunny@123", database="djapro")
# 使用cursor方法获取操作游标,得到一个可以执行sql语句,并且操作结果作为字典返回的游标
self.cur = self.conn.cursor(cursor=pymysql.cursors.DictCursor)
def __del__(self):
# 关闭游标
self.cur.close()
# 关闭连接
self.conn.close()
def query(self, sql, state="all"):
self.cur.execute(sql)
if state == "all":
# 查询全部
data = self.cur.fetchall()
else:
# 查询单条
data = self.cur.fetchone()
return data
def execute(self, sql):
try:
# 使用execute 方法执行sql
rows = self.cur.execute(sql)
# 提交事务
self.conn.commit()
return rows
except Exception as e:
print("数据库操作异常{0}".format(e))
self.conn.rollback()
if __name__ == '__main__':
mydb = MysqlDb()
# r = mydb.query("select * from `case`") # 查询所有记录
# r = mydb.query("select * from `case` where `id` = '4'", state=1) # 查询单条
r = mydb.execute("insert into `case`(`app`) values('sunnyxxx')") # 插入一条记录
print(r)
四、发送邮件
使用Python邮件模块发送邮件。
源代码配置信息,
# -*- coding: utf-8 -*-
# @File : send_mail.py
import smtplib
from email.mime.text import MIMEText
class SendMail:
def __init__(self, mail_host):
self.mail_host= mail_host
def send(self, title, content, sender, auth_code, receivers):
message = MIMEText(content, 'html', 'utf-8')
message['From'] = "{}".format(sender)
message['To'] = ".".join(receivers)
message["Subject"] = title
try:
smtp_obj = smtplib.SMTP_SSL(self.mail_host, 465) # 启用ssl协议,端口一般是465
smtp_obj.login(sender, auth_code) # 登录
smtp_obj.sendmail(sender, receivers, message.as_string())
print("Mail 发送成功")
except Exception as e:
print(e)
if __name__ == '__main__':
mail = SendMail('smtp.sina.cn')
sender = "xxx@sina.cn"
receivers = ['26xxx@qq.com', '1xxx@qq.com']
title = "自动化测试报告"
content = """
学习课堂--学习资料
<a href="https://www.baidu.com">百度一下</a>
"""
auth_code = "xxx"
mail.send(title, content, sender, auth_code, receivers)
自此,完成了邮件发送配置。
五、整体联调
整体联调调用。