接口测试:框架分析设计(二)类中构造了两次请求(登录及修改用户信息),系统识别为两个不同的用户问题的解决

一、实现修改用户信息的代码:

import requests
import unittest
class Update_user_message(unittest.TestCase):
    def test_update_user_message(self):
        url = "http://localhost:8080/....../update_information.do"
        uerinfo = {}
        uerinfo = {
            "email" : 'test_yu00001@qq.com',
            "phone" : '13200000012',
            "question":'大熊猫是什么动物',
            'answer' :'哺乳动物'}
        sess = requests.session()
        response = sess.post(url,data=uerinfo).text
        print(response)
if __name__ == '__main__':
    unittest.main()

执行后的结果为:

{“status”:1,“msg”:“用户未登录”}

问题原因:
因为修改用户信息操作,是在用户已经登录的前提下,当前只执行了修改用户信息接口,没有进行登录,所以接口返回信息“用户未登录”。

二、解决方案:

解决方案1:在当前类,增加初始化函数,增加登录的初始化代码
解决方案2:增加登录的testcase方法,不能有初始化操作
解决方案3:在测试代码前,追加登录代码,不能有初始化操作
解决方案4:创建新的文件,实现脚本联调

2.1、实验一:在当前类,增加初始化函数

import requests
import unittest
class Update_user_message(unittest.TestCase):
    def setUp(self):
        url = "http://localhost:8080/...../login.do"
        uerinfo = {}
        uerinfo = {
            "username": '大熊猫',
            "password": '222222'}
        res = requests.post(url, data=uerinfo).text
        print(res)
    def test_update_user_message(self):
        url = "http://localhost:8080/...../update_information.do"
        uerinfo = {}
        uerinfo = {
            "email" : 'test_yu00001@qq.com',
            "phone" : '13200000012',
            "question":'大熊猫是什么动物',
            'answer' :'哺乳动物'}
        sess = requests.session()
        response = sess.post(url,data=uerinfo).text
        print(response)
if __name__ == '__main__':
    unittest.main()

问题原因:
在执行后还是出现用户未登录的结果,是因为构造了两次请求,系统会认为这是两个不同的用户。

三、跟进解决方案

postman执行登录接口,有一个cookies。cookies下的jsonID是sessionID的在tomcat下的另一个叫法
在这里插入图片描述

我们可以通过sessionID,进行记录用户信息来解决这个问题。

方法一:

通过postman工具获取sessionID再传到代码里去。

问题:
但是需要注意:sessionID是有时效性的(一般是30分钟);而且重新启动服务或者关闭浏览器重新开启之后,session也会失效。用工具获取的sessionID和登录脚本没有关系
所以,这个问题存在。经过试验可以看到,并没有修改成功

方法二:

通过初始化登录之后,获取对应的sessionID,作为返回值,再将这个返回值传入修改信息接口

(1)需要解决问题:
如何在登录请求后,获取返回结果中的这个jsonID

(2)解决方法:
通过获取cookie信息,再通过字典函数dic()转化成字典格式,获取字典数据;再取它的对应JSESSIONID

dict(response.cookies)['JSESSIONID']

优化后的代码:

import requests
import unittest
class Update_user_message(unittest.TestCase):
    def setUp(self):
        url = "http://localhost:8080/..../login.do"
        uerinfo = {}
        uerinfo = {
            "username": '大熊猫',
            "password": '222222'}
        response = requests.post(url, data=uerinfo)
        self.jsonid = dict(response.cookies)['JSESSIONID']
    def test_update_user_message(self):
        url = "http://localhost:8080/..../update_information.do"
        uerinfo = {}
        uerinfo = {
            "email" : 'test_yu00001@qq.com',
            "phone" : '13200000013',
            "question":'大熊猫是什么动物',
            'answer' :'哺乳动物'}
        jsonID = {'JSESSIONID':self.jsonid}
        response = requests.post(url,data=uerinfo,cookies = jsonID).text
        print(response)
        #self.assertIn("更新个人信息成功",str(response))
if __name__ == '__main__':
    unittest.main()

运行结果,更新成功

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值