测试flask应用

来源:互联网 发布:广电网络机顶盒wifi 编辑:程序博客网 时间:2024/06/07 01:12
测试flask应用flask官方文档文档中有示例的应用,针对示例应用,编写此次测试import os import flaskrimport unittestimport tempfileclass FlaskrTestCase(unittest.TestCase):#测试函数以test开头,从而让unittest能自动识别要运行的测试方法def setUp(self):self.db_fd,flaskr.app.config['DATABASE'] = tempfile.mkstemp()flaskr.app.config['TESTING'] = Trueself.app = flaskr.app.test_client()flaskr.init_db()#此函数,通过tempfile.mkstemp()中的tempfile生成一个临时的数据库文件,同时mkstemp来生成一个随机的文件名#初始化数据库def tearDown(self):os.close(self.db_fd)os.unlink(flaskr.app.config['DATABASE'])#这个函数用来关闭以上测试打开的测试数据库文件,并在文件系统中删除它def test_empty_db(self):rv = self.app.get('/')assert 'No entries here so far' in rv.data#此函数用来测试用户未登录状态的运行情况#rv = self.app.get('/')中的get方法向服务器提交get请求,请求首页,未登录状态,页面提示信息中有‘No entries..’信息#如果存在以上信息,则服务器正确返回请求,asser True,测试通过def login(self,username,password):return self.app.post('/login',data=dict(username=username,password=password),follow_redirect=True)#添加一个登录的方法来测试登录功能,向login页面提交一个请求,附带usename和passwor#因为登录页面涉及到跳转,所以将follow_redirect设置为Truedef logout(self):return self.app.get('/logout',follow_redirect=True)#添加一个登出的方法来测试注销功能,因为登出后,页面跳转,所以将follow_redirect设置为Truedef test_login_logout(self):rv = self.login('admin','default')assert 'You were loged in ' in rv.datarv = self.logout()assert 'You were loged out' in rv.datarv = self.login('adminx','default')assert 'Invalid username' in rv.datarv = self.login('admin','defaultx')assert 'Invalid password' in rv.data#这是一个测试函数,测试程序的登录和登出功能#assert是一个断言函数,用来检验某个条件是否为真,如果不是则抛出错误#第一个rv传入正确的用户名和密码,页面跳转以后,如果页面中有‘You were loged in’,则assert(断言)为真#第二个rv用来测试程序的登出功能,如果点击登出后,页面中有'Your were loged out',则assert(断言)为真#第三。四个断言,分别传入错误的用户名adminx和错误的密码defaultx来测试登录功能if __name__ == '__main__':unittest.main()测试消息的添加接下来添加一个新的测试方法来测试消息的添加功能def test_message(self):self.login('admin','default')rv = self.app.post('/add',data=dict(title='<Hello>',text='<strong>HTML</strong>allowed here'),follow_redirect=True)assert 'No entries here so far' not in rv.dataassert '<Hello>' in rv.dataassert '<strong>HTML</strong>allowed here' in rv.data#此方法通过登录一个账户,向add路由添加post一组数据,然后分别通过assert断言来测试#程序是否真正常运行,其中第一个aassert来判定用户是否登录,其余两个assert来#判定用户是不是正确提交了数据其他测试技巧除了以上的测试方法外,也有一个test_request_context()方法可以配合with语句用于激活一个临时的请求上下文。通过他,可以访问request、g、session类的对象,就像在试图中一个。示例app = flask.Flask(__name__)with app.test_request_context('/?name=Perter'):assert flask.request.path == '/'assert flask.request.args['name'] == 'Peter'所有其他的和上下文绑定的对象都可以使用同样的方法访问。