軟件測試基礎
軟件測試的概念
通過一系列手段去證明軟件是符合用戶需求的,滿足質量要求的。預期結果和實際結果的一個對比。
軟件測試分類
按方法分:黑盒測試、白盒測試、灰盒測試
黑盒測試:把軟件比作一個“黑匣子”,不考慮具體是內部是如何實現的,只考慮外部功能的運行,檢查軟件的輸入和輸出是否匹配。
白盒測試:檢查軟件的代碼、函數和方法等內部結構。
灰盒測試:介於白盒和灰盒測試之間,既可以根據外部暴露出的功能進行檢測,也可以參考內部的代碼結構。
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")'