1. 程式人生 > 其它 >requests---自動登入禪道並提交bug

requests---自動登入禪道並提交bug

前言

做測試工程師的少不了和一些bug管理工具打交道,比如禪道,jira,今天安靜介紹下如何通過requests完成禪道的登入以及自動提bug

抓取登入狀態

我們先通過fiddler進行抓取禪道的登入介面,檢視禪道登入介面都有哪些內容。

通過上圖片可以看到禪道登入的介面地址,請求方式,請求型別。登入的賬號名和密碼,細心的小夥伴們可以看出來,在登入的賬號名密碼中,密碼是通過進行加密過後的一段字元,但是密碼是怎麼加密的,這個沒有辦法知道。

分析請求體

我們可以先通過進行傳送請求這個介面地址,看看返回的內容有沒有一些提示資訊

import requests
url = 'http://127.0.0.1/pro/user-login.html
' r = requests.get(url) print(r.content.decode('utf-8'))

通過requests進行傳送請求,檢視我們的返回的內容,可以看到一段關於請求內容一些加密情況

這裡很清楚的描述了,密碼的加密情況,密碼是通過MD5的方式進行一層加密,然後加上了一個 verifyRand 這個字元內容又進行了一層加密。分析到這裡,我們可以知道只要找到 verifyRand 這個字元的內容就能通過MD5的加密方式求出加密後的密碼內容。安靜這裡多次抓包發現 verifyRand 這個值每次請求頁面的時候都會發生改變,並且在我們的返回內容中也找到了值的位置。

既然發現在我們的請求返回值中可以找到,那麼就可以通過正則表示式的形式進行提取出來。

import requests
import re
url = 'http://127.0.0.1/pro/user-login.html'
r = requests.get(url)
verify = re.findall(r"name='verifyRand' id='verifyRand' value='(.*?)'  />",r.content.decode('utf-8'))
print(verify)

通過上述內容,執行後可以看出,已經將 verifyRand 的值提取出來了

MD5加密

前面的步驟已經將登入的所需要的內容都找到了,接下來就是通過MD5進行加密了,這裡安靜介紹一個python的MD5加密的庫 hashlib 進行完成加密。這裡的密碼進行了雙重加密

import requests
import re
import hashlib
# 通過session的方式進行請求
s = requests.session()
user = 'anjing_test'
password = 'test_anjing'
url = 'http://127.0.0.1/pro/user-login.html'
r = s.get(url)
# print(r.content.decode('utf-8'))
verify = re.findall(r"name='verifyRand' id='verifyRand' value='(.*?)'  />", r.content.decode('utf-8'))[0]
# 第一次加密密碼
pwd1md5 = hashlib.md5()
pwd1md5.update(password.encode('utf-8'))
pwd1_result = pwd1md5.hexdigest()
# 第2次加密
pwd2md5 = hashlib.md5()
pwd2md5.update((pwd1_result+verify).encode('utf-8'))
pwd2_result = pwd2md5.hexdigest()

這裡將密碼進行了2層加密後,我們再次帶上加密後的密碼,進行請求登入介面。

注意:因為這裡後續要進行請求其他網址,安靜用了session的方式進行請求。

完成登入

這裡安靜加了一個判斷內容,通過請求進入測試頁面,如果進入了測試頁面,說明我們的登入成功了,如果沒有進入,就是登入失敗了

import requests
import re
import hashlib
# 通過session的方式進行請求
s = requests.session()
user = 'anjing_test'
password = 'test_anjing'
url = 'http://127.0.0.1/pro/user-login.html'
r = s.get(url)
# print(r.content.decode('utf-8'))
verify = re.findall(r"name='verifyRand' id='verifyRand' value='(.*?)'  />", r.content.decode('utf-8'))[0]
# 第一次加密密碼
pwd1md5 = hashlib.md5()
pwd1md5.update(password.encode('utf-8'))
pwd1_result = pwd1md5.hexdigest()
# 第2次加密
pwd2md5 = hashlib.md5()
pwd2md5.update((pwd1_result+verify).encode('utf-8'))
pwd2_result = pwd2md5.hexdigest()
body = {
                "account": user,
               "password": pwd2_result,
               "passwordStrength": 1,
               "referer": "/pro/",
               "verifyRand": verify,
               "keepLogin": 0,
               }
r = s.post('http://127.0.0.1/pro/user-login.html', data=body)
# 訪問測試頁面
test = s.get("http://127.0.0.1/pro/qa/")
if "測試主頁" in test.text:
    print('登入成功!!')
else:
    print('登入失敗!!')

通過執行後發現,我們已經登入成功了。

自動提交bug

通過上面的步驟已經完成了對禪道的登入,接下來就是抓取提bug的介面資訊。然後模擬介面自動提交bug內容。

分析提交bug介面

繼續通過Fiddler進行抓取提交bug介面

通過分析介面可以看出來,我們是通過表單的形式進行請求的,requests沒有請求表單的內容

表單提交

這裡我們需要引入第3方庫 requests-toolbelt 進行完成,這個庫需要通過pip進行安裝

pip install requests-toolbelt

安裝過後,我們將上述抓到的資訊填寫到請求體中,然後在攜帶這請求體進行請求提交bug的介面內容。

import requests
import re
import hashlib
from requests_toolbelt import MultipartEncoder
s = requests.session()
user = 'anjing_test'
password = 'test_anjing'
url = 'http://127.0.0.1/pro/user-login.html'
r = s.get(url)
# print(r.content.decode('utf-8'))
verify = re.findall(r"name='verifyRand' id='verifyRand' value='(.*?)'  />", r.content.decode('utf-8'))[0]
# 第一次加密密碼
pwd1md5 = hashlib.md5()
pwd1md5.update(password.encode('utf-8'))
pwd1_result = pwd1md5.hexdigest()
# 第2次加密
pwd2md5 = hashlib.md5()
pwd2md5.update((pwd1_result+verify).encode('utf-8'))
pwd2_result = pwd2md5.hexdigest()
body = {
                "account": user,
               "password": pwd2_result,
               "passwordStrength": 1,
               "referer": "/pro/",
               "verifyRand": verify,
               "keepLogin": 0,
               }
r = s.post('http://127.0.0.1/pro/user-login.html', data=body)
# 訪問測試頁面
test = s.get("http://127.0.0.1/pro/qa/")
if "測試主頁" in test.text:
    print('登入成功!!')
else:
    print('登入失敗!!')
# 提交bug介面
url2 = 'http://127.0.0.1/pro/bug-create-1-0-moduleID=0.html'
body2 = MultipartEncoder(
    fields=[
        ('product', "1"),
        ('module', '0'),
        ('project', ' '),
        ('openedBuild[]', 'trunk'),
        ('assignedTo', 'admin'),
        ('deadline', ''),
        ('type', 'codeerror'),
        ('os', ''),
        ('browser', ''),
        ('title', '正確的賬號密碼登入失敗'),  # bug 名稱
        ('color', ''),
        ('severity', '3'),
        ('pri', '3'),
        ('steps', '<p>[步驟]</p>\n<p>輸入正確的賬號名密碼進行完成登入</p>\n<br />\n<p>[結果]</p>\n登入失敗<br />\n<p>[期望]</p>\n登入成功<br />'),
        ('story', '0'),
        ('task','0'),
        ('oldTaskID', '0'),
        ('mailto[]', ''),
        ('contactListMenu', ''),
        ('keywords', ''),
        ('status', 'active'),
        ('labels[]', ''),
        ('files[]', ''),
        ('uid', '602f5eb06ddc9'),
        ('case', '0'),
        ('caseVersion', '0'),
        ('caseVersion', '0'),
        ('result', '0'),
        ('testtask', '0'),
            ],
    )
# 請求提交bug介面
r2 = s.post(url2, headers={'Content-Type': body2.content_type}, data=body2)
if '儲存成功' in r2.text:
    print('bug提交成功!')
else:
    print('bug提交失敗')

通過執行後,再次返回到我們的bug頁面,會發現已經提交成功了。

總結

這裡登入禪道以及自動提交bug的過程,主要運用了requests的一些方法以及如何通過程式碼的形式進行提交表單型別。以及如何通過python進行MD5的加密。