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

FastAPI(八十五)实战开发《在线课程学习系统》--修改密码接口测试

作者头像
雷子
发布2021-11-23 11:22:49
3540
发布2021-11-23 11:22:49
举报
文章被收录于专栏:雷子说测试开发

前言

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

正文

我们根据之前的需求分析,接口设计,接口开发,我们需要对修改密码接口进行测试。

1.不登陆用户

2.用户原来密码错误

3.用户密码长度不符合要求

4.密码修改成功

5.原密码校验失败

6.新旧密码不能一样

那么我们先按照上面的用例点来编写接口的测试用例。

我们还是依赖之前封装的登陆来。

代码语言:javascript
复制
import unittest
from test.userlogin import *
class TestpasswordCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.url = 'http://127.0.0.1:8000/user/changepassword'
    @classmethod
    def tearDownClass(cls) -> None:
        cls.url=""
    def test_userNOtlogin(self):
        reponse = requests.post(self.url)
        status = reponse.status_code
        reslut = reponse.json()
        self.assertEqual(status, 200)
        self.assertEqual(reslut['code'], 421)
    def test_student_error(self):
        student_parame['newpassword']='1234567'
        toekn=get_students_token()
        headers = {
            "token": toekn
        }
        reponse = requests.post(self.url,json=student_parame,headers=headers)
        status = reponse.status_code
        reslut = reponse.json()
        self.assertEqual(status, 200)
        self.assertEqual(reslut['code'], 100303)
    def test_student_user(self):
        toekn = get_students_token()
        headers = {
            "token": toekn
        }
        student_parame['newpassword']='123456'

        reponse = requests.post(self.url,json=student_parame,headers=headers)
        status = reponse.status_code
        reslut = reponse.json()
        self.assertEqual(status, 200)
        self.assertEqual(reslut['code'], 100304)
        self.assertEqual(reslut['message'], "新旧密码不能一样")
    def test_student_new(self):
        student_parame['newpassword'] = '1234567'
        toekn = get_students_token()
        headers = {
            "token": toekn
        }
        reponse = requests.post(self.url, json=student_parame, headers=headers)
        status = reponse.status_code
        reslut = reponse.json()
        print(reslut)
        self.assertEqual(status, 200)
        self.assertEqual(reslut['code'], 100303)
        self.assertEqual(reslut['message'], "新密码长度不匹配")
    def test_student_newS(self):
        student_parame['newpassword'] = '0123456789'
        toekn = get_students_token()
        headers = {
            "token": toekn
        }
        reponse = requests.post(self.url, json=student_parame, headers=headers)
        status = reponse.status_code
        reslut = reponse.json()
        self.assertEqual(status, 200)
        self.assertEqual(reslut['code'], 200)
        self.assertEqual(reslut['message'], "成功")
    def test_student_not(self):
        toekn = get_students_token()
        headers = {
            "token": toekn
        }
        student_parame['newpassword'] = '01234567819'
        student_parame['password'] = '01123456789'

        reponse = requests.post(self.url, json=student_parame, headers=headers)
        status = reponse.status_code
        reslut = reponse.json()
        self.assertEqual(status, 200)
        self.assertEqual(reslut['code'], 100301)
        self.assertEqual(reslut['message'], "原密码校验失败")

if __name__ == '__main__':
    unittest.main()

用例完毕后,我们发现了两个问题。一个是请求方式,写的get,应该为post的。更新密码也出了问题。更改之后的代码如下:

代码语言:javascript
复制
@usersRouter.post(path='/changepassword')
async def changepassword(request: Request, userchangepasword: UserChangepassword,
                         user: UsernameRole = Depends(get_cure_user),
                         db: Session = Depends(get_db)):
    if userchangepasword.password == userchangepasword.newpassword:
        return reponse(code=100304, message='新旧密码不能一样', data='')
    if len(userchangepasword.newpassword) < 8 or len(userchangepasword.newpassword) > 16:
        return reponse(code=100303, message='新密码长度不匹配', data='')
    username = user.username
    user_name = get_user_username(db, username)
    verify = verify_password(userchangepasword.password, user_name.password)
    if verify:
        hashpassword = get_password_hash(userchangepasword.newpassword)

        user_name.password=hashpassword
        try:
            db.commit()
            db.refresh(user_name)
        except Exception as e:
            logger.exception(e)
            return reponse(code=100302, message='密码保存失败', data='')
        request.app.state.redis.delete(user.username)
        request.app.state.redis.delete(user.username + "_password")
        return reponse(code=200, message="成功", data=user.username)
    return reponse(code=100301, message='原密码校验失败', data='')

但是再次执行,发现了之前的方法不能用了。因为之前的设计的测试用例的时候,用户名是固定的,所以我们要对测试用例进行再次改造。

先对依赖登陆地方进行改造

代码语言:javascript
复制
import  requests
login_url = 'http://127.0.0.1:8000/user/login/'
student_parame={
        "username": "liwanle1i",
        "password": "0123456789"
    }
teacher_parame= {
        "username": "liwanlei",
        "password": "123456"
    }
def get_students_token(parame) ->str:
    reponse = requests.post(login_url, json=parame)
    reslut = reponse.json()
    print(parame)
    print(reslut)
    token = reslut['data']['token']
    return  token
def get_teacher_tone(parame)->str:

    reponse = requests.post(login_url, json=parame)

    reslut = reponse.json()
    token = reslut['data']['token']
    return token

接着,我们对测试用例进行改造,改造后满足测试用例跟着实际测试改变进行再次测试,测试完毕还原测试密码。

代码语言:javascript
复制
import unittest
from copy import deepcopy
from test.userlogin import *
class TestpasswordCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.url = 'http://127.0.0.1:8000/user/changepassword'
        cls.student_parame = {
            "username": "liwanle1i",
            "password": "012345678910",
            "newpassword": "012345678910"
        }
    @classmethod
    def tearDownClass(cls) -> None:
        cls.url=""
    def setUp(self) -> None:
        pass
    def tearDown(self) -> None:
        toekn = get_students_token(self.student_parame)
        headers = {
            "token": toekn
        }
        self.student_parame["newpassword"] = '012345678910'
        requests.post(self.url, json=self.student_parame, headers=headers)
        self.student_parame["password"] = '012345678910'


    def test_userNOtlogin(self):
        reponse = requests.post(self.url)
        status = reponse.status_code
        reslut = reponse.json()
        self.assertEqual(status, 200)
        self.assertEqual(reslut['code'], 421)
    def test_student_error(self):
        self.student_parame['newpassword']='1234567'
        toekn=get_students_token(self.student_parame)
        headers = {
            "token": toekn
        }
        reponse = requests.post(self.url,json=self.student_parame,headers=headers)
        status = reponse.status_code
        reslut = reponse.json()
        self.assertEqual(status, 200)
        self.assertEqual(reslut['code'], 100303)
    def test_student_user(self):
        toekn = get_students_token(self.student_parame)
        headers = {
            "token": toekn
        }
        reponse = requests.post(self.url,json=self.student_parame,headers=headers)
        status = reponse.status_code
        reslut = reponse.json()
        self.assertEqual(status, 200)
        self.assertEqual(reslut['code'], 100304)
        self.assertEqual(reslut['message'], "新旧密码不能一样")
    def test_student_new(self):
        self.student_parame['newpassword'] = '1234567'
        toekn = get_students_token(self.student_parame)
        headers = {
            "token": toekn
        }
        reponse = requests.post(self.url, json=self.student_parame, headers=headers)
        status = reponse.status_code
        reslut = reponse.json()

        self.assertEqual(status, 200)
        self.assertEqual(reslut['code'], 100303)
        self.assertEqual(reslut['message'], "新密码长度不匹配")
    def test_student_newS(self):
        self.student_parame['newpassword'] = '0123456789101'
        toekn = get_students_token(self.student_parame)
        headers = {
            "token": toekn
        }
        reponse = requests.post(self.url, json=self.student_parame, headers=headers)
        status = reponse.status_code
        reslut = reponse.json()
        self.student_parame['password'] = '0123456789101'
        self.assertEqual(status, 200)
        self.assertEqual(reslut['code'], 200)
        self.assertEqual(reslut['message'], "成功")

    def test_student_not(self):
        toekn = get_students_token(self.student_parame)
        headers = {
            "token": toekn
        }
        self.name=deepcopy(self.student_parame)
        self.name['password']='1212132213'
        self.name['newpassword']='111111111111'
        reponse = requests.post(self.url, json=self.name, headers=headers)
        status = reponse.status_code
        reslut = reponse.json()
        self.assertEqual(status, 200)
        self.assertEqual(reslut['code'], 100301)
        self.assertEqual(reslut['message'], "原密码校验失败")

if __name__ == '__main__':
    unittest.main()

改造后,我们就可以每次测试不用来会修改数据。这里修改密码和用户身份没有关系,不用区别验证用户身份。

后记

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

欢迎关注雷子说测试开发,后续将会持续为大家分享更多的技术知识

如果你有问题可以留言或者加我微信:952943386。

2021,一起牛转钱坤,一起牛逼。

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

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

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

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

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

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