前言
我们上一次分享了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连接操作即可。
后续我们的用例的名称也可以变成一个通用的。
后记
发现问题,解决问题。遇到问题,慢慢解决问题即可。