前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试

FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试

作者头像
雷子
发布2021-11-23 11:21:46
2290
发布2021-11-23 11:21:46
举报

前言

我们上一次分享了实战FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架,这次我们分享注册接口的单元测试。

正文

前面分析的都是开发相关的,框架基础学习相关的,这次我们开始分享单元测试相关的。我们的单元测试也不是只是针对单个的类做测试,而是对莫个接口的方法做测试。因为我们没有封装特别多的独立的方法,所以我们的测试用单独的接口为切入点即可。

我们可以先来看下,我们注册的接口的相关的文章,回忆下注册接口的代码。

FastAPI(六十五)实战开发《在线课程学习系统》接口开发--用户注册接口开发

我们来分析下接口:

在借口的文档上面我们已经对接口做了详细的描述,我们在代码实际的开发中也可以看下那时候的代码,那么我们按照接口文档,可以进行我们的用例的设计,设计出来我们的用例需求的相关的case。

两种角色:一种是老师,一种是学生。

对长度的限制:密码和用户名都有长度要求。密码存储是md5加密。

学生有学号,有长度要求,老师是工号有长度要求,且是纯数字。

性别分男女。

年龄要大于18小于65。我们可以根据这些已知的去设计我们的用例。

用例的设计思路:

1.初始化环境

2.初始化参数

3.测试case

4.参数清理

5.环境还原。

我们看下我们最后的case。这里我只是展示了 一些主要的case,最容易出问题的case。

代码语言:javascript
复制
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,一起牛转钱坤,一起牛逼。

如果觉得这篇文章还不错,来个【分享、点赞、在看】三连吧,让更多的人也看到~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档