热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pythonmysql单元测试_Python接口测试之对MySQL/unittest框架/Requests的操作

单元测试支持测试自动化、共享的安装程序和关闭代码测试、聚合成集合,测试和报告框架从测试的独立性。单元测试模块提供可以很容易地支持这些素质的一组测试的类。关于unitt

单元测试支持测试自动化、共享的安装程序和关闭代码测试、

聚合成集合,测试和报告框架从测试的独立性。单元测试模块提供可以很容易地支持这些素质的一组测试的类。关于unittest

测试框架建议可以到官方查看详细的说明以及演示的实例。unittest各个模块的关系为:

#!/usr/bin/env python

#coding:utf-8

import unittest

class TestDiv(unittest.TestCase):

def setUp(self):

pass

def tearDown(self):

pass

def test_001(self):

self.assertEqual(div(1,1),1)

def test_002(self):

self.assertRaises(ZeroDivisionError,div,1,0)

if __name__=='__main__':

unittest.main(verbosity=2)

最常使用的分别有GET,PUT,DELETE,POST,通过request库也是可以实现

的,见如下的代码:

在python的命令行环境下

看是否可以导入MySQLdb,如果可以导入并且无任何的错误提示,表示已经安装成功了,见截图:

已经很成功的安装了python操作mysql的数据库,在这里,我们详细的介绍对python对mysql的增加,删除,修改

和查询的基本操作,这里使用的数据库名称是“day2017”,我们对数据库的操作,首先是创建数据库,然后是在数据库中

创建表,在这里,表的名称为:userInfo,见创建好的表字段信息:

OK,创建好数据库以及创建好了数据库中的表以后,下来开始操作数据库,操作数据库的第一步当然是连接数据库,然后是

创建游标,接下来是对数据库的各种操作,这里我们先来操作Insert数据的操作,见实现的代码:

#!/usr/bin/env python

#coding:utf-8

import MySQLdb

def insert_One():

'''插入一条数据'''

try:

conn=MySQLdb.connect(host='127.0.0.1',user='root',passwd='server',db='day2017')

except:

print u'连接mysql数据库失败'

else:

cur = conn.cursor()

sql = 'INSERT INTO userInfo VALUES (%s,%s,%s,%s)'

params = (1, 'admin', 'admin', 'wuya@outlook.com',)

cur.execute(sql, params)

conn.commit()

finally:

cur.close()

conn.close()

if __name__=='__main__':

insert_One()

查看数据库,可以看到,数据已经插入到数据库中,见查询的结果:

在上面的案例中,只是插入了单条数据,实际上,某些时候,会插入多条数据,也就是批量插入,批量插入实现的代码为:

def insert_Many():

'''批量插入数据'''

try:

conn=MySQLdb.connect(host='127.0.0.1',user='root',passwd='server',db='day2017')

except:

print u'连接mysql数据库失败'

else:

cur = conn.cursor()

sql = 'INSERT INTO userInfo VALUES (%s,%s,%s,%s)'

params = [

(2,'wuya','admin','wuya@outlook.com'),

(3,'weke','admin','weke@outlook.com')

]

cur.executemany(sql, params)

conn.commit()

finally:

cur.close()

conn.close()

if __name__=='__main__':

insert_Many()

接下来,我们来查看数据库的查询,数据查询分为二种,一种是查询的结果是一条语句,使用的是fetchone()方法,另外一种是查询的数据

结果是多条,使用的方法是fetchmany(),我们分别来看这二个方法的使用,我们先来看单条数据的查询,见实现的代码:

import MySQLdb

def select_one():

'''单条数据的查询'''

try:

conn=MySQLdb.connect(host='127.0.0.1',user='root',passwd='server',db='day2017')

except:

print u'连接mysql数据库失败'

else:

cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

sql = 'select * from userInfo where id=%s'

params = (1,)

data=cur.execute(sql, params)

print cur.fetchone()

conn.commit()

finally:

cur.close()

conn.close()

if __name__=='__main__':

select_one()

多条数据的查询,见实现的代码:

import MySQLdb

def select_Many():

'''多条数据的查询'''

try:

conn=MySQLdb.connect(host='127.0.0.1',user='root',passwd='server',db='day2017')

except:

print u'连接mysql数据库失败'

else:

cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

sql = 'select * from userInfo'

ret=cur.execute(sql)

data=cur.fetchall()

for item in data:

print item

finally:

cur.close()

conn.close()

if __name__=='__main__':

select_Many()

下面我们来看更新语句的测试,见实现的代码:

import MySQLdb

def update_Test():

'''更新语句测试'''

try:

conn=MySQLdb.connect(host='127.0.0.1',user='root',passwd='server',db='day2017')

except:

print u'连接mysql数据库失败'

else:

cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

sql = 'update userInfo set username=%s where id=%s'

params=('system',1,)

ret=cur.execute(sql,params)

conn.commit()

finally:

cur.close()

conn.close()

if __name__=='__main__':

update_Test()

最后一步,也就是删除数据了,直接看如下的实现代码:

import MySQLdb

def delete_Test():

'''删除语句测试'''

try:

conn=MySQLdb.connect(host='127.0.0.1',user='root',passwd='server',db='day2017')

except:

print u'连接mysql数据库失败'

else:

cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

sql = 'delete from userInfo where id=%s'

params=(3,)

ret=cur.execute(sql,params)

conn.commit()

finally:

cur.close()

conn.close()

if __name__=='__main__':

delete_Test()

事实上,对于如上操作数据库的方式,有很多的代码是可以重够的,比如连接数据库的方式,另外,我们可以把操作数据库的

方式写在一个类里面,在业务调用的时候直接调用我们的数据库方法进行操作,见下面操作mysql数据库的方法,见源码:

