首次自動化測試,使用selenium+scapy

来源:https://www.cnblogs.com/moshuixiong/archive/2019/08/25/11409817.html
-Advertisement-
Play Games

痛苦而艱難 才寫出這一點點,這是個登陸測試 main 抓包類login_tst 剛學測試和python 寫的一般 讓各位見笑了 ...


痛苦而艱難 才寫出這一點點,這是個登陸測試

main

# -*- coding: utf-8 -*-
from selenium import webdriver
import login_tst
import time
import thread
ms={}
def thread_start_():
    global ms
    ms=login_tst.GST_start()#開始抓包
    return

driver=''
try:
    driver = webdriver.Chrome()#驅動載入 火狐用Firefox()
except Exception as e:
    print format(e)
driver.get('http://***.***.***:8765/Index/login.html')
time.sleep(1)
name=unicode("13864619000","utf-8")#只抓取了與伺服器之間交互的值做判斷,所以js的語句沒辦法測試
password=unicode("000ww000","utf-8")#也就是無法測試手機號格式不符,密碼為空的情況,
driver.find_element_by_name('phone').send_keys(name)#這個使用find_element_by_name獲取其元素是否顯示應該就很好判斷
time.sleep(1)
driver.find_element_by_name('password').send_keys(password)
time.sleep(1)
thread.start_new_thread(thread_start_,())
time.sleep(2)

driver.find_element_by_tag_name('button').click()


time.sleep(1)
if ms=={}:
    print "系統錯誤"
elif ms['msg']==u'帳號或密碼錯誤!' and ms['state']==u"0" :
    print "密碼不對"
elif ms['msg']==u"登錄成功..."and ms['state']==u"1" :
    print "密碼正確"
elif ms['msg']==u"驗證碼錯誤!"and ms['state']==u"3" :
    print "驗證碼錯誤"
elif ms['msg']==u"此賬號沒有經過授權,請聯繫管理員!"and ms['state']==u"0" :
    print "賬號錯誤"
else:
    print "系統錯誤"

if(driver.current_url=='http://***.***.***.25:8765/Index/index'):
    print "進入網頁成功"

抓包類login_tst

# -*- coding: utf-8 -*-
from scapy.all import *
import re

ms={}
def GET_print(packet):
    global ms
    for i in packet:
        # po=i.show()#沒有返回值
        print "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"

        qq = i.sprintf("{Raw:%Raw.load%}").split(r"\r\n")  # 獲取數據包內的raw數據 不過該項目沒有raw  呵呵

        for li in qq:

            patm = '{"msg":"(.*?)"'  # 依靠表達式獲取msg內部值
            text_listm = re.compile(patm).findall(str(li))
            pats = ',"state":(.?)'  #獲取state後的一個值
            text_lists = re.compile(pats).findall(str(li))
            if text_listm != []:
                z = 0
                while z < len(text_listm) and z < len(text_lists):
                    # for oo in text_listm and  (ss in text_lists):#顯然是不行

                    oo = text_listm[z]
                    ss = text_lists[z]

                    oo = oo.encode('utf-8').decode('unicode_escape')# 轉為uncode編碼用來顯示漢字
                    o = eval(repr(oo).replace('\\\\', '\\'))

                    #repr()與str()相對 repr可以更清楚的顯示python對數據的處理 str更清楚的顯示用戶可見的信息

                    #  strinfo = re.compile(r'\\\\')  # 字元串有大量\\\ 用來替換 記得前面加r   作廢!!!
                    # oo = strinfo.sub(r'\\', oo)
                    # oo=oo.encode('utf-8').decode('unicode_escape')

                    ms['msg'] = o
                    print ms['msg']

                    ms['state'] = ss.encode('utf-8').decode('unicode_escape')#轉不轉碼無所謂,為了便於管理還是轉碼了
                    z += 1

    print u"--------------"
    return

def stopf(packet):
    global ms
    print ms
    if ms!={}:#判斷是否抓到關鍵包(狀態碼)
        return True  #退出抓包
    else:
        return False #繼續抓包

def GST_start():
    a = sniff(prn=GET_print, lfilter=lambda p: "HTTP/1.1 200 OK" in str(p), filter="tcp and host ***.***.***.25", count=0,stop_filter=stopf)
    # lfilter為抓包篩選語句 作用為只抓含有"HTTP/1.1 200 OK"開頭的包 filter為抓包的BPF語言 包含tcp 以及host的包, count為抓包數,stop_filter退出抓包條件

    return ms




# 遇到的困難有
# 起py名要避開關鍵詞 和其他的包名類名 等等
# linux pip安裝包要上root許可權 打開charm也要開root許可權 sudo su - root
#註意編碼的區別
#如果接收不到值可能是sinff的lfilter或filter的BPF書寫有問題
#uncode編碼非常麻煩儘量最後輸出時再轉換格式
#關於uncode編碼的‘\’轉換 由於python內部不能存在單獨的反斜杠所以替換後都是成對的反斜杠 在進行uncode編碼轉換時會不識別,
# 解決辦法:可以先將字元串先轉換為uncode類型後再替換,替換後字元串會自動變為中文,在字典內輸出顯示依舊為utf8碼,
# 對比uncode編碼字元串時 要註意在字元串前加u 比如:if ms['msg']==u'帳號或密碼錯誤!'
#使用import調用自己寫的類時 註意不要在方法外寫執行函數 如果非要執行請參考 if __name__ == '__main__':
#抓包代碼要寫在按鈕前面  使用線程務必在按鈕事件前激活抓包
#thread.start_new_thread沒有返回值 因為很討厭線程問題所以會避開使用threading類庫繼承之類的方法,儘量簡單一些
#pats = ',"state":(.?)' 的後面(.?)不能跟其他條件 不清楚為什麼? 總之不能跟
#亂碼有可能是ide控制台輸出的問題,也有可能是值的問題,要謹慎思考



#使用到的知識有
#scapy庫:一點點的正則,BPF語句的使用,http傳輸格式,tcp深入瞭解,
#python:全局變數使用,回調的寫法,字典的使用,線程,編碼的區別與更改,類庫絕對路徑與相對路徑的區別,關於亂碼的解決思路,大小寫的註意
#ide:pycharm的一些功能的瞭解,特別是註意選用合適python,這樣pip安裝類庫後才能正常顯示在charm中
#seleium:自動化框架的選擇,http的基本瞭解,可以插入js,各個瀏覽器版本驅動安裝皆不同,
#win是將驅動放入瀏覽器文件夾,寫入環境變數中,linux的我忘了。。
#
#fiddle:都是些基本操作,
#javascript:似乎有框架可以用於ajax 這點屬於知識盲區,方法的重寫與重載,http的網頁格式,



#提升的空間
#使用excel,批量載入數值,真正實現自動化,
#日誌的實現,可以做到無人值守
#選用更好的線程類
#深度優化bpf語句
#優化代碼結構,使scapy類可以得到更好的重用
#減少sleep的使用,優化速度
#對於驗證碼顯示以及網頁各元素顯示的驗證
#自動輸入正確的驗證碼登陸驗證 這點比較有意思 需要找個介面
#還是希望使用純粹的seleium做判斷而不是依據抓包來判斷登入成功

#操作步驟
#登陸-》fiddle抓包——》觀察傳值有哪些,使用哪種方式傳值——》觀察網頁源代碼,js等推斷出值的選用範圍和邏輯方向,-》據此在scapy中編寫bpf寫入sniff
#儘量抓到準確的包-》解析包-》提取關鍵的值來做邏輯判斷-》seleium控制網頁,輸入數值,->scapy新建線程等待抓包,-》點擊確定-》抓到包
#根據數值判斷執行不同方法


#至此學習合計大概花費4天的時間 每天8個小時左右
#抓包scapy,自動化框架seleium,學習加編寫各一天
#linux系統問題一天(我py起名時竟然起了個跟selenium裡面類名一樣的,結果報錯找不到類,我只好把類庫和python裝了卸,卸了裝,足足花了6個小時才解決。。)
#最扯的是linux的更新把瀏覽器內核還更新了 造成原本正常的seleium的瀏覽器內核作廢,我又找了很長時間的錯
#網頁分析一天 工具的選用與設計(至今不懂,登陸裡面的javascript怎麼寫的,原想要寫個js插入進去獲值來判斷是否登陸成功的,但對自己的js功力沒啥信心,還是算了)
#其餘還有很多時間用在了梳理知識 寫筆記,硬剛uncode編碼,win和linux之間的相容性問題上

#至此告一段落 這種自動化成本忒高了 要是滑鼠流早完事邊上喝茶去了

剛學測試和python 寫的一般 讓各位見笑了


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我想從python播放我的歌曲(mp3),你能給我一個最簡單的命令嗎? 這不正確: 解決方案 試試這個。它過於簡單但可能不是最好的方法。 請註意,支持MP3是有限的。 安裝很簡單 - ...
  • 1、環境 2、編譯 預處理: gcc E main.c o main.i 編譯: gcc S main.i o main.s //同時做語法檢查 彙編: gcc c main.s o main.o 鏈接: gcc main.o o main.exe 3、4996錯誤 4、預處理 4.1 巨集 巨集定義 ...
  • 1.add添加 2.discard刪除 3.update批量添加 4.intersection取交集 5.union取並集 6.difference取差集 7.symmetric_difference對稱差集 ...
  • 說,我有一個需求,就是一個臨時功能。由於工作開發問題,我們有一個B項目,需要有一個商品添加的功能,涉及到添加商品內容,比如商品名字,商品描述,商品庫存,商品圖片等。後臺商品添加的介面已經寫完了,但是問題是目前沒有後臺頁面,就是產品還沒有出後臺詳細頁面。前端已經完備了,上線了。後臺還需要工作時間處理。 ...
  • SpringBoot預設使用Tomcat作為嵌入式的Servlet容器; 1、如何定製和修改Servlet容器的相關配置; 1、修改和server有關的配置(ServerProperties【也是EmbeddedServletContainerCustomizer】); 2、編寫一個Embedded ...
  • 說起應用分層,大部分人都會認為這個不是很簡單嘛 就`Controller`,`Service`, `Mapper`三層。看起來簡單,很多人其實並沒有把他們職責劃分開,在很多代碼中,`Controller`做的邏輯比`Service`還多,`Service`往往當成透傳了,這其實是很多人開發代碼都沒有... ...
  • 新聞 "高效的F ,提示與技巧" "Fable 社區資源" "Visual Studio提示與技巧:為.NET增加生產力" "無風險地嘗試Compositional IT的培訓包——如果沒有增加任何價值,可以得到完全退款" ".NET Core與systemd" "在Visual Studio中通過 ...
  • 2019/08/25 1、eclipse 程式安裝 https://www.cnblogs.com/tianxxl/p/10043390.html 網盤路徑:JAVA學習文件 2、資源文件 https://www.cnblogs.com/litexy/p/9746755.html ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...