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
"total %s test cases ran
" %test_case_num
"total %s succeeded test cases ran
" %success_case_num
"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):
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
"total %s test cases ran
" %test_case_num
"total %s succeeded test cases ran
" %success_case_num
"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.錄製 回放的神話 實際上可以理解為一種自動測試指令碼和測試用例的緊耦合,既有測試指令碼維護的難度,也與系統測試中面...