zoukankan      html  css  js  c++  java
  • 【简说Python WEB】Flask应用的单元测试

    【简说Python WEB】Flask应用的单元测试

    tests/test_basics.py

    import unittest
    from flask import current_app
    from app import create_app, db
    
    
    class BasicsTestCase(unittest.TestCase):
        def setUp(self):
            self.app = create_app('testing')
            self.app_context = self.app.app_context()
            self.app_context.push()
            db.create_all
        
        def tearDown(self):
            db.session.remove()
            db.drop_all()
            self.app_context.pop()
    
        def test_app_exists(self):
            self.assertFalse(current_app is None)
        
        def test_app_is_testing(self):
            self.assertTrue(current_app.config['TESTING'])
    

    这里调用unitest包,单元测试标准库。测试两个功能:

    • 测试确保应用实例是否存在。
    • 测试config配置文件是否正常。

    主应用zsdblog.py启动单元测试的命令

    @app.cli.command()
    @click.argument('test_names', nargs=-1)
    def test(test_names):
        """Run the unit tests."""
        import unittest
        if test_names:
            tests = unittest.TestLoader().loadTestsFromNames(test_names)
        else:
            tests = unittest.TestLoader().discover('tests')
        unittest.TextTestRunner(verbosity=2).run(tests)
    

    为了报错,特定修改config.py文件如下:

    #..
    class TestingConfig(Config):
        TESTING = True
        HOSTNAME = '172.30.200.252'
        DATABASE = 'zsd'
        USERNAME = 'zsd'
        PASSWORD = 'zsd'
    #    DB_URI = 'mysql+pymysql://{}:{}@{}:3306/{}?charset=utf8mb4'.format(USERNAME, PASSWORD, HO
    STNAME, DATABASE)
    #    SQLALCHEMY_DATABASE_URI = DB_URI
    

    可以看到上述的TESTING代表的tag标识。指定测试哪一个环境配置文件。

    我这里特定注释掉DB_URISQLALCHEMY_DATABASE_URI,为了单元测试报错。如下:

    启动测试:

    (zsdpy1) $ flask test    
    test_app_exists (test_basics.BasicsTestCase) ... /home/zsd/venv/zsdpy1/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py:814: UserWarning: Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. Defaulting SQLALCHEMY_DATABASE_URI to "sqlite:///:memory:".
      'Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. '
    ok
    test_app_is_testing (test_basics.BasicsTestCase) ... ok
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.024s
    
    OK
    

    'Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. '报了这个错误,修改回上述config.py文件。测试正常,如下:

    (zsdpy1) $ flask test
    test_app_exists (test_basics.BasicsTestCase) ... ok
    test_app_is_testing (test_basics.BasicsTestCase) ... ok
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.122s
    
    OK
    
  • 相关阅读:
    多线程环境下调用 HttpWebRequest 并发连接限制
    i—比 i++ 快?
    文件在不同文件系统间拷贝文件时间改变的问题
    Go websocket 聊天室demo2
    Go websocket 聊天室demo以及k8s 部署
    AcWing 1077. 皇宫看守
    AcWing 1073. 树的中心
    AcWing 1085. 不要62
    AcWing 1081 度的数量
    AcWing 1082. 数字游戏
  • 原文地址:https://www.cnblogs.com/zhangshengdong/p/12560682.html
Copyright © 2011-2022 走看看