DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。自动化测试是devops中的一个不可或缺的环节,fastAPI框架由于是基于Starlette, 而Starlette中集成了pytest这个测试框架,所以在FastAPI框架中实现自动化测试是一个很方便的事情。本文地址:http://www.04007.cn/article/963.html,未经许可,不得转载.
只需要引入TestClient直接使用即可。可以从fastapi中引入,也可以从starlette引入,简单示例如下:本文地址:http://www.04007.cn/article/963.html,未经许可,不得转载.
#fastapi框架中的方法 from fastapi import FastAPI app = FastAPI() @app.get("/") async def read_main(): return {"msg": "Hello World"} #测试部分代码 #引入:Create a TestClient passing to it your FastAPI. #from starlette.testclient import TestClient from fastapi.testclient import TestClient client = TestClient(app) #Create functions with a name that starts with test_ (this is standard pytest conventions). def test_read_main(): #Use the TestClient object the same way as you do with requests. response = client.get("/") #Write simple assert statements with the standard Python expressions that you need to check (again, standard pytest). assert response.status_code == 200 assert response.json() == {"msg": "Hello World"} assert "msg" in response.json()本文地址:http://www.04007.cn/article/963.html,未经许可,不得转载.
如上示例,我们在fastAPI框架的main文件中引入了TestClient,传入app得到client,然后创建一个以test_开头的方法,在方法中使用client.get方法调用接口,对接口的返回http状态及返回结果字段、字段内容进行判断即可实现接口响应验证。当然这样写只是为了验证功能可用,实际业务中不可能将这些代码写到main.py文件中,并且模块众多,也不会将所有的方法写在一起。经过我试验测试,有一个比较好的方法实现。只需要在main.py同目录下(试验发现这点是必须的)创建一个main_test.py,代码内容如下:本文地址:http://www.04007.cn/article/963.html,未经许可,不得转载.
#引入app并实例化TestClient. from fastapi.testclient import TestClient from main import app client = TestClient(app)本文地址:http://www.04007.cn/article/963.html,未经许可,不得转载.
然后在项目的任何位置建立一个tests测试文件夹(名称随意),里面建议各种test_开关或者_test结尾文件名的py文件,实现上面的测试部分代码即可在命令行使用pytest测试所有测试项。运行后会检测各个test_类文件中的方法,一个方法就是一个item,收集到所有的item然后逐一测试,文件名后面的一个点就是完成了一个方法,如果有问题就会报F并终止测试,assert断言可以判断整体结果,实际业务中更多的是通过in判断字段存不存在。对于一些需要登录类的接口,可以通过方法实现获取登录的token或者账号数据来登录。测试结果示例如下:本文地址:http://www.04007.cn/article/963.html,未经许可,不得转载.
$ pytest ================ test session starts ================ platform linux -- Python 3.6.9, pytest-5.3.5, py-1.8.1, pluggy-0.13.1 rootdir: /home/user/code/superawesome-cli/app plugins: forked-1.1.3, xdist-1.31.0, cov-2.8.1 collected 6 items test_main.py ...... [100%] ================= 6 passed in 0.03s =================本文地址:http://www.04007.cn/article/963.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/963.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |