python接口自動(dòng)化-實(shí)戰(zhàn)(第一階段)

全套視頻便宜甩賣拜英,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 日志
  • 課堂作業(yè)
image

實(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)解答
image

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市厢汹,隨后出現(xiàn)的幾起案子螟深,更是在濱河造成了極大的恐慌,老刑警劉巖烫葬,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件界弧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡搭综,警方通過查閱死者的電腦和手機(jī)垢箕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兑巾,“玉大人条获,你說我怎么就攤上這事∩林欤” “怎么了月匣?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵钻洒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我锄开,道長(zhǎng)素标,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任萍悴,我火速辦了婚禮头遭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘癣诱。我一直安慰自己计维,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布撕予。 她就那樣靜靜地躺著鲫惶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪实抡。 梳的紋絲不亂的頭發(fā)上欠母,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音吆寨,去河邊找鬼赏淌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛啄清,可吹牛的內(nèi)容都是我干的六水。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辣卒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼掷贾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起添寺,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤胯盯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后计露,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體博脑,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年票罐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了叉趣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡该押,死狀恐怖疗杉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤烟具,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布梢什,位于F島的核電站,受9級(jí)特大地震影響朝聋,放射性物質(zhì)發(fā)生泄漏嗡午。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一冀痕、第九天 我趴在偏房一處隱蔽的房頂上張望荔睹。 院中可真熱鬧,春花似錦言蛇、人聲如沸僻他。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吨拗。三九已至,卻和暖如春跟伏,著一層夾襖步出監(jiān)牢的瞬間丢胚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工受扳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兔跌。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓勘高,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親坟桅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子华望,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容