前提摘要:
在做接口自动化的过程中,有时候会遇到登录的密码为动态的(同一个账号密码登录时,通过fiddler抓取的密文密码均不一样)。
如果有条件的,可以跟后端开发沟通,找到密码加密规则,按照规则去一步一步做即可。
如果有其他原因无法通过上面方法实现的,可以通过以下方法来绕过动态密码获取token,做后续的api测试:
步骤1:通过selenium来使自己的账号登录你需要的网站。如:
步骤2:手动打开chrome浏览器的开发者视图(F12)
注意:这里要看你的token信息是在Local Storage中还是在Session Storage中(我这里是在local storage中)
步骤3: 获取登录后的token信息
# 获取登录后localStorage中的api信息
localStr = driver.execute_script('return localStorage.getItem("token");')
# 引号里面要注意使用return,不然localStr返回为空
# 这里的token是在localStorage中的Key
最终代码如下:
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.options import Options
import pprint
import re
# 浏览器设置(因为是在做接口自动化,所以这里选择不让浏览器自动弹出界面执行。)
chrome_opt = Options()
chrome_opt.add_argument('--headless')
driver = webdriver.Chrome(chrome_options=chrome_opt)
driver.get('http://url.com/')
driver.maximize_window()
def getToken():
# 登录
driver.find_element_by_id("usertext").send_keys("test001")
sleep(1)
driver.find_element_by_id("passwordtext").send_keys("123456")
sleep(1)
driver.find_element_by_id("Button").click()
sleep(2)
# 获取登录后localStorage中的api信息
localStr = driver.execute_script('return localStorage.getItem("token");')
# 引号里面要注意使用return,不然localStr返回为空
# 这里的token是在localStorage中的Key
# 注:我这里的项目因为不是直接是token键对应token的值,是某个键的值中,包含了token信息,所以我这里要进行截取
# 获取token(如果获取不到token,将在while中循环获取,直到获取到token值即可)
token = []
while token == []:
token = re.findall('token":"(.*?)",', localStr)
# 关闭浏览器
# driver.close()
return token
if __name__ == '__main__':
token = getToken()
print("最终的token为",token)
执行结果: