httprunner學習26-cookies關聯(403 Forbidden問題解決)


前言

在使用httprunner寫接口自動化用例時,遇到有些接口需要用到cookies,如果cookie沒關聯起來的話,會出現403 Forbidden的問題

問題描述

用httprunner寫了個網頁的登錄用例,以下是相關的腳本參考test_cookie_demo.yml

# 作者:上海-悠悠 qq交流群:874033608
-   config:
        name: test login api demo
        variables: {}
        request:
            base_url: http://49.235.x.x:80xx
-   test:
        name: 測試用例名稱
        request:
            headers:
                Content-Type:  application/x-www-form-urlencoded
            data:
                csrfmiddlewaretoken: ChMBwCgvH04sOA1XhPkPzUbfKDD5O8lmqAYR0oWIvSH2waMWpnzaxytvj8EUQgCF
                username: admin1
                password: 1111111*****
            method: POST
            url: /xadmin/
        validate:
        -   eq:
            - status_code
            - 200

運行結果

D:\soft\code\demo>hrun test_cookie_demo.yml
測試用例名稱
INFO     POST /xadmin/
ERROR    403 Client Error: Forbidden for url: http://49.235.x.x:80xx/xadmin/
INFO     start to validate.
ERROR    validate: status_code equals 200(int)  ==> fail
403(int) equals 200(int)
ERROR    request:
headers: {'content-type': 'application/x-www-form-urlencoded'}
json: {'data': 'ChMBwCgvH04sOA1XhPkPzUbfKDD5O8lmqAYR0oWIvSH2waMWpnzaxytvj8EUQgCF', 'username': 'admin', 'password': '11111111***'}

ERROR    response:
status_code: 403

運行結果出現:403 Forbidden

cookies關聯

出現403 Forbidden問題,一般是網站處於安全考慮,缺少cookies導致,可以在頁面登錄的時候,用fiddler抓一個登陸成功的包對比下就知道了

那么這個cookies從哪來的呢,一般是瀏覽器打開登錄首頁的時候(還沒輸入賬號和密碼的時候),服務端會返回cookies過來,瀏覽器會記住緩存。
所以解決這個問題就模擬瀏覽器打開登錄頁一樣,先發個get請求訪問登錄首頁,獲取到cookie后再去登錄

httprunner框架繼承了requests庫的優良特征,會自動管理cookie(看到有些同學費盡周折去提取cookies,又去關聯cookies,其實沒必要)

# 作者:上海-悠悠 qq交流群:874033608
-   config:
        name: test login api demo
        variables: {}
        request:
            base_url: http://49.235.x.x:80xx
-   test:
        name: 先訪GET問登錄首頁,獲取cookies
        request:
            method: GET
            url: /xadmin/
        extract:
        -   csrfmiddlewaretoken: name='csrfmiddlewaretoken' value='(.+?)'  # 頁面正則提取隱藏參數csrfmiddlewaretoken
        validate:
        -   eq:
            - status_code
            - 200

-   test:
        name: 登錄用例
        request:
            headers:
                Content-Type:  application/x-www-form-urlencoded
            data:
                csrfmiddlewaretoken: $csrfmiddlewaretoken
                username: admin1
                password: 1111111*****
                this_is_the_login_form: "1"
                next: /xadmin/
            method: POST
            url: /xadmin/
        validate:
        -   eq:
            - status_code
            - 200

運行結果

D:\soft\code\demo>hrun test_cookie_demo.yml
先訪GET問登錄首頁,獲取cookies
INFO     GET /xadmin/
INFO     status_code: 200, response_time(ms): 34.57 ms, response_length: 4163 bytes
INFO     start to extract from response object.
INFO     start to validate.
.
登錄用例
INFO     POST /xadmin/
INFO     status_code: 200, response_time(ms): 132.31 ms, response_length: 4400 bytes
INFO     start to validate.
.

----------------------------------------------------------------------
Ran 2 tests in 0.181s

OK
INFO     Start to render Html report ...
INFO     Generated Html report: D:\soft\code\demo\reports\2020_02_21 23_21_19.html

使用fiddler抓包查看,會發現cookie已經關聯成功了

隱藏參數csrfmiddlewaretoken

csrfmiddlewaretoken參數是html頁面上的隱藏參數,這個在django系列教程里面提到過,是為了防止跨域偽造請求。
每次刷新頁面都會自動變的,所以需要先把此參數提取出來,動態關聯到請求參數的body里面去


httprunner 2.x實戰教程點我 ->立即報名


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM