day24 20200513 引數化梳理 資料校驗

2022-08-15 22:27:13 字數 4254 閱讀 4667

所有excel裡要引用的變數,都放到全域性變數裡

生成的三個使用者資訊,滿足大部分的變數

少數變數,使用setter進行設定

#

建立乙個不存在的使用者id,並加入到全域性資料池中

setattr(globaldata, "

$", cls.do_mysql.get_not_existed_user_id())

# 不存在的使用者id獲取sql方法

defget_not_existed_user_id(self):

sql = do_yaml.get_data('

mysql

', '

select_max_userid_sql')

not_existed_id = self.get_one_value(sql).get('

id') + 1 #

獲取最大的使用者id + 1

return not_existed_id

多個斷言校驗-將獲取的返回值轉化為字典,然後excel的json也轉化為字典

多次斷言對應的字段

@ddt.data(*testcases_data)

deftest_login(self, one_testcase):

#獲取全域性變數

getattr(globaldata, "$"

) new_data =parameterize.to_parma(one_testcase.data)

new_url = do_yaml.get_data("

api", "

base_url

") +one_testcase.url

res =self.do_request.send(one_testcase.method,

new_url,

json=new_data)

#判斷兩個及兩個以上斷言方法

#步驟1:介面呼叫返回結果返回為字典型別

actual_value =res.json()

#步驟2:將excel中讀取的expected_value期望值轉為字典型別,

expect_value = json.loads(one_testcase.expected_value, encoding='

utf-8')

try:

#for item in eval(one_testcase.expected_value):

#self.assertin(item,

#res.text,

#one_testcase.name)

#步驟3:結果對比

self.assertequal(expect_value.get('

code

'), actual_value.get('

code

'), one_testcase.name)

self.assertequal(expect_value.get(

'msg

'), actual_value.get('

msg'

), one_testcase.name)

except

assertionerror as e:

#my_logger.error(f":具體異常為")

do_log.error(f"

:具體異常為")

self.do_excel.write_data(one_testcase, res.text, "失敗

")raise

e

else

: self.do_excel.write_data(one_testcase, res.text, "成功

")

mock其實就是mock後的值(

mock.mock(return_value=one_dict)
),賦值給還沒寫好的方法或者不能測試的介面(

alipay
#

一、哪些場景下會用到mock呢?

#1、第三方介面

#a.別人的介面

#b.在測試階段,可能無法呼叫

#2、開發未完成的介面

#a.乙個業務流需要依賴未完成的介面才能測

#b.有必要使用假資料(介面)來輔助測試

from unittest import

mock

import

requests

defalipay():

"""此函式模擬為支付寶的支付介面(在測試階段不能訪問)

當前不能呼叫的支付寶的介面

:return:

"""#

url亂寫的,模擬不能訪問的場景

res = requests.get("

")return

res.status_code

defdo_pay(card_num, password):

"""模擬為開發寫的支付流程介面,需要呼叫第三方支付寶介面

:param card_num:

:param password:

:return:

"""print("

1、驗證賬號資訊成功")

print("

2、呼叫支付寶介面進行支付")

return

alipay()

if__name__ == '

__main__':

#do_pay("1000", "123456")

one_dict =

#a.建立乙個mock物件,將第三方支付函式覆蓋

#b.do_pay函式呼叫alipay函式時,不會真正去呼叫支付寶的介面,而是直接返回我們指定的返回值(return_value)

alipay = mock.mock(return_value=one_dict)

result = do_pay("

1000

", "

123456")

print(result)

假如為v3版本才匯入加密的

handlesign
timestamp+token+sign

當x-lemonban-media-type請求頭值為lemonban.v3時,介面使用timestamp+token+sign 鑑權。除註冊、登入和專案列表介面,其它介面需要進行如下設定:

1. 設定authorization請求頭,值為bearer token值

2. 請求體json 設定timestamp引數,值為當前時間戳(注意是秒級時間戳),型別為long

3. 請求體json設定sign引數,取token前50位再拼接上timestamp值,然後通過rsa公鑰加 密得到的字元

#

獲取api版本資訊

api_version = do_yaml.get_data("

api", "

api_version

").get("

x-lemonban-media-type")

if api_version == "

lemonban.v3

": #

如果為v3版本, 才匯入handlesign

from scripts.handle_sign import handlesign

請求體中新增引數

if hasattr(self, '

token

') and api_version == "

lemonban.v3

": #

如果為v3版本, 則新增sign引數

sign_dict = handlesign.generate_sign(getattr(self, "

token

")) #

生成sign和timestamp組成的字典

#由於json傳參和www-form-encode 不會同時傳遞

#只要某乙個引數不為none,則合併sign和timestamp引數

if kwargs["

json

"] is

notnone:

kwargs[

"json

"].update(sign_dict)

elif kwargs["

data

"] is

notnone:

kwargs[

"data

"].update(sign_dict)

Day5 07 函式的引數 引數組合

現在我們學完了位置引數 預設引數 可變引數 關鍵字引數 命名關鍵字引數五種引數型別。在python中定義函式,可以使用這五種引數進行組合。但是引數定義的順序必須是 必選引數 預設引數 可變引數 命名關鍵字引數和關鍵字引數 def f1 a,b,c 0,pp,kw print a,b,c,pp,kw ...

DAY10 函式的引數

1.實參 呼叫引數,在括號內傳入的實際值,值可以為常量 變數 表示式或三者的組合 2.形參 定義函式時,在括號內宣告的變數名,用來接受外界傳來的值 1.位置實參 不用明確形參名的傳參方式,一定按照位置給形參傳值 2.關鍵字實參 必須明確形參名字與值為形參傳值,可以不用按照為宗旨 3.注意 1.關鍵字...

Day5 03 函式的引數 位置引數和預設引數

位置引數 呼叫函式時,傳入函式的引數,按照位置順序依次賦值給函式的引數。計算乘方的函式 def power x,n s 1 while n 0 n n 1 s s x return s 在使用power 1,2 時,會根據位置順序,將1賦值給x 2 賦值給n。預設引數 如果希望不指定指數時,預設按照...