前言
我们上一次分享了实战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场景我覆盖了。注册学生和老师,且都要用学号或者工号,重复数据不能重复添加。
大家可以填写好入参,然后根据正交的方式,进行两两组和用例,这些覆盖更多的场景。
后记
发现问题,解决问题。遇到问题,慢慢解决问题即可。
欢迎关注雷子说测试开发,后续将会持续为大家分享更多的技术知识
如果你有问题可以留言或者加我微信:952943386。
2021,一起牛转钱坤,一起牛逼。
如果觉得这篇文章还不错,来个【分享、点赞、在看】三连吧,让更多的人也看到~