FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
完整的接口已经开发完成了,那么我们需要对接口进行但愿测试,如何做呢,本文就带着大家去实现下
我们可以先来看下,我们注册的接口的相关的文章,回忆下注册接口的代码。
FastAPI(六十六)实战开发《在线课程学习系统》接口开发--用户注册接口开发。
我们来分析下接口:
在借口的文档上面我们已经对接口做了详细的描述,我们在代码实际的开发中也可以看下那时候的代码,那么我们按照接口文档,可以进行我们的用例的设计,设计出来我们的用例需求的相关的case。
两种角色:一种是老师,一种是学生。
对长度的限制:密码和用户名都有长度要求。密码存储是md5加密。
学生有学号,有长度要求,老师是工号有长度要求,且是纯数字。
性别分男女。
年龄要大于18小于65。我们可以根据这些已知的去设计我们的用例。
用例的设计思路:
1.初始化环境
2.初始化参数
3.测试case
4.参数清理
5.环境还原。
我们看下我们最后的case。这里我只是展示了 一些主要的case,最容易出问题的case。
我们按照这个逻辑,去设计下,我们的测试用例
class FastApiTestUserCreate(unittest.TestCase): @classmethod def setUpClass(cls) -> None: ''' 初始化测试环境 :return: ''' cls.client = TestClient(app) cls.testurl = "/user/create" @classmethod def tearDownClass(cls) -> None: ''' 还原测试环境,测试url :return: ''' cls.client = None cls.testurl = '' def setUp(self) -> None: ''' 初始化参数 :return: ''' self.parame = {"username": "liwanle1i", "password": "123456", "role": "学生", "age": 19, 'studentnum': 20332} def tearDown(self) -> None: '''最后清理参数''' self.parame.clear() def test_create_user(self): '''重复的添加一个数据''' response = self.client.post(self.testurl, json=self.parame) code = response.status_code reslut = response.json() self.assertEqual(code, 200) self.assertEqual(reslut['message'], '用户名重复') self.assertEqual(reslut['code'], 100104) def test_create_user_new(self): '''添加一个新的学生''' self.parame['username'] = str(uuid.uuid1())[:9] response = self.client.post(self.testurl, json=self.parame) code = response.status_code reslut = response.json() self.assertEqual(code, 200) self.assertEqual(reslut['code'], 200) self.assertEqual(reslut['message'], 'success') def test_create_user_new_tearcher(self): '''添加一个新的教师''' self.parame['username'] = str(uuid.uuid1())[:9] self.parame['role'] = "教师" self.parame['jobnum'] = 93928 self.parame['sex'] = "女" response = self.client.post(self.testurl, json=self.parame) code = response.status_code reslut = response.json() self.assertEqual(code, 200) self.assertEqual(reslut['code'], 200) self.assertEqual(reslut['message'], 'success') def test_create_user_new_one(self): '''测试学生没有填写学籍号''' self.parame['username'] = str(uuid.uuid1())[:9] self.parame.pop("studentnum") response = self.client.post(self.testurl, json=self.parame) code = response.status_code reslut = response.json() self.assertEqual(code, 200) self.assertEqual(reslut['code'], 100102) self.assertEqual(reslut['message'], '身份和对应号不匹配') def test_create_user_new_tearcher_one(self): ''' 测试老师的工作号不填写 ''' self.parame['username'] = str(uuid.uuid1())[:9] self.parame['role'] = "教师" self.parame['sex'] = "女" response = self.client.post(self.testurl, json=self.parame) code = response.status_code reslut = response.json() self.assertEqual(code, 200) self.assertEqual(reslut['code'], 100102) self.assertEqual(reslut['message'], '身份和对应号不匹配') if __name__ == "__main__": unittest.main()
case我只是列举了一部分,当然还需要补充很多。但是这里面最重要的case场景我覆盖了。注册学生和老师,且都要用学号或者工号,重复数据不能重复添加。
大家可以填写好入参,然后根据正交的方式,进行两两组和用例,这些覆盖更多的场景。