日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

python自動化測試面試題 python測試代碼怎么寫

Python 對于測試非??粗?,例如測試中最常見的操作——斷言 assert,其在 Python 中就是一個關鍵字而不是一個函數(shù) 。而在 C 語言中,assert 只是一個普通的函數(shù) 。從這點也可以看出,Python 將測試當作最基礎的部分 。
可以通過使用下面的代碼來查看 Python 語言定義的關鍵字:
>>> import keyword# 引入模塊keyword>>> keyword.kwlist# 得到所有的關鍵字# 關鍵字列表['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await','break', 'class', 'continue', 'def', 'del', 'elif', 'else','except', 'finally', 'for', 'from', 'global', 'if', 'import','in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass','raise', 'return', 'try', 'while', 'with', 'yield']可以直接是使用 assert 在源代碼中對其進行測試,常用的做法如圖 1 所示 。

python自動化測試面試題 python測試代碼怎么寫


圖 1 將測試代碼和實現(xiàn)功能放入同一個文件
下面看一個簡單的例子,假定自定義了一個模塊 sampleAssert,其代碼如下:
def int_list_sort(input_list):# 被測對象,完成對輸入的整數(shù)列表排序input_list.sort()# 完成排序if __name__ == "__main__":# 判斷條件,里面的內(nèi)容是用來測試的def test_normal_positive_input():# 定義一個測試用例input_list = [3, 5, 9, 1, 8]int_list_sort(input_list)assert input_list == [1, 3, 5, 8, 9]print("test_normal_positive_input: PASS")test_normal_positive_input()# 執(zhí)行測試用例如果我們是 import(引入)該模塊,case 是不會執(zhí)行的,即第 3 行開始的塊是不會執(zhí)行的,所以包含在該塊內(nèi)的測試用例定義不會被看到,測試用例也不會被執(zhí)行 。
$ python# 啟動解釋器,Python 3Python 3.7.3 (default, Mar 27 2019, 16:54:48)[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwinType "help", "copyright", "credits" or "license" for more information.>>> import sampleAssert# 引入我們剛才定義的模塊>>> sampleAssert.test_normal_positive_input()# 測試函數(shù)是不可見的Traceback (most recent call last):File "<stdin>", line 1, in <module>AttributeError: module 'sampleAssert' has no attribute 'test_normal_positive_input'>>> list_obj = [3, 1, 6, 100, 98, 9]>>> sampleAssert.int_list_sort(list_obj)# 被測對象是可見的>>> list_obj[1, 3, 6, 9, 98, 100]# 排序后的結(jié)果如果是直接運行該腳本,則測試用例就會被觸發(fā) 。
$ python sampleAssert.pytest_normal_positive_input: PASS
下面我們來實現(xiàn)一個冒泡排序法,其僅對整數(shù)列表有效 。冒泡排序法是最簡單的排序法,其通過交換相鄰的元素來實現(xiàn)排序 。下面以對包含 4 個元素 3、1、5、2 的列表進行排序為例來解釋這個過程,如圖 2 所示 。
python自動化測試面試題 python測試代碼怎么寫


