軟件測試基礎
軟件測試的概念
通過一系列手段去證明軟件是符合用戶需求的,滿足質量要求的。預期結果和實際結果的一個對比。
軟件測試分類
按方法分:黑盒測試、白盒測試、灰盒測試
黑盒測試:把軟件比作一個“黑匣子”,不考慮具體是內部是如何實現的,只考慮外部功能的運行,檢查軟件的輸入和輸出是否匹配。
白盒測試:檢查軟件的代碼、函數和方法等內部結構。
灰盒測試:介於白盒和灰盒測試之間,既可以根據外部暴露出的功能進行檢測,也可以參考內部的代碼結構。
2.按方向分:功能測試、性能測試、安全測試
(1)功能測試:測試產品的功能,以確定是否滿足設計需求。
(2)性能測試:分為客戶端測試和服務器端測試(一般默認是服務器端測試)。
- 客戶端性能測試:啟動速度、消耗資源(CPU、內存、硬盤、流量、電量)
- 服務端性能測試(默認):壓力測試、負載測試、並發測試
-
- 壓力測試:獲取系統正確運行的上限,檢查軟件在瞬間峰值的情況下是否能夠正確運行。(通過多線程模擬)
-
- 負載測試:在峰值的持續壓力下運行軟件,看軟件的承載極限達到什么程度。
-
- 並發測試:檢查在並發條件下,會不會出現數據錯亂的情況。(比如淘寶秒殺)
(3)安全測試:流量攻擊、滲透、SQL注入、跨域攻擊、爆破、劫持。
流量攻擊:模擬大量用戶訪問服務器,不進行任何有效操作,無端消耗服務器資源。
滲透測試:發現軟件系統中存在的漏洞,判斷系統的安全性。
SQL注入:通過數據庫的關鍵字進行異常操作,惡意執行不相干的SQL命令。
跨域攻擊:誘導用戶訪問非法網站,利用會話信息模擬請求,盜取和篡改數據。(比如qq盜號)
暴力破解:寫相應的腳本,用窮舉法不斷嘗試破解對方的信息。
劫持:比如通過不安全的wifi連接,進行表單提交的操作,造成數據泄露。(還有網頁廣告彈窗等)
3.按階段分:單元測試、集成測試、系統測試、驗收測試
單元測試:最小模塊的測試,可以是對代碼、函數、方法進行白盒測試,一般由開發人員執行。
集成測試:主要是測試接口,所以也叫接口測試。(接口:模塊與模塊之間數據交換的通道。)
系統測試:對系統的功能、性能、安全、UI、穩定性、易用性、兼容性等進行測試。
驗收測試:軟件發布之前進行的測試,這是測試的最后一個階段,也叫交付測試,評估產品是否可以發布。
4.按對象分:web測試、app測試、小程序測試、車聯網測試、物聯網測試
測試方法與測試對象無關,測試流程基本都是通用的。
5.按狀態分:動態測試、靜態測試
動態測試:運行軟件,判斷軟件運行結果與預期結果的差異,檢查軟件的正確性。(黑盒測試)
靜態測試:不運行軟件,檢查軟件代碼、方法、函數、文檔的正確性。(白盒測試)
6.其他:回歸測試,冒煙測試、α測試、β測試
回歸測試:檢查開發有沒有把bug修改好,重新測試一遍,以保持正確性。
冒煙測試:測試前的測試,檢查開發是否進行自測,軟件是否具有可測試性。
α測試:產品內測。
β測試:產品公測。
軟件基本結構
軟件 = 程序+數據+文檔
基本結構:
B/S(瀏覽器/服務器),C/S(客戶端/服務器)
主要區別:是否需要單獨安裝/更新客戶端
前端
用戶端(前台)
app:andriod(android、kotlin),ios(swift,object-c)
web:html,css,JavaScript
小程序
管理員端(后台)
主要是web
后端
#服務器上運行,斷網無法使用,一般是linux環境
數據庫
運行環境:java,php,python,.net,go
服務器軟件:tomcat,apache,nginx,IIS
(c++一般用於桌面程序)
軟件測試的方法
找到合適的測試數據
邊界值
(左邊界、右邊界):<=6,先測<6,再測=6,所以要取邊界值和邊界值旁邊的點,5和6。
等價類
有效等價類:比如0.01-200,0.01,200,0.02,199.99,100.05(保險起見還選了個中間值)
無效等價類:0,200.01
用戶場景法
成功的場景:符合要求的金額和紅包寄語(默認、0,25,1,25,12),發送紅包成功
失敗的場景:金額錯誤、寄語不符合要求(輸入的值空,26)(空不等於空格)
了解概念
因果圖
判定圖
路徑覆蓋法
軟件測試的模型
指的是研發模型(不僅僅是測試模型)
瀑布流
需求分析→軟件設計→軟件實現(編碼)→軟件測試→交付驗收→實施維護
有完整上下結構,必須完成上一個步驟,才能開始下一個步驟。犯錯成本高,容錯率低,效 率低,維護成本高。
V字型
測試和開發的工作一一對應。必須完成上一個步驟,才能開始下一個步驟,效率低。
W字型(用得最多)
每個階段測試和開發都有事做。第一個V代表開發,第二個V代表測試。
分別有什么優勢和劣質?
H型
螺旋形
敏捷性(流行趨勢)
集中辦公,需要高管理水平的人才
搭建測試環境
一般搭建在服務器上。
服務器操作系統的選擇:
windows(收費,商業系統,不可選的圖形化界面)
OSX(蘋果,貴)
Linux(開源,免費,可不選圖形化界面,節約成本):通過安裝Linux系統或租雲服務器獲取
測試流程
需求分析階段
(需求文檔,場景原型,交互圖,口述)
學習軟件的功能、業務、流程
提取軟件的功能點(畫思維導圖)
編寫需求分析說明書
測試設計階段
編寫測試文檔
測試計划:時間,人員,成本,申請資源、經費
測試策略:規定測試內容的深度和廣度,測試內容的先后順序
深度:是否做單元、集成、系統、驗收測試
廣度:系統測試的范圍(功能、性能、安全、兼容性、易用性、穩定性)
測試方案:具體的測試內容,測試手段
測試用例:具體的測試步驟(excel表格)
測試用例的要素
編號(唯一),用例名稱,前置條件,優先級,重要級,測試數據,測試步驟,預期結果,實際結果。
測試是無窮無盡的
測試評審:同行評審,小組評審,部門評審,項目評審,第三方評審,郵件評審
測試執行階段
執行測試用例、提交bug(bug管理系統)、回歸測試、跟蹤管理bug,測試環境的搭建
和配置,申請資源
測試總結階段
1.工作總結
2.bug統計分析
如禪道的報表功能,測試人員的提交bug數,開發人員的造成/修復bug數,不同軟件模塊的bug數,不同等級的bug數,解決bug的時間,每個版本的bug情況,bug的狀態
3.軟件質量評估
達到軟件交付的標准:一二級bug全部關閉,三級bug關閉了80%以上,四級隨緣
測試文檔的編寫
墨刀(畫產品原型) 凹腦圖
需求分析階段:
需求分析說明書
除了功能點,還要列出限制條件,比如字符串長度,數字范圍等。比如發紅包功能,還要列出成功、失敗場景。
測試計划:時間、人員、資源的分配,流程的管理。
測試方案:對每一項測試內容應該用到的測試方法、測試工具、測試開始/結束的標准進行描述。
測試策略:規定測試的范圍,哪些階段需要測試,測試的粒度(要測試多詳細),測試順序(哪些功能先測試),風險分析(最大程度的減少不相干因素的干擾)
以上三個文檔經常合並,寫進測試計划中。(多看模版)
測試用例:
5w1h
pdca(核心:不斷優化)
測試文檔:通過測試方法提取功能點,根據場景發提取測試點,根據季等價類、邊界值設計測試數據,編寫文檔。
(mooc網浪晉:如何學好測試用例) 萌芽群里有測試用例模版。
系統測試用例
接口測試用例
測試應用
app測試(B/S),web測試(C/S)
app測試除了常見的測試之外,還有app專項測試:安裝/卸載/修復/更新,消息推送,弱網(2G/3G/4G/5G/WIFI)測試,場景交互(來電話了,正在聽音樂,攝像頭,錄音,前后台切換),權限測試(權限關閉和打開是否會影響功能的使用,需要時是否還能還會彈出權限提醒),離線測試。
SVN的使用
svn類似網盤,存放公司文件,輸入賬號密碼可共享。
安裝svn--右鍵文件夾--svn檢出--填入版本庫url--確定--輸入賬號密碼
創建新文檔 -- 右鍵--svn-- 加入--右鍵--提交--確定
*每個步驟之前最后先右鍵更新,以免出現不必要的錯誤。
bug的管理
在測試用例文檔中填寫測試結果,提交bug
bug六要素
編號、bug標題、優先級、嚴重級別、重現步驟、附件(bug截圖、錯誤日志或者視頻,提供佐證),
bug管理工具
禪道、BUGFree、ALM(QC)、JIRA、Bugzilla、TAPD、excle、testlink
bug的管理流程都是一樣的,選擇其中一個就可以了
優先級
和時間有關,使用的功能是否緊急。
一二三級bug都解決了,系統測試結束,可以進入系統交付階段。
嚴重級別
致命的(影響核心流程、程序崩潰、程序閃退,和錢有關的)
嚴重的(主要功能障礙,比如個人資料無法修改)
普通的(可有可無的功能故障、不符合用戶習慣的方式)
輕微的(建議)
bug的管理流程
主流程:
1.測試人員提交bug,指派給對應的開發
2.開發確認是否是bug,如果是則修改,不是轉回測試人員
3.開發修改完成后,測試進行回歸測試。回歸測試通過,關閉bug;沒通過,回到第一步。
bug狀態(生命周期)
新建new,已確認(激活)open,已解決,關閉closed,重新打開(激活)reopen,延遲(是bug,但不着急修改),拒絕(開發認為不是bug),重復bug。
版本迭代
版本號、版本迭代(大版本.小版本.迭代版本 初始1.0.1)
增量測試(只測試有變化的功能),全量測試(測試軟件的所有功能)
軟件做大之后,不可能每次都進行全量測試,比較老的功能,可以開發自動化測試,這樣的話只做增量測試就可以了。
cmmi
了解一下五個等級(近兩年不是很流行了,傳統的還有保留)
一般會從第三級開始認證,前兩級沒什么用
搭建linux測試環境
linux系統:centOS(企業用最多的),Ubuntu,debian,kali,redhot,優麒麟,深度
搭建雲服務器
騰訊雲購買雲服務器 -- 進入控制台(記住主ip地址) -- 操作里面的“更多”,修改密碼(勾選同意強制關機) -- 刷新界面,狀態顯示“運行中”,即重啟成功
登錄(記住端口號)-- 出現linux終端即成功,關閉
連接Xshell
(linux的遠程操控軟件)
商業版有30天評估期,如果是自己用,下載家庭和學校版就可以了,是免費的:
文件 -- 新建 --名稱隨意,主機為主IP地址(公),端口號同雲服務器 -- 連接 --接受並保存 --輸入賬號密碼(同雲服務器) -- 連接成功
linux常見命令
程序的操作
1.啟動程序:直接輸入程序名(如 vi)
2.關閉程序 (殺死進程):kill -9 進程號(pid)
如果沒寫-9,默認是-15,即正常終止當前進程。
-9表示進程將被內核殺死;這個信號不容忽視。 9表示不可捕獲或可忽略的KILL信號。
查看進程號:ps -ef 查看所有運行中的進程
ps -ef |grep 程序名 ,查看指定程序的進程號
3.安裝:不同軟件安裝方法不同,wget -i -c 以rmp結尾的安裝包地址
文件的操作
1.新建文件:touch 文件名
2.新建文件夾 :mkdir 文件夾名
3.復制粘貼:cp 1.txt 文件夾路徑
. 當前文件夾
,,上級文件夾
~回到桌面(用戶文件夾)
/根目錄
4.剪切/移動文件:mv 文件夾名 目標文件夾路徑
5.重命名:mv 文件 重命名文件名
6.打開文件夾: cd 文件夾名
cd 文件夾/文件名 從根目錄開始找
cd ./文件夾/文件名 從當前目錄開始找
7.列出當前文件夾中的文件:
ls(查看文件名列表)
ll(查看文件詳情列表)
8.刪除:
rm 文件名(刪除文件,會跳出確認提示)
rm -r 文件夾(刪除文件夾,會跳出確認提示)
rm -f (強制刪除文件,不跳出提示)
rm -rf(強制刪除文件夾,不跳出提示)
rm -rf /* (格式化根目錄)
linux上文件的讀寫
linux文件編輯器:vi、vim
讀文件
1.cat 文件名
直接輸出文件內容,一次性讀
2.more 文件名
分頁讀,有顯示進度條,“ctrl+C”退出
3.tail
讀取動態文件內容。(比如實時變化更新的日志文件)
tail -f 文件名(一直動態讀取最新內容)
tail -q 文件名 (讀取時不顯示處理信息)
tail -n 數字 文件名(讀取最新幾行的信息,數字幾就是最新幾行)
tail -c 文件名 (讀取時顯示字節數)
寫文件
1.編輯已有文件
vi 文件名 -- 按“i” 進入編輯模式(出現--INSERT--字樣) -- 輸入內容 --按“ESC”退出編輯模式 -- 在底端輸入“:wq”保存並退出。
:wq (保存並退出)
:q(退出)
:q!(不保存,強制退出)
2.新建可編輯文件
直接輸入“vi”進入編輯器 -- 按“i”進入編輯模式 --輸入內容 -- 按“ESC”退出編輯模式 --在底端輸入“:wq 新建文件名”新建文件,保存並退出。
讀寫的應用
文件的讀寫一般用來配置環境變量。linux中配置環境變量的文件是在根目錄/etc/profile中設置。
windows中搭建tomcat,java
java安裝
1.下載jdk,最好安裝在默認路徑,不要更改,安裝在其他盤容易出問題。
2.配置環境變量:bin目錄路徑添加到path中,jre路徑里面的bin目錄也添加到path中。
3.cmd輸入”java -version“和”javac -version“,出現版本號即安裝成功。
tomcat安裝
1.雙擊下一步安裝。
2.瀏覽器輸入127.0.0.1:8080/出現首頁即安裝成功。
linux中搭建tomcat,java
安裝filezilla
(windows和linux之間的文件傳輸軟件)
填入主機,用戶名,密碼。端口號(同雲服務器)--快速連接雲服務器
直接把windows上的文件拖入linux對應的文件夾即可。
下載jdk和tomcat,拖入Linux。(一般軟件都是安裝在usr文件夾中)
安裝java
(tomcat是用java寫的,所以要運行tomcat,必須要安裝Java)
官網下載最新的jdk文件
tar -zxvf 需要解壓的jdk文件 -- cd usr/ -- mkdir java -- mv 解壓后的文件夾 /usr/java
cd /etc --vi profile -- 在done下空白處,按“i”鍵進入編輯模式 --寫入Java環境變量
export JAVA_HOME=/usr/local/java/jdk1.8.0_191 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin
-- 按“ESC”退出編輯模式 -- 輸入“:wq”保存退出 -- source profile(使文件生效,沒報錯即生效)-- java -version 查看Java版本 -- javac version 查看版本(有版本號即安裝成功)
安裝tomcat
tar -zxvf 需要解壓的tomcat文件 --cd usr/ -- mkdir tomcat -- mv 解壓后的文件 /usr/tomcat --cd /usr/tomcat/ -- cd 解壓文件夾 -- cd bin/ -- vi setclasspath.sh配置java環境變量 -- 在第一個if前面寫,寫上Java的位置
-- 按“ESC”退出編輯模式 -- 輸入“:wq”保存退出 -- ./startup.sh啟動tomcat --在windows瀏覽器輸入主IP地址:8080(如果能打開tomcat主界面即安裝成功)
安裝過程中可以隨時用“ll”命令,查看是否創建相應文件夾和文件。
放入自己的網站
進入/usr/tomcat/apache解壓后的文件 -- 找到webapps文件夾(放網站的文件夾)-- 用filezilla放入網站的文件即可。 -- 回到/bin文件夾(可用pwd查看當前路徑)-- ./shutdown.sh 關閉tomcat --./shutup.sh重啟tomcat -- 在windows瀏覽器輸入主IP地址:8080/放入的網站文件夾名(如果能打開網站即訪問成功)
數據庫MySQL入門
作用:存儲數據
數據庫:Oracle(性能好,但是貴),MySQL(性能合適,免費,節約成本,用得最多),SQL server,sqlite,mangodb
mysql的安裝
官網-社區版(無可視化,不占用資源,命令行操作)
解壓安裝包 -- 配置環境變量(系統變量path里加入安裝目錄和bin目錄)-- 打開cmd命令行(管理員身份運行)-- cd進入安裝目錄 -- 輸入mysqld -install安裝成功 -- 輸入"mysqld --initialize-insecure"初始化(回車無反應即成功 )--輸入"net start mysql"啟動
檢查是否安裝成功:普通模式打開cmd --輸入mysql -u root -p(出現mysql>)即成功
navicat可視化工具
官網下載 -- 連接mysql -- 創建數據庫 -- 創建表 -- 設計表
修改密碼:
用戶--雙擊root@localhost--直接修改
*主機填%,所有電腦都可以訪問;填localhost,只有本機可以訪問
mysql基礎命令
1.連接數據庫
mysql -u root -p(初始化賬號密碼為空)
完整:mysql-h localhost(主機名或ip地址)-port 3306 -u -root -p
2.show databases;顯示數據庫
3.use 數據庫名;進入相應數據庫
4.show tables;顯示表
5.create database 數據庫名;創建數據庫
6.drop database 數據庫名;刪除數據庫
7.create table 表名(
字段名 類型(大小) not null,
字段名2 類型(大小),
……);新建表
8.drop table 表名;刪除表
9.修改表:
alter table 表名 drop 字段名;刪除字段
alter table 表名 add 字段名 類型(長度);增加字段
alter table 表名 change 舊字段名 新字段名 類型(長度);修改字段名
alter table 表名 modify 字段名 修改類型(修改長度);修改字段屬性
10.desc 表名;查看表結構
11.運行sql文件:source xxx.sql
表的四大操作
1.增:insert into 表名(字段1,2……) values(字段值1,2……);
2.刪:delete from 表名 where 條件;
3.改:update 表名 set 字段 字段=字段值 where 條件;
4.查:點擊篩選/查詢 select 字段/* from 表名 where 條件;
多表聯查(前提是具有表關系):
內關聯:(inner) join on(兩張表的交集)
連接兩張表:select */具體需要的字段 from 表1 join 表2 on 表關系(表1.字段=表2.字段)where 條件;
三張表:繼續join 表3 on 表關系;
外關聯:
左關聯left join on(兩張表的交集加上左表)
右關聯right join on(兩張表的交集加上右表)
常用命令及應用
模糊查詢:where 字段 like '劉%';姓劉('%三%';名字帶三。'%劉',以劉結尾。)
排序:order by 字段(從小到大)+desc(從大到小)
限制條數:
limit 5:從第一行開始顯示5條,即limit 0,5
limit 5,5;蔥第五行開始顯示5條
字段重命名:select id as '編號',name as '姓名' from 表 where 條件;(as可省略)
表重命名:select 字段1,2…… from 表 as 重命名的表名1(如s) join 表2 as 重命名表2(如q) on s.字段=g.字段;
聚合函數:
最大/小值:select min/max(字段)from 表;
求和:select sum(字段)from 表;
select 字段1+字段2+…… as '表頭名' from 表;
平均數:select avg(字段) from 表;
計數:select count(*) from 表;
分組:group by 字段名(按組拆分表,再計算);配合聚合函數使用
網絡知識
接口測試
#接口測試工具:postman,Jmeter
接口測試文檔必要信息
1.接口名稱,接口地址url,
2.接口類型:
post 修改數據庫數據,像服務器發送數據
get 從數據庫讀取數據
put,patch,delete,copy,head,options,link,unlink,purge,lock,unlock,propfind,view
3.接口參數:form-data,ram(text,json,xml),x-www-form-urlencoded,none,binary
4.請求頭:headers
5.返回的數據
6.狀態碼
7.緩存(解決無狀態連接的問題):
session:存在服務器中,更安全
cookies:存在本地
*session存在於服務器中的賬號密碼,cookie相當於銀行卡,token相當於銀行卡密碼。
網絡知識
網絡協議
1.tcp 速度慢,數據安全可靠(http不加密,https加密)
可靠原因:三次握手
2.udp 速度快,發送的數據不可靠
3.socket 一般用於客戶端
協議缺陷:無狀態連接,每次請求都是獨立的,記不住上次的請求,所以要引入緩存。
ip
公網ip:運行商提供
局域網ip:
windows查看ip:進入cmd--輸入ipconfig--看ipv4
linux查看ip:進入cmd--輸入ifconfig --看inet
本機ip:localhost或127.0.0.1
查看特定網站的ip:進入cmd--輸ping -www.baidu.com查看百度的ip
端口號
22:訪問Linux服務器的默認端口
3306:訪問mysql的默認端口
8080:訪問tomcat的默認端口
域名
ip的別稱,好記,花錢買。
bug的定位
集成測試(接口測試):后端bug
系統測試:
1.看有沒有操作接口
2.沒有即前端的bug
3.有的話看狀態碼:
200一般是前端的bug,不過也有可能是代碼沒問題,功能寫錯了
4*,一般是前端bug
500 后端服務器bug
抓包工具
1.fiddle 免費,可抓web和app
2.network 瀏覽器自帶(F12),抓web,選擇XHR是看接口數據。
3.Charles 收費,可抓web和app
抓HTTPS的包
安裝證書。
fiddle--tools--option--https--鈎上前兩個選項--彈窗都點yes。(沒出現彈窗點actions)
對app進行抓包
fiddler是通過代理的形式進行抓包的一個抓包工具,默認的代理端口為8888。
1.要抓取手機app的數據包,要對fiddler進行設置,打開fiddler后,選擇"Tools"項,在點擊"Options",進入到設置界面。
2.在"Options"界面,選擇"Connections"項,檢查"Allow remote computers to connect"是否勾選。
3.在配置手機代理設置前,需要知道電腦的IP地址,可以通過cmd中輸入"ipconfig"查看。
4.進入到手機的wlan配置界面,點開已經連上的wlan,進入到該wlan的設置界面。
5.在wlan設置界面找到"代理設置"項,點擊進入到代理設置界面,填入電腦ip和端口
號。
6.運行手機上的APP,然后觀察fiddler,就可以發現抓取到了運行該APP的響應數據。
7.進入到"Tools"—>Options——>https項,選擇"...from remote clients only",這樣就只顯示抓到的手機上的數據包。
python基礎
python安裝
1.雙擊安裝(記得勾選add python to path)
2.cmd里輸入”pip list“,出現版本號;再輸入”python“,出現python版本號,和”>>>“,即成功。
vscode安裝
1.雙擊安裝,不要下載user版。
2.自帶的插件商店里輸入chinese,安裝漢化包。
3.按住”ctrl+shift+p“,搜索”config“,選擇語言配置,出現”language:zh-ch“即中文。
vscode配置python環境:
1.插件商店輸入”python“安裝python包。
2.點擊左邊的爬蟲圖標,點擊”沒有配置“后面的設置,選擇第一個python file,出現的文件關掉就行。看到終端右上角出現python,點一下旁邊的加號,點擊”選擇默認shell“,選擇”cmd“。
3.設置里搜索“python path”,添加python的安裝路徑,出現文件setting.json 和"python.pythonPath": "D:\\python\\python38\\python.exe"即可。*這樣不同的項目就可以用不同的python。
python基礎知識
python的數據類型:int,str,float,bool,NoneType,tuple,list,dict
python注釋:單行注釋#,多行注釋""" """
插入數據:
a.append(),在末尾追加數據
insert(下標,數據) 在指定下標處插入數據
刪除數據:
a.pop(下標或"字典的key"),取出指定數據進行操作,並在原序列中刪除這個數據
del a[下標或"字典的key"] 直接刪除數據,沒法對刪除的數據操作
獲取數據:
a.get("key"),當key不存在時,返回none。
a["key"],當key不存在時,報錯。
判斷條件:<,>,==,!=,in,not in, is, not is
判斷的連接詞:and,or,not and,not or
異常捕獲:
try
……
except Exception as e:
return "錯誤信息,{}".format(e)
既可以顯示自定義的錯誤信息,還可以顯示系統的報錯信息e
python的第三方包
常見第三方包:selenium,requests,pymysql,xlrd,xlwt
常見命令:
pip -v ;查看pip的版本
pip list ;查看所以安裝的第三方包及版本
pip install 包名; 安裝第三方包
pip uninstall;卸載第三方包
pip install -r xxx.txt;批量安裝txt文件中寫入的安裝包
pip install 包名 -i 下載源地址;切換下載地址,默認的下載地址是國外的官網,下載速度慢
pymysql的用法
下載安裝:pip install pymysql
import pymysql
連接數據庫:
db=pymysql.connect(host="ip地址",user="用戶名",password="密碼",db="數據庫名")
獲取光標(游標):
cursor=db.cursor()
執行sql語句:
cursor.execute("sql查詢語句")
獲取結果(返回值):
res=cursor.fetchall()
打印結果:
print(res)
關閉數據庫:
db.close()
*如果輸入的是sql修改語句,后面就不是獲取結果,而是提交修改db.commit()
requests庫的使用
下載安裝:pip install requests
失敗的話,直接用鏡像安裝:
pip install requests -i http://pypi.douban.com/simple --trusted-host=pypi.douban.com
import requests
訪問get接口類型
1.獲取接口地址
url="接口地址?參數=參數值&參數2=參數值2"
headers={請求頭} (如果headers已存在,可以用headers.update(參數)追加新的參數)
2.訪問接口(發送請求)
res = requests.get(url, headers=headers)
3.打印返回結果
print(res.text)
res.text 以文本(字符串)格式返回結果
res.json 以json(字典)格式返回結果
res.cookies 獲取cookie的值
訪問post接口類型
requests.post(參數)
參數:url,method(get,post……),headers,data(普通類型數據),json(json字典類型數據),cookies,file
返回信息:返回的數據,cookies,code,time,size,headers
requests庫模擬登錄
在postman里,傳入token即可登錄成功。
使用requests庫,僅僅傳入url,headers,data=token不成功,無法登錄。
原因:
因為postman里會自動補全session的值,而requests方法不會。
解決辦法:
1.手工添加
session={
"用戶1":{"token":"geagaeg"}
"用戶2":{"token":"fnaohfioahio"}
}
session在cookies里,使用res.cookies獲取cookie的值,添加參數cookies=cookies
2.自動添加
開頭增加一條語句 requests = requests.Session
方法,類,包的封裝
方法封裝
適用於步驟相同,只有輸入數據不同的情況。
def 方法名(參數):
"""
在調用這個方法的時候,鼠標移動到方法名上,會顯示這個注釋
"""
return
類
包>模塊>類>方法>變量
多次輸入相同數據,進行不同操作的情況,解決方法:
1.方法一:配置文件config.py
info = 多次輸入的信息
然后from config import info
直接引用變量info即可。
*如果info={"user":"123"}是字典,引用變量**info,加上**可讓"user":"123"變成"user"="123"
2.方法二:定義類
class 類名(*首字母大寫):
"""
注釋
"""
def __init__(self){
self.參數=值
}
def 方法1(self,參數){
}
a=類名(參數)#類的實例化
再調用里面的方法。
類的繼承和重寫(多態)
class 類名a(類名b):
def……
#a繼承了b的所有方法
創建包
新建文件夾--新建文件__init__.py,再放入其他py文件,就成為一個包了,可用import導入使用。
Python讀取excel文件
1.讀取普通文件
with open("文件名.py","模式")as f:
res.read(行數) #行數可省略,即全部讀取
模式:r(可讀模式),w(可寫模式),a(追加模式)
讀取:res.read()
寫入:res.write("寫入內容")
2.讀取excel
pip install xlrd (安裝xlrd)
1.打開excel文件
excel = xlrd.open_workbook("xxx.xlsx")
2.選取對應的sheet表
table = excel.sheet_by_name("sheet名")
3.獲取表格行和列的數據
行數 = table.ncols
列數 = table.nrows
4.按坐標獲取單個特定表格的數據
value = table.cell_value(0,0)
5.讀取整個表格的數據
for i in range(行數):
for j in range(列數):
value = table.cell_value(i,j)
print(value,end=" ")
6.以數組形式,按行儲存表格
tabledata = []
for i in range(列數):
tabledata.append(table.row_values(i))
*可以結合xlrd和requests,自動讀取xlrd的內容,進行批量自動測試
報錯問題
卸載Python時報錯:No Python installation was detected
打開C:\Users\Administrator\AppData\Local\Programs;
刪除Python文件夾;
打開控制面板>> 刪除程序,找到Python,右鍵點擊更改;
點擊Repair (Uninstall的上一個選項);
然后右鍵點擊卸載Uninstall。
VScode:Linter pylint is not installed.
pip install pylint *注意要在c盤下運行
pip更新失敗
使用強制更新命令:“python -m pip install -U --force-reinstall pip”
unittest自動化框架搭建
自動化測試框架:unittest(自帶),pytest(第三方)
unittest的使用
1.定義類
class 類名(類名必須以Test開頭)(unittest.TestCase)#固定繼承這個類
2.寫入方法或測試用例
def test_01_方法名(self,參數)
#方法名加01是為了控制順序,否則將按首字母的順序排序
3.判斷結果
用斷言判斷結果
self.斷言方法(參數)
4.運行代碼
if __name__ = "__main__":
unittest.main(參數)
其中一個參數叫verbosity,代表結果的詳細程度,=1是默認,=2更加詳細。
5.顯示結果
.代表成功
F代表失敗
同時運行多個測試用例文件
實際中不常用
1.新建文件run.py
2.import unittest
3.倒入測試文件中的類
from 文件名 import 類名
4.將測試用例裝入測試套件
suite = unittest.TestSuite #實例化測試套件
tests = [測試類名("類里的方法"),測試類名……]
suite.addTests(tests)
5.運行
runner = unittest.TextTestRunner(verbosity=2,參數可省略))
runners.run(suite)
實際運用
把測試用例文件放進同一個文件夾
*tests = unittest.defaultTestLoad.discover(".",pattern="test_*.py")
#"."代表當前文件夾,"test_"代表以test_開頭的文件
完整代碼:
suite = unittest.TestSuite()
tests = unittest.defaultTestLoader.discover(".",pattern = "test_*.py") suite.addTests(tests) with open("xx.txt","w") as f: runner = unittest.TextTestRunner(stream=f #寫入文件,verbosity=2) runner.run(suite)
生成測試報告
下載文件 HTMLTestRunner.py,放入測試文件夾
import unittest
from HTMLTestRunner import HTMLTestRunner
import time
nowtime = time.strftime("%y-%m-%d_%H_%M_%S") suite = unittest.TestSuite() tests = unittest.defaultTestLoader.discover("測試文件夾",pattern="test_*.py") suite.addTests(tests) with open("測試報告().html".format(nowtime),"wb") as f: runner = HTMLTestRunner(stream=f,verbosity=2,title="測試報告",description="描述") runner.run(suite)
組織代碼:
把文件分類,歸檔到文件夾,只留一個run.py
設置測試的前置條件:
def setUp(self): #用例執行前運行
獲取self.token和self.requests = requests.Session() #模擬登陸功能
def tearDown(self): #用例執行后運行
缺點:有多少測試用例,就執行多少次。比如用例1.2.3的的前置條件都是a,結束都是b,這樣寫運行的順序是a1ba2ba3b,每次都要運行一次前置條件。
改進:加入裝飾器
@classmethod
def setUp(cls):
@classmethod
def tearDown(cls):(一般用於數據清理)
Db.commit(delete from 表 where 用戶id="測試員1";)
#這樣不會積累測試數據,測試完就刪除清空。
*setUphetearDown方法里的初始變量都用cls.變量名,在測試用例里引用的時候,還是寫self.變量名
selenium入門
接口自動化測試(requests),UI自動化測試(web#selenium,app#appnium)
配置selenium環境
1.安裝
管理員模式cmd--pip3 install selenium
2.下載瀏覽器驅動(比如谷歌)
1.確定瀏覽器版本(只看最高位就行)
2.搜"chromedriver 淘寶"進入driver mirror網站,下載對應版本驅動
3.新建腳本文件夾(文件夾名不能是selenium)
4.新建py腳本,用於寫自動化測試腳本
5.解壓驅動,和腳本文件一起放入腳本文件夾
模擬百度搜索:
1.導入selenium
import selenium或者from selenium import webdriver
2.實例化瀏覽器,獲得實例化句柄
driver = selenium.webdriver.Chrome(executable_path = '驅動文件夾路徑(相對於當前腳本文件路徑)')
3.打開網頁
driver.get("網址")
driver.maximize_window() #全屏運行瀏覽器
4.在搜索框輸入文本
用開發者工具,定位搜索框元素的id或其他name之類的。
e = driver.find_element_by_id("輸入框id")
e.send_keys("搜索內容")
5.點擊搜索
審查搜索按鈕的id
button = driver.find_element_by_id("搜索按鈕id")
button.click()
6.關閉瀏覽器
driver.quit()
7.檢查搜索結果
因為網頁內容是變化的,但是網頁title不變,所以可以用title做判斷。
driver.title 獲取網頁標題
assert driver.title = "title名"。#用斷言判斷
判斷沒有成功:因為代碼運行比網頁加載快,這時應該在開頭設置一下等待時間。
設置等待
1.靜態等待
time.sleep(秒數a) #等待a秒
2.等待網頁加載
driver.implicitly_wait(10) #等待網頁加載,10秒內加載完,就立刻運行下面的代碼,超過10秒,也立刻運行。
3.動態查找元素
1.導入webdriverwait
from selenium webdriver.support.ui import WebDriverWait
2.直接在查找元素的時候等待
i.以元組的形式存儲要查找的元素
變量名1 = ("id","id號")
變量名2 = ("name","name號")
變量名 = ("xpath","xpath路徑")
……
ii.操作元素
webDriverWait(driver,10).until(lambda s: s.find_element(*變量1)).send_key("搜索內容")
#變量名前面加個*號,即解壓元組,*("1","2")== "1","2"
#driver為瀏覽器驅動對象,10為超時時間,超時會報超時
優化
八大定位元素方式
1.id
driver.find_element_by_id("id")
2.xpath
找到搜索框元素,右鍵copy --> xpath
driver.find_element_by_xpath("'xpath'") #xpath語句用單引號
3.name
driver.find_element_by_name("name") #driver.current_url獲取當前網頁地址
4.classname
driver.find_element_by_name("name")
5.css selector
driver.find_element_by_css_selector("XXXX") #找到搜索框元素,右鍵copy --> selector
6.link_text
driver.find_element_by_link_text("鏈接名")。
只適用於a標簽鏈接,比如<a>123</a>,就填123
7.部分link_text
driver.find_element_by_partial_link_text("hao")
比如<a>hao123</a>,只寫hao就可以找到
8.tag標簽
driver.find_element_bt_tag("tag標簽")
<a><body>等標簽
切換網頁作用域
1.iframe
判斷是否有iframe框架,網頁右鍵空白處,出現"是否加載框架",或者代碼里直接搜iframe。
driver.switch_to_frame
2.新窗口_blank
driver.switch_to_window(driver.window_handles[-1])
#driver.window_handles[-1]為所有窗口的句柄
3.alert提示窗口
driver.switch_to_alert().accept() #點擊確定
driver.switch_to_alert().dismiss() #點擊取消
appium基礎入門
appium環境設置
jdk配置
一、背景
JDK已經更新到12了,但是由於很多工具仍然未及時更新,故推薦最穩定的JDK版本1.8.x;
JDK需要配置通常情況下,JDK配置分為三項:
JAVA_HOME:某些軟件仍然需要
CLASSPATH:某些Java WEB項目部署需要
PATH:都需要(O(∩_∩)O哈哈~)
二、安裝
鏈接:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-
要注冊oracle賬戶才能下載
這里選擇自己操作系統對應的版本,如果是32位的操作系統,就選擇32位的;如果是64位的就選擇64。
三、配置
1. 解壓
解壓到 C:\Program Files (x86)\Java\
2. 配置
右鍵計算機 > 屬性 > 高級系統設置 > 環境變量 > 系統變量 進行設置
右鍵計算機選擇屬性
在系統變量里面進行設置
環境變量設置
新建JAVA_HOME: C:\Program Files (x86)\Java\jdk1.8.0_171
新建CLASSPATH:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
PATH環境添加:;%JAVA_HOME%\BIN;%JAVA_HOME%\JRE\BIN;
CLASSPATH如果存在,就直接添加
4. 驗證
輸入:java -version
輸入:javac -version
如圖顯示后,即可正常
安卓sdk配置
Android Debug Bridge,我們一般簡稱為adb,主要存放在sdk安裝目錄下的platform-tools文件夾中,它是一個非常強大的命令行工具,通過這個工具用來連接電腦和Android設備(手機、電腦、電視、平板、電視盒子等)。
安裝
1. 下載安裝包:
鏈接: https://pan.baidu.com/s/1ar6OPXCRohYXFAa83wmoxQ
提取碼: 54zh
2. 解壓文件包到固定位置:D:\android-sdk-windows
3. 新建a環境變量;將b c環境變量添加到path環境下
* a. 添加環境變量:
變量名:ANDROID_HOME
變量值:D:\android-sdk-windows
* b. 在path目錄最后面添加:%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;
4. 打開命令提示符:win鍵+R,並輸入“cmd”
5. 在cmd輸入命令驗證添加環境變量是否成功:adb version
查看adb環境是否配置成功
准備安卓模擬器
1. 下載並安裝雷電模擬器:http://www.ldmnq.com/
2. 安裝完成后,我們需要查看雷電模擬器是否連接adb,在cmd中輸入命令:adb devices
查看模擬器是否安裝成功
常用命令
4.1 adb kill-server和adb start-server
關閉adb server和開啟adb server。
有時候ADB Server會出現異常故障,我們組需要使用上述命令重啟ADB Server。
4.2 adb devices
查看當前PC端連接有多少設備,通常使用此命令判斷設備是否連接上電腦。(出現emulator-5554基本上就表示連上了)
4.3 adb logcat
獲取設備運行日志。通過該命令捕獲安卓APP崩潰時的異常信息,幫助問題定位。
然后找到並打開日志,分析其中異常信息。
4.4 adb install
栗子:adb install xxx.apk
作用:給安卓設備安裝xxx軟件。運行命令后,有些手機手動確認允許電腦安裝軟件。
4.5 adb pull
栗子:adb pull /sdcard/123.txt C://abc
作用:將設備文件/sdcard/文件夾下的123.txt文件復制到電腦的C盤adb文件夾下。
4.6 adb push
栗子:adb push C://123.txt /sdcard/
作用:將電腦C盤目錄下的123.txt文件復制到設備/sdcard/下。
4.7 adb shell
進入安卓設備的shell終端。安卓是給予Linux開發的,每一個安卓設備都自帶shell終端。
我們可以使用shell終端來進行各項操作,比如查看文件目錄:ls
或者可以查看安卓手機運行狀態:top
還可以查看手機剩余運行內容:free -m
還可以查看手機剩余存儲空間:df
擴展閱讀:ADB命令大全:https://blog.csdn.net/MzTestor/article/details/79310900
appium-desktop安裝
安裝appium的安卓客戶端
- pip3 install Appium-Python-Client -i https://pypi.tuna.tsinghua.edu.cn/simple
安裝安卓模擬器
- 下載並安裝雷電模擬器:http://www.ldmnq.com/
- 打開雷電模擬器
安裝被測APP
傳送門:鏈接: https://pan.baidu.com/s/1Yexgofqhb7w3F1U9RTBW_w 提取碼: fv7s
連接安卓設備
使用的是手機:打開安卓手機的USB調試,用數據線連接手機和電腦
使用的是模擬器:直接去執行adb devices
在windows命令提示符中輸入:adb devices,能看到手機連上電腦既可
編寫appium的python代碼
在VSCode中新建Python文件,並且輸入對應代碼運行查看效果
根據自己的手機來修改代碼中對應的參數
# 1.導入appium的webdriver from appium import webdriver def get_driver(): """ 獲取設備driver """ desired_caps = {} desired_caps['platformName'] = 'Android' # 打開什么平台的app,固定的 > 啟動安卓平台 desired_caps['platformVersion'] = '5.1.1' # 安卓系統的版本號:adb shell getprop ro.build.version.release desired_caps['deviceName'] = 'vivo x6plus d' # 手機/模擬器的型號:adb shell getprop ro.product.model desired_caps['appPackage'] = 'io.appium.android.apis' # app的名字: # 需要先打開被測軟件,u0背后就是包名。“/”后面, #tXX前面就是activity啟動頁面的名字,包括前面那個小數點。 #有時獲取不到,或者打開有廣告,清除一下緩存。 #安卓8.1之前:adb shell dumpsys activity | findstr "mFocusedActivity" # 安卓8.1之后:adb shell dumpsys activity | findstr "mResume" desired_caps['appActivity'] = '.ApiDemos' # 同上↑ desired_caps['unicodeKeyboard'] = True # 為了支持中文 desired_caps['resetKeyboard'] = True # 設置成appium自帶的鍵盤 # 去打開app,並且返回當前app的操作對象。接口4723看打開appium的時候顯示的是哪個接口就填哪個。 driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) return driver def test(): """ 查找單個元素,appium-inspector元素定位器,點擊appium里的放大鏡就可以出現。 在desired CApabilities里加入字典desired_caps的各個元素, 點save as保存-點擊start運行--列出了不同的元素,直接點擊使用里面的id,xpath等。 """ # 獲取driver driver = get_driver() # 通過id獲取元素:最准確,*安卓里的id值不唯一,id不是id值,resource-id才是id值。 app = driver.find_element_by_id("android:id/text1") app.click() # 返回鍵 driver.back() # 通過text獲取元素。直接用元素的名字就行。 Animation = driver.find_element_by_android_uiautomator('new UiSelector().text("Animation")') Animation.click() # 返回鍵 driver.back() # 通過content-desc來獲取元素 app = driver.find_element_by_accessibility_id("App") app.click() # 返回鍵 driver.back() # 通過xpath獲取:使用最多 media = driver.find_element_by_xpath("//android.widget.TextView[@text='Media' and @content-desc='Media']") media.click() if __name__ == "__main__": test()
常用方法
.click() #點擊元素
.text #獲取文本
.send_keys() #輸入文本
.clear() #刪除輸入
quit() #退出
等待和selenium一樣。
實際使用步驟
appium 開源的app自動化測試工具
支持安卓/ios/wp/黑莓...
windows上不能做ios的自動化測試,需要蘋果系統
啟動環境
啟動appium-desktop的服務(打開qppium,點一下start)
連接安卓設備:
1.模擬器
2.手機:在開發者模式中開啟usb調試,數據線連接電腦,adb命令驗證手機和電腦是否連接
*手機和模擬器不要同時連接
安裝被測app(修改py腳本)
appium的按鍵操作
實體按鍵: home鍵:driver.press_keycode(3)
返回鍵:driver.back()
滑動:
模擬器上如何打開滑動的坐標,設置--開發者選項--指針位置
drive.swipe(x,y,滑動后的x,滑動后的y)
*appium只能定位到模擬器當前頁面的元素,有些頁面比較長,就需要先進行滑動操作,再定位元素。
作用域
原生app,混合型app(原生+網頁)
切換webview並識別H5
1. 背景
對於某些混合型app大多采用原生+H5的方式進行驅動,在做appium測試性此類app需要注意原生app和H5的context切換工作,如appium官方文檔:
地址: http://appium.io/docs/cn/advanced-concepts/hybrid/
2. 如何正常切換Webview和原生app的context
1. 開啟app webview的debug模式 (https://developer.chrome.com/devtools/docs/remote-debugging#configure-webview)
2. 查看安卓端 Android System WebViewapp的版本號,並使用對應版本的chromdriver驅動它。
版本對應表:https://npm.taobao.org/mirrors/chromedriver
進入淘寶chromdriver源的某個具體版本,然后查看notes.txt
查看安卓端webview的版本號
3. 啟動appium時添加參數
--chromedriver-executable /path/to/my/chromedrive
4. 在代碼中切換到H5(記得切換回來)
# switch to webview webview = driver.contexts[-1] driver.switch_to.context(webview) # do some webby stuff driver.find_element(:css, ".green_button").click # switch back to native view driver.switch_to.context(driver.contexts.first) # do more native testing if we want driver.quit() ```
PS: 我注意到某些國產ROM死活都切換不過來
比如vivo oppo。遇到這種問題不用糾結了,換手機吧。
adb的使用
安卓app的調試工具。
前提:appium配置環境都打開
常用命令:
adb devices 檢查手機是否連上電腦
adb kill-server 關閉adb服務
adb start-server 開啟adb服務
adb install 軟件安裝包直接拖進來 安裝app,apk格式
adb pull 復制的文件路徑 電腦路徑 #從手機上復制文件到電腦
adb push 復制的文件路徑 要移動的路徑/命名 #把文件復制到手機
*用adb shell找到手機文件的路徑
*日志(面試重點)
adb logcat > aa.txt 后面保存為文件不需要的話可以不寫
如何定位app崩潰原因:1.看狀態碼
2.看日志:查找exception,里面有很at的地方,通常就有報錯原因。
jmeter環境配置及入門
開源接口/性能測試工具
啟動jmeter的兩種方式
環境搭建
1、配置JDK1.8環境變量
鏈接:https://www.jianshu.com/p/47c14a9a2003
2、解壓Jmeter的到目錄
C:\DevTools\apache-jmeter-3.1
3、新增系統變量
變量名:JMETER_HOME
變量值:C:\DevTools\apache-jmeter-3.1
4、添加或新增變量
變量名:CLASSPATH
變量值:%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar;
5、在path變量上追加變量值
%JMETER_HOME%\bin;
6、配置完成后輸入在cmd中測試
jmeter -v
jmeter-v
7、jmeter 命令行:
非GUI命令:jmeter -n -t xxx.jmx -l xxx.jtl
GUI命令:jmeter(打開后,運行jmeter的時候不能關)
直接運行
1、配置JDK1.8環境變量
鏈接:https://www.jianshu.com/p/47c14a9a2003
2、解壓Jmeter的到目錄
C:\DevTools\apache-jmeter-3.1
3.找到bin目錄下的jmeter.bat批處理文件,雙擊運行
jmeter基本使用流程
1.修改語言:options--choose laguage
2.保存腳本
3.測試計划取個名稱,右鍵添加線程組(相當於測試用例)--右鍵線程組添加查看結果樹和http請求(body data里添加字典參數)--右鍵http請求---上級,可以添加請求頭等信息(不用加上雙引號)。--保存--運行(紅色失敗,綠色通過)
4.亂碼:后置處理器 -pre.setDataEncoding('utf-8')
5.斷言:右鍵http請求--添加響應斷言,模式匹配規則里選第一個包括,再點擊添加,復制響應數據里要判斷的內容,比如“status:200”(最好不要自己寫,就用復制粘貼)
6.集合點(模擬真實的用戶場景,使請求的並發可控:一批一批發送請求),並發(服務器同時接到的請求數)
線程組--number of threads(線程數)
同步定時器:右鍵線程組--添加定時器--synchronizing Timer--改名為(登錄)集合點--grouping里,第一個參數設置每次運行多少個用戶,第二個設置超時時間(單位毫秒)
*線程數設置多少,一般集合點就設置多少(線程數不多的情況下)
*一個http請求對應一個測試用例查看結果樹和http請求同級,對整個線程組有效。
*輸入的時候最好用自帶的輸入法,搜狗輸入法容易崩潰
參數化
比如你輸入賬號和密碼,線程數設成10,同樣的賬號密碼登錄10遍,顯然不合理,可以用參數化解決 ->用戶參數唯一限制。
參數化的作用
每個線程數(用戶)有獨立的賬號。
參數化步驟
(以注冊為例):
1.准備參數化數據文件
1.新建txt文件
2.輸入十組數據
賬號,密碼
賬號,密碼
賬號,密碼
……
3.把數據文件和jmeter的jmx腳本文件放在同一個文件夾(保持同級關系)
2.引用csv數據文件設置
右鍵線程組,添加配置元件csv數據文件設置
文件名:./文件名(使用瀏覽添加絕對路徑也行,但是移動文件夾就要重新設置,相對路徑移動文件夾的話則不需要更改。)
3.設置變量名:username,password
在HTTP請求的body data中替換: {"username":"{username}","password":"username","password":"{password}"}
關聯
前面接口的返回值,用於后面請求的參數。比如登錄成功之后,需要把token值作為后面發表文章等功能的請求使用。
正則表達式提取器提取token:
右鍵http請求--添加后置處理器--正則表達式提取器
正則表達式: “token”:“(.*?)” #“(.*?)”是萬能匹配符,不管是什么字符都行。
引用名稱:tt
模板:11
匹配數字:1
更改登錄用例的http信息頭管理器:
token ${tt}
添加cookie:
右鍵線程組--添加配置元件HTTP Cookie管理器。
事務
作用:收集性能指標用於性能測試。可以是單個步驟,也可以是多個步驟。
右鍵線程組--添加邏輯控制器中的事務控制器--然后把該線程組中的所有http請求都拉到事務中。
再次運行的時候,就會出現一個事務控制器值。事務控制器的狀態:一錯就錯,全對才通過。
全局變量
把很多共同用到的變量進行公共抽取。比如協議,端口號,ip地址等。
右鍵線程組--添加配置元件--用戶自定義變量。然后把相同的變量添加進去,比如ip:xxxxx。
其他地方要填ip的時候,寫${ip}引用就行。
為什么要這樣做?
下次換測試環境的時候,只要更改全局變量就可以了。
運行順序和作用域
從上往下運行,所以用例注意順序。
每次創建的http請求,結果樹等,都只對他的父級里的所有用例有效。
腳本錄制(生成)方法
手寫(推薦)
*jmeter測網頁,一般用badboy代理錄制。
點擊紅色圓圈開始錄制,填入網站地址,然后再badboy里操作網頁--操作完點擊停止--點擊file里的export to jmeter--保存jmx文件。
打開jmeter--文件--打開
缺陷:可能會錄制重復的步驟,參數化和關聯不會自動加上。
loadrunner安裝及入門
win10安裝loadrunner
一、下載loadrunner安裝包和QA
QA作用:繞過win10 UAC權限確認,方便loadrunner安裝
二、安裝安裝QA權限工具
解壓並運行QA權限工具
三、安裝
1. 解壓loadrunner.rar
2. 安裝loadrunner
進入:loadrunner[性能測試工具LR11.00].loadrunner-11文件夾下,右鍵選擇 使用管理員權限運行(QA)運行 setup.exe
如果沒有報錯,則無腦下一步就可以完成安裝了
如果有權限確認,就選擇允許訪問
3. 如果出現vsc++ 2005錯誤
解決問題鏈接:https://jingyan.baidu.com/article/2f9b480dea9f4b41cb6cc298.html
- 我們進入loadrunner安裝目錄,並找到lrunner文件,然后點擊打開lrunner文件
2
2.進入lrunner文件之后,我們找到目錄下的En文件,然后點擊打開En文件
3
3.進入En文件之后,我們再找到prerequisites文件並且點擊打開。
4
4.進入prerequisites文件之后,我們找到vc2005_sp1_redist文件,然后點擊打開
5
5.進入vc2005_sp1_redist文件之后,我們點擊vcredist_x86文件,然后彈出框點擊yes按鈕即可
6
6.最后我們退出安裝,重新點擊loadrunner進行安裝即可。
再次使用QA權限運行setup.exe就行了
四、破解
1. 安裝完成后,LR會自動打開,不管他,直接關掉
2. 替換lm70.dll和mlr5lprg.dll文件
將破解文件夾下的lm70.dll和mlr5lprg.dll放到LR的bin目錄下,替換掉原有的問題。
如果默認錄路徑是:C:\Program Files (x86)\HP\LoadRunner\bin
3. 刪掉LR注冊碼
運行破解文件夾下的deletelicense文件
選擇 是:
結果是failed不影響
4. QA權限運行Loadrunner
搜索loadrunner啟動文件的位置
再QA權限運行啟動文件,在configration菜單中選擇loadrunner license
點擊new license
輸入支持6.5w並發的超級license:
AEABEXFR-YTIEKEKJJMFKEKEKWBRAUNQJU-KBYGB
點擊ok
最后點擊close,安裝和破解LR工作就完成了
loadrunner入門
loadrunner:商業版的性能測試工具,根據線程數收費
(QA破解,用的是群里的老版,新版不好破解)
基於c語言開發。
寫代碼之前先保存,容易崩。
三個組件
1.vuser(create/edit script) 腳本編輯器,(支持錄制,但是需要ie8,基本不用,還是使用控件編寫腳本)
2.controller(run load tests) 運行負載
3.analysis(analyze test result) 分析器
運行
找到loadrunner啟動器,以管理員模式運行。
新建腳本:點擊create/edit script--new scripts圖標--選擇http協議--create--出現錄制框--點擊取消--點擊工具欄里的script圖標--出現腳本編輯窗口。
注釋://或者new step
body里面的字符串參數的引號,前面要加上轉移的反斜杠。
性能測試理論基礎
服務器
軟件和硬件的整體。
硬件(物理元件):
cpu(最重要):
判斷cpu好不好的兩個主要指標:
1.主頻(速度):越大越好
2.核心數:越多越好
cpu使用率:服務器硬件的繁忙程度
內存:越大越好,讀寫速度快
IO:硬盤,越快越好(ssd固態硬盤比hhd機械硬盤快很多)
帶寬:下載速度一般是1/10帶寬,越大越好
web容器(應用服務器):
1.tomcat (java)
2.weblogic
3.apache
4.php
5.iis(微軟)
作用:開發的代碼必須通過應用服務器進行部署,供用戶訪問
網關服務器:
平均分發請求
常用的網關:nginx(可支持百萬級並發)
代理:
反向代理:不用關心過程(一般情況都使用反向代理)
正向代理:過程透明
緩存:
數據庫最終是存放在硬盤中的,硬盤的讀取速度慢。
優化:使用redis把數據庫中的數據緩存在內存中,讀取不到再去數據庫找。
內存:讀取速度快,斷電數據丟失(所以服務器數據存在硬盤中)
硬盤:讀取速度慢,斷電數據保存
性能測試
定義:通過各種工具模擬多用戶並發訪問服務器,來測試服務器的性能
基於這個性能的黑客攻擊:洪水攻擊
分類:
壓力測試:超出峰值的情況下的系統表現(大並發)
負載測試:逐步增加壓力來試探服務器的性能
強度測試:長時間在峰值情況下運行,看能持續多久
並發測試:同時發送用戶請求,強調功能性測試
(訂單/獎品超發,庫存和實際賣出不匹配)
目的:
性能拐點:服務器在什么情況下性能跑得最快
最大容量:服務器在多少並發時能夠hold住
驗證問題:使用方法還原bug場景,解決bug
判斷性能拐點和最大容量
(軟件方面):
通過性能指標判斷:
1.響應時間:平均響應,90%line(有90%的請求在x秒內完成)
258原則:2秒內很快,2-5還行,5-8等一等可以加載出來,8秒以后,很爛。
2.tps
每秒事務數,服務器每秒返回的請求數
可以通過tps找性能拐點:隨着並發用戶數的增加,tps出現峰值
3.事務失敗率
失敗事務數/事務總數
一般來說是<5%
(硬件方面):
1.cpu使用率:長時間不能100%,持續小於85%
2.內存使用率:不同操作系統,內存調動機制不同。
linux/mac os機制:先把內存占滿,再分配
Windows:要用的時候再分配內存
*所以linux直接看cpu使用率,要看單個進程(比如看tomcat,要看java程序,linux命令top可以看進程的占用內存情況)
內存泄漏(通常是java出現的問題,即tomcat要考慮的問題):
tomcat一直把內存占着,越來越大,沒有釋放內存資源--發生內存泄漏。
判斷內存是否足夠:看虛擬內存是否足夠,看IO使用率是否非常大。
性能測試開展步驟
1.需求分析:
對業務模型(多場景)有深入了解,了解用戶使用場景:單場景(單個測試用例)、多場景(集合多個測試用例)
2.設計場景:
先考慮單場景的情況,然后組合在一起,考慮多/混合場景的情況。
3.編寫腳本:
jmeter
loadrunner
接口和網頁:app項目直接用接口,web項目要考慮靜態資源:
1.靜態資源(網頁、圖片、視頻):
靜態資源不占cpu,即不需要進行計算,靜態資源一般和帶寬有關。所以不考慮帶寬的話,一般不考慮靜態資源。
2.服務器接口
4.執行測試:
loadrunner
jmeter(在cmd里輸入jmeter,會出現提示:不要使用GUI模式做負載測試)
jmeter -n -t [jmx file] -l [result file] -e -o [Path to web report folder]
5,監控指標:
軟件用工具監控
硬件:windows:任務管理器里有自帶的性能資源監視器
linux :系統自帶的top命令,nmod,zabbix(后兩個有權限的話可以試試),jmeter監控linux,loadrunner監控linux。
6.生成測試報告,分析結果
常見分析方法(控制變量法):
1.性能拐點
2.服務是否崩潰:事務失敗率,http狀態碼出現大量500+
3.最大容量:cpu使用率上限,響應時間,失敗率(缺一不可)
4.內存泄漏:看jvm/java內存泄漏--查看java進程的內存大小,對比每一次的數據。在性能測試結束后,觀察內存是否被釋放。
pytest入門
安裝
pip命令安裝pytest:pip install -U pytest
檢查是否安裝成功:pytest --version
新建一個文件夾,不要叫pytest,會和原有的文件夾沖突。
文件命名:
1.py文件命名:test_XXX.py
2.方法命名:test_01_xxx.py(必須)
加上test可以自動識別文件。
pytest+requests
1.導入:import pytest
import requests
2.構造請求:
res = requests.post(url=,json=)
3,判斷http狀態碼
assert res.status_code == 200 #第一次判斷運行是否通過(服務器是否可用),可能功能不對,但是運行沒問題。
assert res.json()["status"] == 200 #判斷接口功能是否正常
print(res.text)
4.運行
不用py命令運行,用pytest運行。
新建終端:終端--新建終端
輸入pytest運行。
*unitest要手動查找文件,pytest如果不寫路徑的話,自動查找test開頭的文件。
pytest+selenium
1打開瀏覽器,實例化瀏覽器,獲得實例化句柄
driver = selenium.webdriver.Chrome(executable_path = '驅動文件夾路徑(相對於當前腳本文件路徑)')
3.打開網頁
driver.get("網址")
driver.maximize_window() #全屏運行瀏覽器
4.在搜索框輸入文本
用開發者工具,定位搜索框元素的id或其他name之類的。
e = driver.find_element_by_id("輸入框id")
e.send_keys("搜索內容")
5.點擊搜索
審查搜索按鈕的id
button = driver.find_element_by_id("搜索按鈕id")
button.click()
6.關閉瀏覽器
driver.quit()
7.檢查搜索結果
因為網頁內容是變化的,但是網頁title不變,所以可以用title做判斷。
driver.title 獲取網頁標題
assert driver.title = "title名"。#用斷言判斷
8.運行
新建終端:終端--新建終端
輸入pytest運行。
*直接就打開瀏覽器了
運行結果分析:
collected 3 items #執行了三個測試用例
test_demo1.py .. #兩個測試用例成功
test_demo2.py . #一個測試用例成功
*unitest里報錯是e,運行失敗是F,pytest都是F
生成測試報告(allure)
1.裝好allure插件。
下載並解壓allure-commandline--配置環境變量:bin目錄添加到path變量中(上下都添加)--cmd里輸入allure驗證。--安裝allure-pytest插件:管理員身份運行cmd,pip3 install allure pytest -i
2.執行測試腳本並生成測試報告
運行代碼改成 pytest ./ --alluredir=result
生成了result文件夾
3.把測試結果編譯成網頁測試報告
終端輸入命令 allure generate result -o report --clean
生成report文件夾,里面有個html報告。
4.打開測試報告
終端輸入allure open -h127.0.0.1 -p 10886 report
monkey和monkeyrunner
monkey
安卓app的壓力測試工具
作用:通過對安卓app輸入大量的隨機事件(點擊/滑動/按鍵)來檢測app是否存在崩潰、閃退和無響應等問題。
定位bug:
adb logcat看bug描述:
at XXX at xxx ..
ANR #無響應問題
存在位置:
/system/framework/monkey.jar
應用場景:
兼容性測試:安卓手機不同的版本和華為、oppo、小米等多種操作系統上測試。
使用:
1.首先安卓手機連上電腦。
2.adb shell monkey -p 軟件包名 運行次數
monkeyrunner
安卓app自動化測試工具
使用環境:java的python開發的,jpython,所有腳本要用java來實現。
運行方式:直接在shell執行,或者py文件運行。
官網例子:
# Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
# Connects to the current device, returning a MonkeyDevice object device = MonkeyRunner.waitForConnection() # Installs the Android package. Notice that this method returns a boolean, so you can test # to see if the installation worked. device.installPackage('myproject/bin/MyApplication.apk') # sets a variable with the package's internal name package = 'com.example.android.myapplication' # sets a variable with the name of an Activity in the package activity = 'com.example.android.myapplication.MainActivity' # sets the name of the component to start runComponent = package + '/' + activity # Runs the component device.startActivity(component=runComponent) # Presses the Menu button device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP) # Takes a screenshot result = device.takeSnapshot() # Writes the screenshot to a file result.writeToFile('myproject/shot1.png','png')
flask入門
python的web開發框架:flask,django
1.安裝:pip install flask
2.導入:from flask import Flask
3.app = Flask(__name__)
4.#定義路由(接口地址),用裝飾器
@app.route("/") #根目錄,只要輸入ip和端口就行了,根目錄一般不要出寫。 def index(): return render_template("index.html") #讀取網站首頁 @app.route("/login") def login(): return render_template("login.html") #讀取登陸頁面 if __name__ == "__main__" app.run(debug=True) #加上debug這個參數,每次修改都會自動運行代碼。否則需要手動重新運行。
5.終端運行。
*不需要配置服務器,flask自帶一個WSGI服務器。本地環境http://127.0.0.1:5000/,ctrl+單擊打開網站,就可以訪問我們前面第四步寫的網站。(終端運行的時候有寫)
放入網站:
新建文件夾,名字必須叫”templates“,放html文件。
創建文件夾”static“,放靜態資源:css、文件、圖片等。*記得改鏈接
學習路線補充
app埋點測試
1.自動化測試路線
python基礎
自動化工具:selenium,appium,monkeyrunner,requests,robotframework……
然后了解原理,仿造自動化工具,實現一套自己的工具。
2.性能測試
初級性能測試:熟練使用工具,掌握常用的分析方法,會用工具分析出系統的瓶頸。
中級性能測試:對系統的熟練程度高,熟悉各個組件,能夠分析問題原因
高級性能測試:對系統的各個組件了如指掌,給出具體的調優方案。
深入了解:應用服務器,網關,緩存,前端,數據庫(了解哪種查詢語句快)
開發知識:java,企業的java開發框架,運維
管理方向:流程管理,QA
如果對軟件測試有興趣,想了解更多的測試知識,解決測試問題,以及入門指導,幫你解決測試中遇到的困惑,我們這里有技術高手。如果你正在找工作或者剛剛學校出來,又或者已經工作但是經常覺得難點很多,覺得自己測試方面學的不夠精想要繼續學習的,想轉行怕學不會的, 都可以加入我們1079636098,群內可領取最新軟件測試大廠面試資料和Python自動化、接口、框架搭建學習資料!
每一個成功的人,在前進的路上都會收到很多的鼓勵,也會願意鼓勵他人,我深深感受到鼓勵帶給我的幫助,你們的每一次點贊,就是對我最大的支持,讓我一直堅持的做出更好的內容。