背景:
1,无论是功能测试还是性能测试的造数据,如果逻辑简单可以使用存储过程进行造数据,如果业务复杂可以使用接口进行造数据,但是如果逻辑不是很简单也不是很复杂,那么你该选择哪个呢?别担心,还有第三种选择方式,那就是使用python连接操作,可适用于逻辑结构一般的业务。
2,前端的测试可能只需要去一张表里面查看落库是否正常就可以,但是服务端的测试,就有很多的清表操作,数据同步,数据复制,其中要测的数据小则几百行,多则几万行,而且每张表都有几十上百个字段,使用人眼进行对数据,显然不现实,一般我们都使用代码测,测得正确,测得全,且节省了人力。
目的:
使用python+pymysql帮助我们进行功能/性能造数和对后端服务进行数据测试做前置准备。
前提条件
安装yaml: pip install pyyaml
安装pyMysql: pip install PyMySQL
1,设置yaml
yaml的语法是key: value这种键值对的形式,Map(属性和值),注:冒号后面要加空格
第一种语法:
换行表示对象的属性
user:
username: 江云
userSex: 男
第二种语法:
使用-代表数组,--代表数组里面的数组
users:
-user1
--阿江
--小江
-user2
第三种语法
users: [suer1,user2,user3]
以下为第一种
代码如下
mysql1:
host: 127.0.0.1
port: 3306
user: admin
password: admin
database: database
charset: 'utf8'
mysql2:
host: 127.0.0.1
port: 3306
user: admin1
password: admin1
database: database
charset: 'utf8'
2,连接mysql
①使用with open打开yaml的mysql配置或者自己封装的打开方式
②把yaml上的配置赋值给设置的属性,分别有host地址,账户密码,端口(对于端口号,默认的是3306,但是企业的所有mysql端口都会进行修改,不然容易端口冲突),具体的库(如果设置了哪个库就只能查哪个库),还有编码格式。
具体代码如下
from RequestUnittestDDT.util import operat_config
def getMysql():
#read_yaml_all为自定义方法,可直接使用with open打开文件
cfg = operat_config.read_yaml_all('config/mysql.yaml')
mysql_host = cfg["mysql1"]["host"]
mysql_user = cfg["mysql1"]["user"]
mysql_password = cfg["mysql1"]["password"]
mysql_port = cfg["mysql1"]["port"]
mysql_db = cfg["mysql1"]["database"]
mysql_charset = cfg["mysql1"]["charset"]
mysql = pymysql.connect(host=mysql_host,
user=mysql_user,
password=mysql_password,
port=mysql_port,
db=mysql_db,
charset=mysql_charset)
return mysql
if __name__ == '__main__':
getMysql()
3,进行sql操作(增删改查)
要执行sql,首先需要获取能连接的数据库和获取游标,游标用于操作sql
增删改需要进行commit提交事务,如果失败了则需要事件回滚,保证事务的完整性和一致性,
有报错也会抛出去,最后关闭游标关闭数据库连接
from RequestUnittestDDT.mysql.connect_mysql import getMysql
class OperatMysql():
def __init__(self):
self.mysql = getMysql()
self.cursor = self.mysql.cursor()
'''此方法用于查询数据库'''
def query_all(self,sql):
try:
self.cursor.execute(sql)
mysql_data = self.cursor.fetchall()
print('查询成功')
return mysql_data
except Exception as e:
print("查询失败,失败原因为:", e)
finally:
self.cursor.close()
self.mysql.close()
'''此方法为更新表内容'''
def update(self,sql):
try:
self.cursor.execute(sql)
except Exception as e:
print("更新表失败,失败原因为:", e)
self.mysql.rollback()
print("内容已回滚")
else:
self.mysql.commit()
finally:
self.cursor.close()
self.mysql.close()
'''往数据库表插入内容'''
def insert(self,sql):
try:
self.cursor.execute(sql)
except Exception as e:
print("插入表失败,失败原因为:", e)
self.mysql.rollback()
print("内容已回滚")
else:
self.mysql.commit()
print('操作成功')
finally:
self.cursor.close()
self.mysql.close()
'''删除表内容的操作'''
def delete(self,sql):
try:
self.cursor.execute(sql)
except Exception as e:
print("删除操作失败,失败原因为", e)
else:
self.mysql.commit()
print("操作成功")
finally:
self.cursor.close()
self.mysql.close()
Python连接数据库篇结束,欢迎观看我主页上别的篇章