圖 2 冒泡排序
首先從尾部,也就是下部依次查找不符合排列要求的相鄰兩個數(shù),第一次找到的是 5 和 2,交換它們,然后繼續(xù)查找得到 3 和 1 這兩個不符合要求的相鄰數(shù),交換它們 。通過這一輪的交換,最小的數(shù)交換到了第一個元素 。然后繼續(xù)其他記錄的排序,第二輪可以保證第二小的數(shù)排到第二個位置上 。以此類推,最多經(jīng)過 n-1 輪就可以完成所有數(shù)據(jù)的排序 。
【python自動化測試面試題 python測試代碼怎么寫】在這個例子中,經(jīng)過了兩輪就完成了所有數(shù)據(jù)的排序 。
下面是完整的實現(xiàn)代碼和相關測試代碼:
def bubble_sort(input_list):# 被測函數(shù),冒泡排序if type(input_list) is not type([]):# 如果輸入?yún)?shù)不符合要求print("Invalid Input Type")return Nonefor x in input_list:# 有元素不是整數(shù),返回Noneif type(x) != int:return Noneinput_len = len(input_list)print()print("Origin:", input_list)if input_len <= 1:# 沒有元素或者僅包含一個元素return input_listfor x in range(input_len-1):# 如果順序不對,和旁邊的元素交換swap_happens = Falsefor y in range(input_len-1, x, -1):if input_list[y-1] > input_list[y]:input_list[y-1], input_list[y] = input_list[y], input_list[y-1]swap_happens = Trueif swap_happens == False:# 上一輪沒有交換數(shù)據(jù),已經(jīng)排序完畢breakprint("Temp %d:" % x, input_list)return input_list# 返回排序完畢的列表if __name__ == "__main__":# 如果是運行該腳本而不是引入該腳本import random# 測試代碼開始def test_empty_input():# 如果輸入的列表為空input = []output = bubble_sort(input)assert type(output) == type([])assert len(output) == 0def test_invalid_input():# 如果輸入的不是列表output = bubble_sort(1)assert output is Nonedef test_one_element():# 如果列表僅包含一個元素input = [1, ]output = bubble_sort(input)assert type(output) == type([])assert len(output) == 1assert output[0] == 1def test_neg_one_element():# 如果列表僅包含一個元素,而且不是整數(shù)input = ["name", ]output = bubble_sort(input)assert output is Nonedef test_two_element():# 如果列表僅包含兩個元素input = [18, 8]output = bubble_sort(input)assert type(output) == type([])assert len(output) == 2assert output[0] == 8assert output[1] == 18def test_neg_two_element():# 如果列表包含兩個元素,但并不都是整數(shù)input = [1, "name"]output = bubble_sort(input)assert output is Nonedef test_normal_pos():# 正常輸入input = [88, 1, 20, 8, 9, 21, 98, 76]output = bubble_sort(input)expected_output = [1, 8, 9, 20, 21, 76, 88, 98]assert output == expected_outputdef test_dup_elements():# 如果有重復的元素input = [88, 1, 20, 8, 9, 21, 98, 8, 76]# 兩個8print("input:", input)output = bubble_sort(input)print("outpout:", output)expected_output = [1, 8, 8, 9, 20, 21, 76, 88, 98]assert output == expected_outputdef test_all_same():# 如果所有元素都相等input = [8, 8, 8, 8, 8, 8]# 所有的輸入元素相同output = bubble_sort(input)expected_output = [8, 8, 8, 8, 8, 8]assert output == expected_outputdef random_test():# 隨機生成測試數(shù)據(jù)# 生成隨機的輸入數(shù)據(jù)expected_list_len = random.randint(10, 100)input_list = []for x in range(expected_list_len):input_list.append(random.randint(-100, 100))input_len = len(input_list)org_input = input_list.copy()# 備份一下元素數(shù)據(jù)output = bubble_sort(input_list)print("org_input", org_input)#input_len = len(org_input)assert len(output) == expected_list_lenfor pos in range(input_len-1):val = output[pos]# 該數(shù)據(jù)在原始列表中存在# 這樣可以確保所有結(jié)果列表中的數(shù)據(jù)都是來自輸入列表assert val in org_input# 而且其出現(xiàn)的次數(shù)和元素列表中出現(xiàn)的次數(shù)一致# 這可保證輸入列表中的數(shù)據(jù)不會丟失assert output.count(val) == org_input.count(val)# 保證有序,從小到大assert val <= output[pos+1]def test_random_data():# 隨機輸入測試# 進行100輪隨機輸入的測試for x in range(100):random_test()# 執(zhí)行所有的測試test_empty_input()test_invalid_input()test_one_element()test_neg_one_element()test_two_element()test_neg_two_element()test_normal_pos()test_dup_elements()test_all_same()test_random_data()

推薦閱讀