關鍵字驅動測試框架搭建(1)

2022-08-29 14:39:28 字數 4108 閱讀 9301

1、小練習:定義三個方法(加法、減法、斷言),通過使用關鍵字驅動測試這個三個方法

compute.py

#

encoding=utf-8

defadd(a,b):

print a +b

return a +b

defsub(a,b):

print a -b

return a -b

defassert_value(a,b):

if a ==b:

return

true

else

:

return false

testdata.txt檔案

add,1,2,3

sub,2,1,1

test_compute.py

#

encoding=utf-8

from compute import *test_case_num =0

success_case_num =0

faile_case_num =0

with open(

"d:\\pythonproject\\mytest\\testdata.txt

") as fp:

for line in

fp: test_case_num += 1action,data1,data2,expect_result = line.split(','

) expect_result =eval(expect_result.strip())

s = action + "

(" + data1 + "

," + data2 + ")"

actual_result =eval(s)

ifassert_value(actual_result,expect_result):

success_case_num += 1

else

: faile_case_num += 1

print

"total %s test cases ran

" %test_case_num

print

"total %s succeeded test cases ran

" %success_case_num

print

"total %s failed test cases ran

" % faile_case_num

上面的函式都是兩個引數,如果函式的引數不同,有的乙個,有的三個,有的沒有,則需要優化拼接eval表示式,如:

compute.py

#

encoding=utf-8

import

random

importre#

兩個引數

defadd(a,b):

print a +b

return a +b

#兩個引數

defsub(a,b):

print a -b

return a -b

#三個引數

defmul(a,b,c):

print a*b*c

return a*b*c

#乙個引數

defabs_value(a):

print

abs(a)

return

abs(a)

#無引數,返回值是乙個隨機,無法使用精確值斷言,所以使用正則來斷言

defrandom_value():

print random.randint(1,1000)

return random.randint(1,1000)

defassert_value(actual_result,expected_result):

#將真實結果、期望結果強制轉換為字串型別

actual_result =str(actual_result)

expected_result =str(expected_result)

#判斷期望結果是否包含正規表示式

if re.search(r"

\\|\*|\?

",expected_result):

#如果期望結果是正規表示式,則使用期望結果對真實結果進行匹配

ifre.match(expected_result,actual_result):

return

true

else

:

return

false

#如果期望結果不是正規表示式,則直接斷言是否相等

if actual_result ==expected_result:

return

true

else

:

return false

testdata.txt

add,1,2,3

sub,2,1,1

mul,1,2,3,6

abs_value,-1,1

random_value,\d+

測試資料的第一行的第乙個為函式名,最後乙個為斷言值,所以中間的均為引數,需要對切割開的資料進行判斷長度,再取出切片(去頭去尾,即只留引數),最後拼接成乙個函式表示式。如:mul(1,2,3)

test_comput.py

#

encoding=utf-8

from compute import *test_case_num =0

success_case_num =0

faile_case_num =0

with open(

"d:\\pythonproject\\mytest\\testdata.txt

") as fp:

for line in

fp: test_case_num += 1

#切割出函式名

func_name = line.split(","

)[0].strip()

#切割出引數再拼接成乙個字串

values = "

,".join(line.split("

,")[1:-1]).strip()

#切割出斷言值

expected_result = line.split("

,")[-1].strip()

#拼接成執行函式的表示式

s = func_name + "

(" + values + ")"

#使用eval執行表示式,並將結果儲存到actual_result

actual_result =eval(s)

#進行斷言

ifassert_value(actual_result,expected_result):

success_case_num += 1

else

: faile_case_num += 1

print

"total %s test cases ran

" %test_case_num

print

"total %s succeeded test cases ran

" %success_case_num

print

"total %s failed test cases ran

" %faile_case_num

#生成html測試報告

content =template("""

測試報告

執行的總用例數

成功執行的總用例數

失敗執行的總用例數

$num1

$num2

$num3

""")

file_content = content.substitute(num1=test_case_num,num2=success_test_case,num3=faile_test_case

)with open(

"result.html

","w

") as f:

f.write(file_content)

測試框架之關鍵字驅動

將測試用例的每個步驟單獨封裝成乙個函式,以這個函式名作為關鍵字,將函式名及傳參寫入檔案中,每個步驟對映一行檔案。通過解析檔案的每行內容,將內容經過eval函式拼成乙個函式呼叫,呼叫封裝好的步驟函式,就可以一步步執行測試案例。現將這個幾個步驟寫入到檔案中,開頭是步驟名,後面是引數。並且將每個步驟名封裝...

關鍵字驅動

目前行業內測試框架僅有兩種實現形式 關鍵字驅動 資料驅動 pom 資料驅動 關鍵字驅動 postman 介面測試 可以通過選擇get post來實現乙個method的方法 就是做了乙個函式的封裝,當選擇為get時,呼叫get函式,選擇為post時,呼叫post函式。專案a 抵代更新快,版本交替頻繁,...

框架搭建思路 從資料驅動到關鍵字驅動

初次接觸自動化測試時,對資料驅動和關鍵字驅動不甚理解,覺得有點故弄玄須,不就是引數和函式其嘛!其實其也體現了測試所不同與開發的一些特點 主要指系統測試 以及和對技術發展的脈絡的展現。1.錄製 回放的神話 實際上可以理解為一種自動測試指令碼和測試用例的緊耦合,既有測試指令碼維護的難度,也與系統測試中面...