Requests.Session()會話維持請求,模擬登錄

最近項目的技術Leader對原本的系統的架構做了新優化,增加網關層:用來接收客戶端請求、對請求合法性校驗以及鑑權、對請求根據URI路由轉發到相應的業務邏輯層;實際上,添加portal模塊,避免接口無校驗直接暴露;

情景

下圖所示的這個查詢接口 原本是可以直接請求,沒有鑑權的;整改後,直接請求都是401【上鎖的圖標】,返回值爲 {“status”:“0”,“msg”:“The user is unauthorized”},而拿有權限的賬號登錄後,可以正常請求到,返回值是 {“status”:“1”,“msg”:“OPERATION SUCCEED”,“data”:{各種數據}}
在這裏插入圖片描述

看下我們系統【Web】的前端登錄界面:

在這裏插入圖片描述
再看下實際用到的接口:
在這裏插入圖片描述
在這裏插入圖片描述

代碼

這一部分代碼是有3個請求;先請求url_key,拿到一個key;再把這個當成參數值傳到圖片驗證碼的請求url_image,獲取驗證碼;最後請求登錄接口url_login,正常傳參後,成功登錄;

【從Requests中獲取session】

        cls.s = requests.session()
        res_1 = cls.s.get(url=cls.url_key)
        key = res_1.json()['data']
        Log.info('拿到key')

        res_2 = cls.s.get(url=cls.url_image, params={'key': key})
        Log.info('訪問到image')

        res_3 = cls.s.get(url=cls.url_login, params={'code': input('輸入驗證碼:'), 'key': key, 'password': 'zyooooxie', 'phone': 'zyooooxie'})
        Log.info('驗證碼輸入')

        assert res_3.json()['msg'] == 'success'
        Log.critical('系統登錄成功')

【使用seesion去請求,保證了請求是同一個session】這一部分寫的是某頁面的接口

    def statements_value(self, start_date, end_date, transaction_type, bank_name):
        """
        傳入時間段、賬號,返回數據總數量totalRecord
        :param start_date: 開始日期
        :param bank_name: 銀行名
        :param end_date: 結束日期
        :param transaction_type: 賬號
        :return:數據明細totalRecord
        """
        test_dict = {'endDate': end_date, 'startDate': start_date, 'pageId': 1, 'pageSize': 200,
               'transactionType': transaction_type, 'bankName': bank_name}
        res = self.s.request('post', self.url_statements, json=test_dict)

        statements_record = res.json()['data']['totalRecord']
        return statements_record

這一部分是退出系統的接口;

    @classmethod
    def tearDownClass(cls):
        r = cls.s.post(url=cls.url_logout)
        assert r.json()['msg'] == 'success'
        print('本py文件 測試結束')
        Log.critical('系統退出')

交流技術 歡迎+QQ 153132336 zy
個人博客 https://blog.csdn.net/zyooooxie

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章