Flask Web 开发 测试
来源:互联网 发布:sql server 2008教材 编辑:程序博客网 时间:2024/05/19 22:57
国庆节沦陷在RESTFUL API这个章节里了。。。横竖没看懂
后来请教了其他筒子关于REST API的概念,少许有些理解,就是主要集中在资源的获取上,同样的资源格式,比如JSON,可以提供给不同的终端使用。
打个比方,知乎的网页版,和APP版,虽然显示的方式截然不同,但是,他获取的资源是一毛一样的。
就不多说了。。。先继续往下看测试这章吧
先前在其他前辈的技术文章里就看到过测试覆盖率啊这些的词语,这个章节,就会真正接触到了
首先,他用到的库是coverage库,老样子,先下载,pip install coverage
我们之前在第7章,已经为测试准备了专门的test命令
这里需要扩展一下,给他提供额外的参数,test后面加--coverage参数,如何做到呢
就是在test函数里面进行添加
进入manage.py的文件,分别在文件头添加命令,并更新test函数
#!/usr/bin/env pythonimport osCOV = Noneif os.environ.get('FLASK_COVERAGE'):import coverageCOV = coverage.coverage(branch=True, include='app/*')COV.start()
@manager.commanddef test(coverage=False): """Run the unit tests.""" if coverage and not os.environ.get('FLASK_COVERAGE'): import sys os.environ['FLASK_COVERAGE'] = '1' os.execvp(sys.executable, [sys.executable] + sys.argv) import unittest tests = unittest.TestLoader().discover('tests') unittest.TextTestRunner(verbosity=2).run(tests) if COV: COV.stop() COV.save() print('Coverage Summary:') COV.report() basedir = os.path.abspath(os.path.dirname(__file__)) covdir = os.path.join(basedir, 'tmp/coverage') COV.html_report(directory=covdir) print('HTML version: file://%s/index.html' % covdir) COV.erase()
这里的代码里面有新功能,需要分步讲解下
主要就是os.execvp和sys.executable,还有sys.agrv这3部分
os.execvp是替换新进程的命令,在这里,我感觉是重新启动程序的意思
我们先来看下sys.argv这个函数的作用
sys.argv实际上是一个列表形式,他的[0]代表的是当前执行文件的名字,从[1]开始,则是代表这个执行文件后面跟着的命令参数
我做了如下测试
可以看到,打印出来的,就是我当前文件的名字
我在把下面的注释去掉,并在执行命令时随意在后面添加参数,可以看到,我就能打印出后面的命令参数了
随后来看sys.executable这个功能,他实际上是打印出当前python解释器的位置的路径
而关于os.execvp这个函数功能,有点略复杂
先来看官方文档的解释
os.execvp(file,args)
这个功能是什么意思呢?
file就是执行的文件,args就是后面跟随的参数,这个file和args最后等于是你输入在命令行里面的命令
打个比方,我在c:\\flasky\\test.py有个这样路径的文件, test.py 文件内容是
print ('Just for test')
那我再命令行可以这样输
正如我们上面提到的sys.executable表示的是当前python解释器的位置
所以,你在命令行,输入python和输入解释器的完整路径,作用其实是一样的!
后面对应的文件也是,你可以输入完整路径,也可以直接输入文件名,因为他会按照环境PATH来搜索
python解释器也是,他也会按照环境PATH来搜索,由于现在是出于虚拟环境下,所以他会优先搜索到虚拟环境下的python.exe
对于我们测试程序里面的
os.execvp(sys.executable, [sys.executable] + sys.argv)
我就自己编了个简单的程序one.py来进行测试
他先判断环境变量FLASKY_TEST是否有,如果没有的话,
1: 设置一下这个环境变量
2: 打印一下当前python解释器位置
3: 重开新进程,执行同目录下的two.py文件
而two.py的内容是
所以,他打印出的结果如下图
这样,就os.execvp函数,就比较理解了
另外自己又做了个测试,对于os.execvp(file,args)里面args的第一个参数,虽然官方说args第一个参数应该是等于新file的名字
但是,其实他随便写什么(只要不带空格,我怀疑他源码里面执行时候是用过split函数的),都可以执行,我自己做了如下测试
绕绕绕了一大圈,回到书上章节里面的内容
运行manage.py文件时,他会预先检查环境变量是否存在
import osCOV = Noneif os.environ.get('FLASK_COVERAGE'): import coverage COV = coverage.coverage(branch=True, include='app/*') COV.start()
如果存在的话,则引入coverage功能,并开始覆盖率检查
不过,正常开始时候,我们环境变量里面应该是没有这个变量值的
所以,在下面的command命令test里面,他加入了参数用来添加环境变量
并在添加完以后,重新执行当前文件,再次执行后,由于已经有环境变量了,所他会开始覆盖率检查
结果如下
在tmp文件夹下面,会针对每个不同的文件,会有单独的html文件生成
- Flask Web 开发 测试
- Flask Web开发
- flask-web开发扩展
- flask web开发
- Flask Web 开发 数据库
- Flask Web开发选型
- Flask Web服务开发
- Flask Web开发 备忘
- Flask Web开发--前言
- Flask Web开发 表单
- Flask Web 开发 web表单
- Flask web 开发--web表单
- 《flask web开发》第六章flask-mail
- 《flask web开发》笔记一
- 《Flask Web开发》书中一处错误
- python和flask,web开发
- Flask Web开发 读书笔记 0
- Flask web 开发 Jinja2 模板
- iTunes Connect—— 应用上架过程中App状态指南
- 1.ReactiveX - 什么是Rx,Rx的理念和优势
- 第七周-项目五-排队看病模拟
- C++namespace
- 区块链:起源、原理及应用
- Flask Web 开发 测试
- Android横竖屏切换导致Actvivty生命周期变化和解决方法
- Leetcode 121. Best Time to Buy and Sell Stock 股票买卖 解题报告
- 237. Delete Node in a Linked List
- Unix网络编程之epoll函数模拟10万客户端链接服务器
- 自己写的贪吃蛇(3)
- iOS 推送 逻辑
- js判断来路是否是百度等搜索索引进行弹窗或自动跳转
- DocX.dll(无需安装OFFICE操作word文档)