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

聚合成集合,测试和报告框架从测试的独立性。单元测试模块提供可以很容易地支持这些素质的一组测试的类。关于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()

Python接口测试之对MySQL/unittest框架/Requests 的操作的更多相关文章

  1. 【python接口自动化】初识unittest框架

    本文将介绍单元测试的基础版及使用unittest框架的单元测试. 完成以下需求的代码编写,并实现单元测试 账号正确,密码正确,返回{"msg":"账号密码正确,登录成功& ...

  2. Python接口测试之对MySQL的操作(六)

    本文章主要来说python对mysql数据库的基本操作,当然,前提是已经搭建了python环境和搭建了Mysql 数据库的环境,python操作mysql数据库提供了MySQLdb库,下载的地址为: ...

  3. python接口测试之mock(二)

    上一篇对mock-server已经做了初步的介绍,今天这里继续接着之前的介绍进行,我们先看之前的mock-server部分,之前编写了一个登录的mock,具体json文件见如下的内容: 小王子1110 ...

  4. Python接口测试之unittest框架(五)

    Test-driven development(TDD)开发模式在今天已经不是什么新奇的事了,它的开发思维是在开发一个产品功能的时候,先 编写好该功能的测试代码,在编写开发比如,比如要写二个数相除的函 ...

  5. Python接口测试之moco

    在现在的软件开发过程中,特别是app的部分,需要的很多数据以及内容,都是来自server端的API,但是不能保证 在客户端开发的时候,api在server端已经开发完成,专门等着前端来调用,理想的情况 ...

  6. python接口测试之requests库(一)

    一.requests库的安装 requests库作为第三方库,需要安装 cmd模式下,运行pip install requests 二.在学习如何发送请求之前,我们先来了解一下requests库,查看 ...

  7. Python接口测试之封装requests

    首先安装requests库: pip install requests test_requests.py 首先在TestRequest类中封装get与post方法, import requests i ...

  8. python接口测试之新手篇

    嗨,大家好,我是小白,好久没写博客了,最近公司搞什么python的接口测试,心里一阵狂喜,在公司上百个接口里拿出一个主要接口一顿乱搞,好在搞通了 但是在这过程中也碰到了好多的问题,决定将问题分享出来能 ...

  9. python接口测试之mock(三)

    前面介绍了moco的详细的使用,它主要是基于moco-runner-0.11.0-standalone.jar,通过编写json的文件来实现,mock翻译过来就是模拟的意思,也就是说,它是将测试对象所 ...

随机推荐

  1. mysql大小写敏感(默认为1,不敏感)

    在 MySQL 中,数据库和表其实就是数据目录下的目录和文件,因而,操作系统的敏感性决定数据库和表命名的大小写敏感.这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Un ...

  2. Aandroid 图片加载库Glide 实战(一),初始,加载进阶到实践

    原文: http://blog.csdn.net/sk719887916/article/details/39989293 skay 初识Glide 为何使用 Glide? 有经验的 Android ...

  3. linux下shell中执行命令的顺序问题

    在shell中有很多种命令的同义词,到底先执行的是哪一个命令呢,我们可以借助type -a命令来检查. 为了测试我们就对type本身做一条alias: alias type=type 然后我们通过ty ...

  4. mybatis 开发环境搭建

    不说废话直接上代码,首先看下我的目录机构: 红色部分,表明你所需的jar包,已经配置文件. 创建用户表,以及插入数据. create table books(id int (11) not null ...

  5. rails中validates_confirmation_of验证方法无效的解决办法

    rails的model中提供了很多种自带的验证方法,validates_confirmation_of可以验证变量xxx和xxx_confirmation是否相等:这可以用于验证2遍输入的密码是否一致 ...

  6. Windows7安装Pygame软件

    1. 工具包下载地址: Python下载地址: https://www.python.org/downloads/ pip下载地址:https://pypi.org/project/pip/#file ...

  7. Fullpage参数说明

    参数说明 $(document).ready(function() { $('#fullpage').fullpage({ //Navigation menu: false,//绑定菜单,设定的相关属 ...

  8. miniUI input设置默认值,js获取年月注意事项,数据库nvl函数使用

    2017-6-5周一,今天碰到的一个需求是:两税附征模块进入页面筛选时间默认值为当前月的上一个月,并根据筛选结果显示数据,我们用的框架为miniUI. 坑1: 默认值设置,刚刚接触miniUI,对里面 ...

  9. CSS 文章链接

    文本溢出显示为省略号 Ellipsis for text overflow in table cell?

  10. java并发容器(Map、List、BlockingQueue)

    转发: 大海巨浪 Java库本身就有多种线程安全的容器和同步工具,其中同步容器包括两部分:一个是Vector和Hashtable.另外还有JDK1.2中加入的同步包装类,这些类都是由Collectio ...