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

2021-11-24 11:42:41 浏览数 (1)

前言

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

正文

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

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

代码语言:javascript复制
1.未登陆用户不能评论

2.请求是post请求

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

4.长度大于500

5.自己给自己留言

6.给别人留言

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

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

代码语言:javascript复制
def randomtext(lengths=4):
    return ''.join(random.sample(string.ascii_letters   string.digits, lengths))

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

代码语言:javascript复制
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'], '成功')

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

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

我们修改下原来的代码

代码语言:javascript复制
@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配置到配置文件,以后只需要修改配置文件即可

代码语言:javascript复制
userid=14
user_cru=3

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

代码语言:javascript复制
select id from users where username='liwanle1i'

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

代码语言:javascript复制
SELECT id FROM users  WHERE username !='liwanle1i' 

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

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

后记

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

0 人点赞