全套視頻便宜甩賣拜英,web 接口 app自動(dòng)化測(cè)試,python全棧自動(dòng)化測(cè)試
目標(biāo)
-
加深對(duì)自動(dòng)化的理解
- 功能自動(dòng)化:把現(xiàn)在手工做的東西琅催,用代碼做出來
- 什么是自動(dòng)化居凶?建立在功能測(cè)試基礎(chǔ)上做的
- 什么時(shí)候做自動(dòng)化?功能穩(wěn)定時(shí)
- 自動(dòng)化可以幫我們做哪些事情藤抡?回歸測(cè)試/比較穩(wěn)定的功能/上線前快速檢查
- 最佳實(shí)現(xiàn):在excel/數(shù)據(jù)庫(kù)準(zhǔn)備好測(cè)試數(shù)據(jù)--用代碼讀取--直接進(jìn)行測(cè)試--把結(jié)果存儲(chǔ)到excel/數(shù)據(jù)庫(kù)--并出具一份測(cè)試報(bào)告+jenkeins做一個(gè)集成平臺(tái)
-
項(xiàng)目需求分析
可行性分析:是否可做侠碧、是否穩(wěn)定支救、優(yōu)先級(jí)
項(xiàng)目背景:項(xiàng)目?jī)?nèi)容P2P背景
-
項(xiàng)目模塊:注冊(cè)丹泉、登錄爱只、充值殊橙、提現(xiàn)尿瞭、投資纸淮;業(yè)務(wù)邏輯:后臺(tái)添加數(shù)據(jù) 加標(biāo)-審核-發(fā)標(biāo)
-
接口文檔
- RESTful API返回結(jié)果說明:
{ "status":1,//接口執(zhí)行狀態(tài)狈茉,1表示成功蔑匣,0表示異常 "code":10001,//業(yè)務(wù)自定義狀態(tài)碼蒿往,無信息否為空字符串盛垦,status=1時(shí),code為10001瓤漏,表示成功腾夯,30204表示第3個(gè)模塊的第2個(gè)接口的第4個(gè)狀態(tài)碼颊埃,模塊:用戶1,標(biāo)2蝶俱,投資3班利,回款計(jì)劃4,流水記錄5 "data":{ //返回?cái)?shù)據(jù)榨呆、對(duì)象罗标、數(shù)組均可,為空統(tǒng)一設(shè)置為NULL积蜻,基于其他客戶端(如Java-Objective-C)對(duì)空值(null闯割、nil、Null)的處理空值不便或容易產(chǎn)生異常竿拆,可根據(jù)具體業(yè)務(wù)和前后端約定空數(shù)組為[],空字典為{} "msg":"成功"http://該字段本次請(qǐng)求的業(yè)務(wù)宙拉、狀態(tài)描述信息,主要用于調(diào)試丙笋、測(cè)試等谢澈,status!=1時(shí)都應(yīng)該有錯(cuò)誤信息,無信息否為空字符串 } }
- 注冊(cè)接口
image- 登錄接口
image- 充值接口
image- 提現(xiàn)接口
image-
投資御板、競(jìng)標(biāo)接口
image
-
項(xiàng)目邏輯
-
實(shí)戰(zhàn)目標(biāo)
注冊(cè)锥忿、登錄、充值稳吮、提現(xiàn)缎谷、投資
-
普及數(shù)據(jù)分離/代碼分離/文件分離的概念
- 數(shù)據(jù)分離
-
API_AUTO
項(xiàng)目名run.py
代碼執(zhí)行入口-
common
公共類,大家都可使用(也可以叫tools
工具類)-
conf
放置配置文件xx.conf -
public
放置公共代碼
-
test_data
測(cè)試數(shù)據(jù)-
result
測(cè)試結(jié)果-
test_result
測(cè)試結(jié)果 -
test_report
測(cè)試報(bào)告 -
image
測(cè)試截圖 -
log
日志
-
-
- 數(shù)據(jù)分離
- 課堂作業(yè)
實(shí)戰(zhàn)遇到的問題
因?yàn)橐曨l的實(shí)戰(zhàn)項(xiàng)目是上課老師自己寫的灶似,現(xiàn)在已經(jīng)無法訪問列林,可以根據(jù)視頻的原理直接用自己公司的項(xiàng)目進(jìn)行實(shí)戰(zhàn)。下面涉及代碼基本基于自己公司的代碼展示酪惭,適當(dāng)打碼希痴。同時(shí),我們公司python使用2.7版本春感,后期語(yǔ)法上可能有少少差異砌创。
大家也用自己公司的產(chǎn)品練手吧。
步驟:
- 引入requests模塊
- 發(fā)送get/post請(qǐng)求
- register鲫懒、login嫩实、recharge接口,按單個(gè)用例請(qǐng)求窥岩,調(diào)通接口
- recharge接口需要cookies
注意點(diǎn):
- headers甲献、cookies是關(guān)鍵字,都要加s颂翼,不能隨便以此命名
- 獲取請(qǐng)求頭晃洒,res.request.headers
高級(jí)用法-會(huì)話
import requests
s=requests.session() #創(chuàng)建一個(gè)會(huì)話
logon_res=s.get(login_url,params=login_data) #login_data必須有個(gè)key慨灭,常用是params
recharge_res=s.post(recharge_url,recharge_data) #這里就不用傳cookies啦
print(recharge_res.json())
給類取別名
from API_AUTO.common.public.http_request import HttpRequest as ht
實(shí)例化遇到要寫類名HttpRequest
的地方,可以用ht
代替
說明
后面開始使用自己公司的代碼進(jìn)行練手了球及,結(jié)合視頻的接口自動(dòng)化測(cè)試的思想氧骤。隱藏一些公司的隱私信息
登錄接口:/login
body:{"user_phone": "1801923****", "device_model": "iphone7"}
user_phone 手機(jī)號(hào)
device_model 手機(jī)型號(hào)
寫run.py文件
from API_AUTO.common.public.http_request import HttpRequest #引入自己封裝的http請(qǐng)求
#登錄
payload = {"user_phone": "1801923****", "device_model": "iphone7"}
res=HttpRequest().http_request("/login","post",payload)
改造在run.py
文件中
-
通過列表
[]
管理測(cè)試數(shù)據(jù)為什么測(cè)試數(shù)據(jù)用列表嵌套字典的形式?列表嵌套其他的也可以吃引,但是比如列表嵌套列表筹陵,那訪問時(shí),就要通過索引值去訪問际歼,但是列表嵌套字典惶翻,只需要通過他的key就可以去訪問
#run.py文件 #代碼執(zhí)行的入口: from API_AUTO.common.public.http_request import HttpRequest import json def run(test_data): for item in test_data: #測(cè)試數(shù)據(jù)用一個(gè)list[]存儲(chǔ),一個(gè){}是一條用例 print ("正在測(cè)試的case是",item["title"]) res = HttpRequest().http_request(item["url"], item["method"],eval(item["payload"])) print res.json() #測(cè)試數(shù)據(jù) test_data=[{"url":"/login","method":"post","payload": {"user_phone": "1801923****","device_model": "iphone7"},"title":"正確的登錄"}, {"url":"/login","method":"post","payload": {"user_phone": "1850171****", , "device_model": "iphone7"},"title":"黑名單登錄"}] #調(diào)用函數(shù) run(test_data)
-
通過excel管理測(cè)試數(shù)據(jù)
為什么放在excel姑蓝?數(shù)據(jù)更清晰鹅心,更方便管理
![image](https://upload-images.jianshu.io/upload_images/12041448-13ab26c04ac42388?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
寫一個(gè)讀取excel的工具類,在學(xué)習(xí)excel操作時(shí)寫過纺荧,這次需要添加一個(gè)寫回?cái)?shù)據(jù)的方法
```
from openpyxl import load_workbook
'''
操作excel
'''
class DoExcel:
def get_data(self,file_name,sheet_name):
wb=load_workbook(file_name)
sheet=wb[sheet_name]
test_data=[] #每條數(shù)據(jù)要存在列表里
for i in range(2, sheet.max_row+1):
sub_data={}
sub_data["case_id"] = sheet.cell(i, 1).value
sub_data["url"]=sheet.cell(i,2).value
sub_data["method"]=sheet.cell(i,3).value
sub_data["payload"]=sheet.cell(i,4).value
sub_data["title"]=sheet.cell(i,5).value
test_data.append(sub_data)
return test_data
def write_back_data(self,file_name,sheet_name,i,value):
wb=load_workbook(file_name)
sheet=wb[sheet_name]
sheet.cell(i,6).value=value
wb.save(file_name) #保存
```
改造`run.py`
```
from API_AUTO.common.public.http_request import HttpRequest
from API_AUTO.common.public.do_excel import DoExcel
def run(test_data):
for item in test_data:
print "正在測(cè)試的case是",item["title"]
res = HttpRequest("1.6.0", "android", "785c6fee0e4488ca412a5afc9a00e9d8").http_request(item["url"], item["method"],eval(item["payload"]))
print res.json() #python2.7的print不需要括號(hào)
DoExcel().write_back_data("test_data/test_data.xlsx","Sheet1",item["case_id"]+1,str(res.json()))
test_data=DoExcel().get_data("test_data/test_data.xlsx","Sheet1")
run(test_data)
```
難點(diǎn)解答
1)wb.save(file_name)
2)不同模塊不同的sheet比較好,寫在一個(gè)sheet里也可以通過添加module字段區(qū)分不同模塊
3)加一個(gè)登錄接口的請(qǐng)求旭愧、或者反射機(jī)制
4)弱一點(diǎn)比較好
5)write_back_data()
pandas處理excel
參考文檔:https://www.cnblogs.com/liulinghua90/p/9935642.html
安裝xlrd
安裝pandas
-
日常用法
import pandas df= pandas.read_excel("test_data.xlsx",sheet_name="Sheet1")#sheet_name不指定默認(rèn)讀第一個(gè)sheet # df dataframe print df.values #所有數(shù)據(jù),返回是嵌套列表 # 默認(rèn)去掉字段名所在行宙暇,索引值從0開始 print df.ix[0].values #讀除去字段名的第1行输枯,返回是一個(gè)列表 print df.ix[0,1] #讀除去字段名的第1行的第2列 print df.ix[:].values #也是讀取所有數(shù)據(jù) print df.ix[:,["url"]].values #讀取指定列url #返回字典形式 print df.ix[0,["url","method","payload","title"]].to_dict() #第1行,指定列占贫,以字典形式返回 print df.ix[0].to_dict() #第1行桃熄,不指定列,全部列輸出型奥,以字典形式返回
-
讀取測(cè)試數(shù)據(jù)
import pandas df= pandas.read_excel("test_data.xlsx",sheet_name="Sheet1") test_data=[] for i in df.index.values: row_data=df.ix[1,["url","method","payload","title"]].to_dict() test_data.append(row_data) print (test_data)
注意:pandas需要關(guān)閉excel瞳收,否則會(huì)報(bào)錯(cuò)找不到這個(gè)sheet_name