首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FastAPI(八十六)实战开发《在线课程学习系统》-- 留言接口测试

FastAPI(八十六)实战开发《在线课程学习系统》-- 留言接口测试

作者头像
雷子
发布2021-11-24 11:42:41
3690
发布2021-11-24 11:42:41
举报

前言

我们上一次分享了FastAPI(八十五)实战开发《在线课程学习系统》--修改密码接口测试,这次我们看下留言接口测试。

正文

在之前的接口设计、接口开发中,都对了留言接口进行了进一步的分析。

那么我们去设计一下这里面需要的测试用例

1.未登陆用户不能评论

2.请求是post请求

3.长度小于5提示长度在5-500

4.长度大于500

5.自己给自己留言

6.给别人留言

按照我们这个的设计,我们可以去设计我们的测试用例。

首先我们去设计一个随机字符串的。

def randomtext(lengths=4):
    return ''.join(random.sample(string.ascii_letters + string.digits, lengths))

接着我们在接口测试的时候就可以使用。

class TestMessageCase(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        cls.url = 'http://127.0.0.1:8000/user/addmessage'
        cls.token = get_students_token(student_parame)
    @classmethod
    def tearDownClass(cls) -> None:
        cls.url=''
    def setUp(self) -> None:
        pass
    def tearDown(self) -> None:
        self.text=''
    def testuser_not_login(self):
        reponse=requests.post(self.url)
        status=reponse.status_code
        reslut=reponse.json()
        self.assertEqual(status, 200)
        self.assertEqual(reslut['code'], 421)
    def test_user_notexc(self):
        headers = {
            "token": self.token
        }
        data={
            'id':0,
            'connect':randomtext(6)
        }
        reonse=requests.post(self.url,json=data,headers=headers)
        status=reonse.status_code
        reslut=reonse.json()
        print(reslut)
        self.assertEqual(status, 200)
        self.assertEqual(reslut['code'], 100503)
        self.assertEqual(reslut['message'], '留言用户不存在')

    def test_user_file(self):
        headers = {
            "token": self.token
        }
        data={
            'id':14,
            'connect':randomtext(4)
        }
        reonse=requests.post(self.url,json=data,headers=headers)
        status=reonse.status_code
        reslut=reonse.json()
        self.assertEqual(status, 200)
        self.assertEqual(reslut['code'], 100502)
        self.assertEqual(reslut['message'], '留言长度在5-500个字符长度')
    def test_user_twod_file(self):
        headers = {
            "token": self.token
        }
        data={
            'id':14,
            'connect':randomtext(10)*100
        }
        reonse=requests.post(self.url,json=data,headers=headers)
        status=reonse.status_code
        reslut=reonse.json()
        self.assertEqual(status, 200)
        self.assertEqual(reslut['code'], 100502)
        self.assertEqual(reslut['message'], '留言长度在5-500个字符长度')
    def test_message_two_me(self):
        headers = {
            "token": self.token
        }
        data={
            'id':3,
            'connect':randomtext(10)
        }
        reonse=requests.post(self.url,json=data,headers=headers)
        status=reonse.status_code
        reslut=reonse.json()
        print(reslut)
        self.assertEqual(status, 200)
        self.assertEqual(reslut['code'], 100501)
        self.assertEqual(reslut['message'], '自己不能给自己留言')
    def test_message_to_orther(self):
        headers = {
            "token": self.token
        }
        data={
            'id':4,
            'connect':randomtext(10)
        }
        reonse=requests.post(self.url,json=data,headers=headers)
        status=reonse.status_code
        reslut=reonse.json()
        self.assertEqual(status, 200)
        self.assertEqual(reslut['code'], 200)
        self.assertEqual(reslut['message'], '成功')

那么我们运行了上述的测试用例,发现两个问题

1.请求方式写成了get
2.判断长度的时候错误。我们对于之前的代码进行修改。

我们修改下原来的代码

@usersRouter.post(path='/addmessage')
async def addmessage(messageconent: MessageConent,
                     user: UsernameRole = Depends(get_cure_user),
                     db: Session = Depends(get_db)):
    if len(messageconent.connect) > 500 or len(messageconent.connect) < 5:
        return reponse(code=100502, message='留言长度在5-500个字符长度', data='')
    user_name = get_user_username(db, user.username)
    rev_user = get_user(db, messageconent.id)
    if not rev_user:
        return reponse(code=100503, message='留言用户不存在', data='')
    if rev_user.id == user_name.id:
        return reponse(code=100501, message='自己不能给自己留言', data='')
    times = datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M:%S")
    message = Message(senduser=user_name.id,
                      acceptusers=rev_user.id,
                      context=messageconent.connect,
                      sendtime=times,addtime=times,read=False)
    db.add(message)
    db.commit()
    db.refresh(message)
    return reponse(code=200, message="成功", data='')

目前我们的测试用例呢,现在来说不会出问题,但是我们假设切换了数据库的环境,我们的用户的id会发生变化,那么我们应该怎么去处理呢。

我们把id配置到配置文件,以后只需要修改配置文件即可

userid=14
user_cru=3

还有一种方式呢,就是把当前id通过sql查询来实现。

select id from users where username='liwanle1i'

其他用户不是当前用户,我们可以用下面去查找不等于当前用户

SELECT id FROM users  WHERE username !='liwanle1i' 

这样也能满足我们的需求,我们可以去封装一个sql连接操作即可。

后续我们的用例的名称也可以变成一个通用的。

后记

发现问题,解决问题。遇到问题,慢慢解决问题即可。

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

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

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

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

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