接口自動化測試小結


一、什么項目適合做自動化測試?(摘自蟲師博客)

軟件需求變動不頻繁

  測試腳本的穩定性決定了自動化測試的維護成本。如果軟件需求變動過於頻繁,測試人員需要根據變動的需求來更新測試用例以及相關的測試腳本,而腳本的維護本身就是一個代碼開發的過程,需要修改、調試,必要的時候還要修改自動化測試的框架,如果所花費的成本不低於利用其節省的測試成本,那么自動化測試便是失敗的。

  項目中的某些模塊相對穩定,而某些模塊需求變動性很大。我們便可對相對穩定的模塊進行自動化測試,而變動較大的仍是用手工測試。

 

項目周期較長

    由於自動化測試需求的確定、自動化測試框架的設計、測試腳本的編寫與調試均需要相當長的時間來完成。這樣的過程本身就是一個測試軟件的開發過程,需要較長的時間來完成。如果項目的周期比較短,沒有足夠的時間去支持這樣一個過程,那么自動化測試便成為笑談。

 

自動化測試腳本可重復使用

  自動化測試腳本的重復使用要從三個方面來考量,一方面所測試的項目之間是否很大的差異性(如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()

生成的測試報告如下圖:

收到的郵件如下圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM