先回顾一下 Tutorial 2的代码:
import random
import string
import cherrypy
class StringGenerator(object):
@cherrypy.expose
def index(self):
return "Hello world!"
@cherrypy.expose
def generate(self):
return ''.join(random.sample(string.hexdigits, 8))
if __name__ == '__main__':
cherrypy.quickstart(StringGenerator())
将内容保存到 tut12.py文件中
现在开始写测试代码:
import cherrypy
from cherrypy.test import helper
from tut12 import StringGenerator
class SimpleCPTest(helper.CPWebCase):
@staticmethod
def setup_server():
cherrypy.tree.mount(StringGenerator(), '/', {})
def test_index(self):
self.getPage("/")
self.assertStatus('200 OK')
def test_generate(self):
self.getPage("/generate")
self.assertStatus('200 OK')
将内容保存到test_tut12.py文件中。然后运行:
$ pytest -v test_tut12.py
注意:你需要先安装pytest. 执行命令:sudo pip3 install pytest
我们现在有一个简洁的方法,我们可以进行我们的应用程序制作测试。
要获得代码覆盖率,只需运行即可
$ pytest --cov=tut12 --cov-report term-missing test_tut12.py
注意,需要先安装pytest, 执行命令sudo pip3 install pytest-cov
这告诉我们缺少一行。当然这是因为只有在直接启动python程序时才会执行。我们可以简单地更改tut12.py中的以下行:
if __name__ == '__main__': # pragma: no cover
cherrypy.quickstart(StringGenerator())
当您重新运行代码覆盖率时,它现在应该显示100%。
在CI中使用时,您可能希望将Codecov,Landscape或Coverall集成到项目中,以便随时间存储和跟踪覆盖率数据。