python接口自動化-實戰(第一階段)

全套視頻便宜甩賣,web 接口 app自動化測試,python全棧自動化測試

目標

  • 加深對自動化的理解

    • 功能自動化:把現在手工做的東西,用代碼做出來
    • 什么是自動化?建立在功能測試基礎上做的
    • 什么時候做自動化?功能穩定時
    • 自動化可以幫我們做哪些事情?回歸測試/比較穩定的功能/上線前快速檢查
    • 最佳實現:在excel/數據庫準備好測試數據--用代碼讀取--直接進行測試--把結果存儲到excel/數據庫--并出具一份測試報告+jenkeins做一個集成平臺
  • 項目需求分析

    • 可行性分析:是否可做、是否穩定、優先級

    • 項目背景:項目內容P2P背景

    • 項目模塊:注冊、登錄、充值、提現、投資;業務邏輯:后臺添加數據 加標-審核-發標

      • 接口文檔

        • RESTful API返回結果說明:
        {
            "status":1,//接口執行狀態,1表示成功,0表示異常
            "code":10001,//業務自定義狀態碼,無信息否為空字符串,status=1時,code為10001,表示成功,30204表示第3個模塊的第2個接口的第4個狀態碼,模塊:用戶1,標2,投資3,回款計劃4,流水記錄5
            "data":{
                //返回數據、對象、數組均可,為空統一設置為NULL,基于其他客戶端(如Java-Objective-C)對空值(null、nil、Null)的處理空值不便或容易產生異常,可根據具體業務和前后端約定空數組為[],空字典為{}
            "msg":"成功"http://該字段本次請求的業務、狀態描述信息,主要用于調試、測試等,status!=1時都應該有錯誤信息,無信息否為空字符串
            }
        }
        
        • 注冊接口
        image
        • 登錄接口
        image
        • 充值接口
        image
        • 提現接口
        image
        • 投資、競標接口


          image
    • 項目邏輯

    • 實戰目標

      注冊、登錄、充值、提現、投資

  • 普及數據分離/代碼分離/文件分離的概念

    • 數據分離
      • API_AUTO 項目名
        • run.py 代碼執行入口

        • common 公共類,大家都可使用(也可以叫tools工具類)

          • conf 放置配置文件xx.conf
          • public 放置公共代碼
        • test_data測試數據

        • result測試結果

          • test_result 測試結果
          • test_report 測試報告
          • image 測試截圖
          • log 日志
  • 課堂作業
image

實戰遇到的問題

因為視頻的實戰項目是上課老師自己寫的,現在已經無法訪問,可以根據視頻的原理直接用自己公司的項目進行實戰。下面涉及代碼基本基于自己公司的代碼展示,適當打碼。同時,我們公司python使用2.7版本,后期語法上可能有少少差異。
大家也用自己公司的產品練手吧。

步驟:
  • 引入requests模塊
  • 發送get/post請求
  • register、login、recharge接口,按單個用例請求,調通接口
  • recharge接口需要cookies
注意點:
  • headers、cookies是關鍵字,都要加s,不能隨便以此命名
  • 獲取請求頭,res.request.headers
高級用法-會話
import requests
s=requests.session() #創建一個會話
logon_res=s.get(login_url,params=login_data) #login_data必須有個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

實例化遇到要寫類名HttpRequest的地方,可以用ht代替

說明

后面開始使用自己公司的代碼進行練手了,結合視頻的接口自動化測試的思想。隱藏一些公司的隱私信息

登錄接口:/login 
body:{"user_phone": "1801923****", "device_model": "iphone7"}
user_phone 手機號
device_model 手機型號
寫run.py文件
from API_AUTO.common.public.http_request import HttpRequest #引入自己封裝的http請求

#登錄
payload = {"user_phone": "1801923****", "device_model": "iphone7"}
res=HttpRequest().http_request("/login","post",payload)

改造在run.py文件中

  • 通過列表[]管理測試數據

    為什么測試數據用列表嵌套字典的形式?列表嵌套其他的也可以,但是比如列表嵌套列表,那訪問時,就要通過索引值去訪問,但是列表嵌套字典,只需要通過他的key就可以去訪問

    #run.py文件
    #代碼執行的入口:
    from API_AUTO.common.public.http_request import HttpRequest
    import json
    
    def run(test_data):
        for item in test_data: #測試數據用一個list[]存儲,一個{}是一條用例
            print ("正在測試的case是",item["title"])
            res = HttpRequest().http_request(item["url"], item["method"],eval(item["payload"]))
            print res.json()
    
    #測試數據
    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":"黑名單登錄"}]
    #調用函數
    run(test_data)
    
  • 通過excel管理測試數據

    為什么放在excel?數據更清晰,更方便管理

![image](https://upload-images.jianshu.io/upload_images/12041448-13ab26c04ac42388?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

寫一個讀取excel的工具類,在學習excel操作時寫過,這次需要添加一個寫回數據的方法

```
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=[] #每條數據要存在列表里
        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 "正在測試的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不需要括號
        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)

```
難點解答
image

1)wb.save(file_name)

2)不同模塊不同的sheet比較好,寫在一個sheet里也可以通過添加module字段區分不同模塊

3)加一個登錄接口的請求、或者反射機制

4)弱一點比較好

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不指定默認讀第一個sheet
    # df dataframe
    print df.values #所有數據,返回是嵌套列表
    # 默認去掉字段名所在行,索引值從0開始
    print df.ix[0].values #讀除去字段名的第1行,返回是一個列表
    print df.ix[0,1] #讀除去字段名的第1行的第2列
    print df.ix[:].values #也是讀取所有數據
    print df.ix[:,["url"]].values #讀取指定列url
    #返回字典形式
    print df.ix[0,["url","method","payload","title"]].to_dict() #第1行,指定列,以字典形式返回
    print df.ix[0].to_dict() #第1行,不指定列,全部列輸出,以字典形式返回
    
  • 讀取測試數據

    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需要關閉excel,否則會報錯找不到這個sheet_name

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容