1. 程式人生 > >python之eval函數的應用實例

python之eval函數的應用實例

book send username 一個 lob exce form string 接口

眾所周知,eval() 函數是用來執行一個字符串表達式,並返回表達式的值。

語法:eval(expression[, globals[, locals]])

eval函數有很強大的用法,但也有一定的風險性。這裏主要記錄項目中用到的eval函數的兩種用法。

一、將字符串轉換為相應的對象

如:將string轉換為list、tuple、dict

例:將string轉換為dict

data = "{‘username‘:‘admin‘,‘pwd‘:‘123456‘}"
print(data,type(data))
data = eval(data)
print(data, type(data))

 如上代碼輸出為:

{‘username‘:‘admin‘,‘pwd‘:‘123456‘} <class ‘str‘>
{‘username‘: ‘admin‘, ‘pwd‘: ‘123456‘} <class ‘dict‘>

 可以看到,eval函數轉換後,就將原來string類型的data轉換為dict了。

實際上,轉換前的data也是一個json字符串,也就是實現了json->dict。

實戰:

在接口自動化框架中,我們通常把測試數據存放在excel中,利用openpyxl從excel中讀取測試數據用於測試。

直接從excel中讀出來的都是string類型,一般我們的請求參數是dict類型,這就需要把讀取的string類型的數據轉換為dict。

從excel中讀取某sheet第二行第五列的數據:{‘username‘:‘admin‘,‘pwd‘:‘123456‘}

from openpyxl import load_workbook
sheet = load_workbook(bookname)[sheetname]
data = sheet.cell(2, 5).value

 直接讀取出來的data類型是string,相當於:”{‘username‘:‘admin‘,‘pwd‘:‘123456‘}“

使用data = eval(data) ,轉換為dict類型,就可以傳到請求參數裏啦。

二、將字符串轉成表達式並執行

先看一個簡單的例子:

eval(‘print("我是test語句")‘)

 如上代碼實際上會執行 print("我是test語句") 這段代碼。也就是eval將 ‘print("我是test語句")’ 這段字符串轉成了可執行的python語句,並執行它。

實戰:

測試幾個webservice接口:

from suds.client import Client
def ws(url,data,method):  
    client = Client(url)
    if method == ‘sendMCode‘:
        result = client.service.sendMCode(data)
    return result

 webservice接口是如上這樣的調用方式,如上代碼調用了senMCode的接口。如果我們有很多個接口,可能就需要寫很多個if語句,會很繁瑣,這是不可取的。

這時候eval就派上用場了:

from suds.client import Client
def ws(url,data,method):
    client = Client(url)
    result = eval(‘client.service.{0}({1})‘.format(method, data))
    return result

 讓eval函數把 ‘client.service.{0}({1})‘.format(method, data) 轉成可執行的python語句,就可以把method也參數化,不需要那麽多if語句了。

python之eval函數的應用實例