#!/usr/bin/env python

#coding:utf-8

import MySQLdb

class MySQLHelper(object):

def __init__(self):

pass

def get_one(self,sql,params):

conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='server',db='day2017')

cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

retCount = cur.execute(sql,params)

data = cur.fetchone()

cur.close()

conn.close()

return data

def get_many(self,sql,params):

conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='server',db='day2017')

cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

retCount = cur.execute(sql,params)

data = cur.fetchall()

cur.close()

conn.close()

return data

def insert_one(self,sql,params):

conn = MySQLdb.connect(host='127.0.0.1', user='root', passwd='server', db='day2017')

cur = conn.cursor()

cur.execute(sql, params)

conn.commit()

cur.close()

return u'插入数据库成功'

def insert_many(self,sql,params):

conn = MySQLdb.connect(host='127.0.0.1', user='root', passwd='server', db='day2017')

cur = conn.cursor()

cur.executemany(sql, params)

conn.commit()

cur.close()

return u'批量插入数据库成功'

def update_one(self,sql,params):

conn = MySQLdb.connect(host='127.0.0.1', user='root', passwd='server', db='day2017')

cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

ret = cur.execute(sql, params)

conn.commit()

cur.close()

conn.close()

return u'更新数据库成功'

def delete_one(self,sql,params):

conn = MySQLdb.connect(host='127.0.0.1', user='root', passwd='server', db='day2017')

cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

ret = cur.execute(sql, params)

conn.commit()

cur.close()

conn.close()

return u'删除数据库成功'

把连接数据库部分进行重构,放到一个config.py的文件中,这样我们连接数据库的方法就只需要在config.py文件维护了,而不

需要在如上代码中每个都得看的修改,这实在是很糟糕,见重构后的config.py文件源码:

#!/usr/bin/env python

#coding:utf-8

conn_dict=dict(host='127.0.0.1', user='root', passwd='server', db='day2017')

见重构后操作mysql的数据库方法,见源码:

#!/usr/bin/env python

#coding:utf-8

import MySQLdb

import config

class MySQLHelper(object):

def __init__(self):

self.conn=config.conn_dict

def get_one(self,sql,params):

conn = MySQLdb.connect(**self.conn)

cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

retCount = cur.execute(sql,params)

data = cur.fetchone()

cur.close()

conn.close()

return data

def get_many(self,sql,params):

conn = MySQLdb.connect(**self.conn)

cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

retCount = cur.execute(sql,params)

data = cur.fetchall()

cur.close()

conn.close()

return data

def insert_one(self,sql,params):

conn = MySQLdb.connect(**self.conn)

cur = conn.cursor()

cur.execute(sql, params)

conn.commit()

cur.close()

return u'插入数据库成功'

def insert_many(self,sql,params):

conn = MySQLdb.connect(**self.conn)

cur = conn.cursor()

cur.executemany(sql, params)

conn.commit()

cur.close()

return u'批量插入数据库成功'

def update_one(self,sql,params):

conn = MySQLdb.connect(**self.conn)

cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

ret = cur.execute(sql, params)

conn.commit()

cur.close()

conn.close()

return u'更新数据库成功'

def delete_one(self,sql,params):

conn = MySQLdb.connect(**self.conn)

cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

ret = cur.execute(sql, params)

conn.commit()

cur.close()

conn.close()

return u'删除数据库成功'

写数据库的操作方法,是为了进行对业务的操作,要不仅仅写这些没什么实际的意义,如我们实现输入用户名和密码,在

在数据库中验证,如果用户名和密码都是admin,那么通过,如果有其中一个不是admin,就提示用户,请提示用户用户名

或者密码错误,下面来实现这样的一个过程,见实现的源码:

#!/usr/bin/env python

#coding:utf-8

import MySQLdb

import config

class MySQLHelper(object):

def __init__(self):

self.conn=config.conn_dict

def get_one(self,sql,params):

conn = MySQLdb.connect(**self.conn)

cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

retCount = cur.execute(sql,params)

data = cur.fetchone()

cur.close()

conn.close()

return data

def get_many(self,sql,params):

conn = MySQLdb.connect(**self.conn)

cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

retCount = cur.execute(sql,params)

data = cur.fetchall()

cur.close()

conn.close()

return data

def insert_one(self,sql,params):

conn = MySQLdb.connect(**self.conn)

cur = conn.cursor()

cur.execute(sql, params)

conn.commit()

cur.close()

return u'插入数据库成功'

def insert_many(self,sql,params):

conn = MySQLdb.connect(**self.conn)

cur = conn.cursor()

cur.executemany(sql, params)

conn.commit()

cur.close()

return u'批量插入数据库成功'

def update_one(self,sql,params):

conn = MySQLdb.connect(**self.conn)

cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

ret = cur.execute(sql, params)

conn.commit()

cur.close()

conn.close()

return u'更新数据库成功'

def delete_one(self,sql,params):

conn = MySQLdb.connect(**self.conn)

cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

ret = cur.execute(sql, params)

conn.commit()

cur.close()

conn.close()

return u'删除数据库成功'

class CheckUserInfo(object):

def __init__(self):

self.__helper=MySQLHelper()

def checkValid(self,username,password):

sql='select * from userInfo where username=%s and password=%s'

params=(username,password)

return self.__helper.get_one(sql,params)

def info():

username=raw_input(u'请输入你的用户名:\n')

password=raw_input(u'请输入你的密码:\n')

userInfo=CheckUserInfo()

result=userInfo.checkValid(username,password)

if not result:

print u'用户名或者密码错误,请联系管理员'

else:

print u'恭喜您,输入正确!'

if __name__=='__main__':

info()



推荐阅读
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
author-avatar
猫猫爱妞_462
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有