zoukankan      html  css  js  c++  java
  • FastAPI 学习之路(三十九)对开发接口进行测试


            对于开发好的接口需要进行测试之后次才能发布。当我们在开发的时候,没有提测前,我们也要对我们自己的接口进行测试,那么FastAPI 自身也带了针对开发的接口的测试的。我们看下FastAPI官方给我们了什么样的支持呢。

            接口还是基于FastAPI 学习之路(三十七)元数据和文档 URL实现。我们看下如何测试。

    from fastapi import FastAPI
    from fastapi.testclient import TestClient
    from routers.user import usersRouter
    from routers.items import itemsRouter
    
    app = FastAPI(docs_url="/openapi",
                  redoc_url="/apidoc")
    app.include_router(usersRouter, prefix="/user", tags=['users'])
    app.include_router(itemsRouter, prefix="/items", tags=['Itmes'])
    
    client = TestClient(app)
    def test_read_main():
        response = client.get("/items/items/")
        assert response.status_code == 200
        assert response.json() == []
    if __name__=="__main__":
        test_read_main()

     其实很简单,fastapi里面有个模块,我们直接导入进来,编写用例即可。

            可是我们简单的写的,运行后只是没有报错而已。证明执行成功,但是在实际中,我们做还是不够的,我们想要看着是否执行通过。如何实现呢。

        我们可以python自带的unittest来组织测试用例。

        我们看下改造后的。

    from fastapi import FastAPI
    from fastapi.testclient import TestClient
    from routers.user import usersRouter
    from routers.items import itemsRouter
    import  unittest
    app = FastAPI(docs_url="/openapi",
                  redoc_url="/apidoc")
    app.include_router(usersRouter, prefix="/user", tags=['users'])
    app.include_router(itemsRouter, prefix="/items", tags=['Itmes'])
    
    class FastApiTest(unittest.TestCase):
        def setUp(self) -> None:
            self.client = TestClient(app)
        def tearDown(self) -> None:
            self.client=None
    
    
        def test_read_main(self):
            response = self.client.get("/items/items/")
            self.assertEqual(response.status_code,200)
            self.assertEqual(response.json(),[])
        def test_read_one(self):
            response = self.client.get("/items/items/?limit=1")
            self.assertEqual(response.status_code, 200)
            self.assertEqual(len(response.json()), 1)
    
    
    if __name__=="__main__":
        unittest.main()

        我们看下执行结果

     我们可以改造下,单独放在一个test文件中。

     改造后的测试文件

    from  main import app
    import  unittest
    from fastapi.testclient import TestClient
    
    
    class FastApiTest(unittest.TestCase):
        def setUp(self) -> None:
            self.client = TestClient(app)
    
        def tearDown(self) -> None:
            self.client = None
    
        def test_read_main(self):
            response = self.client.get("/items/items/")
            self.assertEqual(response.status_code, 200)
            self.assertEqual(response.json(), [])
    
        def test_read_one(self):
            response = self.client.get("/items/items/?limit=1")
            self.assertEqual(response.status_code, 200)
            self.assertEqual(len(response.json()), 1)
    
    
    if __name__ == "__main__":
        unittest.main()

    我们可以执行以下

    这样我们就实现了对fastapi在开发过程中的接口测试,很简单,我们也不用启动服务端。

            

    文章首发在公众号,欢迎关注。

  • 相关阅读:
    Thread--使用condition实现顺序执行
    Thread--condition
    Thread--lock,lockInterruptibly,tryLock,tryLock(long timeout, TimeUnit unit)
    Thread--线程间通信--管道
    Thread--生产者消费者假死分析
    Thread--生产者消费者
    Java--定时
    Thread--两线程交替打印
    重装系统都杀不掉的十大病毒
    常用工具
  • 原文地址:https://www.cnblogs.com/leiziv5/p/15416823.html
Copyright © 2011-2022 走看看