一、什么項目適合做自動化測試?(摘自蟲師博客)
軟件需求變動不頻繁
測試腳本的穩定性決定了自動化測試的維護成本。如果軟件需求變動過於頻繁,測試人員需要根據變動的需求來更新測試用例以及相關的測試腳本,而腳本的維護本身就是一個代碼開發的過程,需要修改、調試,必要的時候還要修改自動化測試的框架,如果所花費的成本不低於利用其節省的測試成本,那么自動化測試便是失敗的。
項目中的某些模塊相對穩定,而某些模塊需求變動性很大。我們便可對相對穩定的模塊進行自動化測試,而變動較大的仍是用手工測試。
項目周期較長
由於自動化測試需求的確定、自動化測試框架的設計、測試腳本的編寫與調試均需要相當長的時間來完成。這樣的過程本身就是一個測試軟件的開發過程,需要較長的時間來完成。如果項目的周期比較短,沒有足夠的時間去支持這樣一個過程,那么自動化測試便成為笑談。
自動化測試腳本可重復使用
自動化測試腳本的重復使用要從三個方面來考量,一方面所測試的項目之間是否很大的差異性(如C/S系統和B/S系統的差異);所選擇的測試工具是否適應這種差異;最后,測試人員是否有能力開發出適應這種差異的自動化測試框架。
二、web 接口測試分類與測試要點
web 接口測試分類:
服務器接口測試,是測試瀏覽器與服務器的接口
外部接口測試,典型例子是第三方登錄
web接口測試測試要點:
1、請求是否正確,默認請求成功是200,如果請求錯誤也能返回404、500等
2、檢查返回數據的正確性與格式;json是一種非常常見的格式
3、接口的安全性,一般web都不會暴露在網上任意被調用,需要做一些限制,比如鑒權或認證
4、接口的性能,web接口同樣注重性能,這影響用戶的使用體驗
三、基於python 自帶的單元測試框架unittest 編寫的接口測試框架特點:
a . 支持簡單易用的表格型語法,使得可以用統一方式創建測試用例(.yml / .json 文件)
b . 提供HTML的簡單易讀的report 和日志結果文件
c . 平台和應用相互獨立(平台:測試框架本身;應用:被測程序)
d . 提供XML格式的輸出文件,非常容易進行持續集成
e . 支持創建數據驅動的測試用例
f . 支持代碼驅動(比如有關聯的接口)
g . 提供test case和test suite級別的setup和teardown
注:
數據驅動:因為數據的改變導致結果的改變(參數化)
數據的改變(更新)驅動自動化的執行,從而引起結果改變
四、基於python 自帶的單元測試框架unittest 編寫的接口測試架構
分為三層,分別是用例層、控制層、引擎層(驅動層)
用例層:用例層支持 yml文件 json文件 用它來寫用例的好處是靈活,字段不需要像excel里面那樣
控制層:控制層用來發郵件與 產生報告
引擎層(驅動層):用python 自帶的requests 模塊調用接口,封裝了各種方法,支持加cookie header 等的各種入參類型
五、完整的測試流程
A . 編寫測試用例
直接使用Python自帶的單元測試框架unittest來編寫自動化測試用例,利用其組織測試用例,斷言預期結果,以及批量執行測試用例等功能,可以很好的進行Web自動化測試的開發
代碼參考個人git 倉庫:https://coding.net/u/chendai21/p/llq-code/git
B. 執行測用例, 執行完畢后自動生成測試報告,發送郵件
整個代碼執行過程可以分成二個步驟:
1.通過unittest框架的discover()找到匹配的測試用例(以test_開頭的腳本),由BeautifulReport 的BeautifulReport 方法執行測試用例並生成最新的測試報告。
前置條件:把BeautifulReport文件解壓后拷貝到External Libraries—>site-packages里面,主要用於生成HTML測試報告,以便生成一份通俗易懂的測試報告來展示自動化測試成果。
2.先封裝sendmail類再定義send_report()函數(發送指定路徑下某文件的郵件),將得到的最新測試報告的完整路徑傳給sendmail,實現發郵件功能。
代碼如下:
import sys,os
BASE_PATH = os.path.dirname(os.path.dirname(
os.path.abspath(__file__)))
sys.path.insert(0,BASE_PATH)
from common.tools import GetCase
from conf.setting import PY_PATH,REPORT_PATH
import unittest,BeautifulReport
def send_report(all_count, pass_count, report_file=None):
title = time.strftime('%Y-%m%d %H%M%S') + '接口測試報告'
content = '''
Dear all:
本次接口測試共運行{all}條測試用例,通過{ok}條,失敗{fail}條。
測試報告詳細見附件。
'''.format(all=all_count, ok=pass_count, fail=(all_count - pass_count))
# 發送測試報告
m = SendMail(MAIL_USER_INFO, MAIL_PASSWD, RECV, title, content, file=report_file)
m.send_mail()
def run():
g = GetCase()
g.creat_py() #生成測試文件
suite = unittest.TestSuite() #創建測試套裝
all_cases = unittest.defaultTestLoader.discover(PY_PATH,'Test*.py') #讀取測試用例
[suite.addTests(case) for case in all_cases]
report_html = BeautifulReport.BeautifulReport(suite)
report_filename = '{date}_TestReport.html'.format(date=time.strftime('%Y%m%d%H%M%S'))
# 生成報告的文件名格式20180329190544_TestReport.html
report_html.report(filename=report_filename, description='用例描述', log_path=REPORT_PATH)
send_report((report_html.failure_count + report_html.success_count), report_html.success_count,
os.path.join(REPORT_PATH, report_filename))
# BeautifulReport 生成的報告 用點就能看到它的屬性了(success_count、failure_count)
# 實際上BeautifulReport是一個類 然后實例化后有對應的實例變量
run()
生成的測試報告如下圖:
收到的郵件如下圖: