999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

用例驅動自動化測試在國產化環境下應用

2018-03-03 13:12:04馮亞玲徐鶯
數字技術與應用 2018年11期

馮亞玲 徐鶯

摘要:針對傳統API接口測試用例數據量大、用例和腳本管理繁瑣以及國產化環境下缺乏通用測試工具的問題,本文通過對API接口自動化測試技術特點和國產化應用技術特點的分析,設計了基于Excel用例模板的API接口通用自動化測試工具,采用Python語言開發代碼,將測試用例、測試數據和測試執行的代碼分層開發,實現了用例數據驅動API接口自動化測試在國產化環境下的應用。

關鍵詞:API接口;用例數據驅動;自動化測試;國產化環境;Python語言

中圖分類號:TP312 文獻標識碼:A 文章編號:1007-9416(2018)11-0097-05

0 引言

API接口測試是軟件測試中非常普遍而重要的測試類型,能夠覆蓋業務規則,體現系統行為[1],測試可信度高、效果好。API接口測試要求測試工程師了解軟件的設計及接口的定義,針對功能、性能和穩定性等方面要求,編寫相應的測試代碼、構造各種測試用例進行測試。

每一個API接口都有其自身特點,組成的業務邏輯復雜,在測試過程中,需要針對每個API接口設計一套測試腳本,模擬各種正常、異常的測試參數[2],比對實際結果與期望結果的一致性,測試工作量大,腳本和用例的維護工作繁瑣,要求測試人員始終保持高度謹慎;同時,軟件API接口使用環境種類繁多,包括X86平臺,國產化平臺,Windows系統,國產化操作系統等,要求API接口測試工具能滿足國產化需求,兼容各種主流平臺環境。如果能實現用例驅動API接口自動化測試在國產化環境下的應用,既可以減輕手工測試的強度,又可以滿足國產化環境測試需求,提高接口測試的自動化水平和軟件質量[3]。

1 Python與自動化和國產化

Python可定義為面向對象的腳本語言,開發和迭代的效率極高[4];它內置了眾多支持一系列應用級編程任務的標準庫,可通過自行開發的庫或眾多第三方的擴展庫進行擴展。Python腳本可通過靈活的集成機制輕松地與應用程序的其他部分進行通信,Python可以使用C和C++的庫,可以被C和C++的程序調用,可以與Java組件集成。Python所具有的質量和效率優點,以其付出更少的精力完成更多的任務而成為自動化測試開發的首選語言。

Python的標準實現是由可移植的ANSIC編寫,除了語言解釋器本身以外,Python自帶的標準庫和模塊在實現上也盡可能地考慮了跨平臺的可移植性[5]。Python程序自動編譯成可移植的字節碼,這些字節碼在已安裝兼容版本Python的平臺上運行的結果都是相同的。這意味著Python程序的核心語言和標準庫可以在Linux、Windows和其他帶有Python解釋器的平臺上無差別運行,能很好的滿足兼容各種平臺環境的測試需求。

2 API自動化測試應用工具的特性分析

API自動化測試應用工具是為了實現適用于各種主流平臺的軟件接口自動化測試需求,它應該包括用例驅動性、API接口通用性、平臺兼容性等需求特性。

2.1 用例驅動性

用例驅動性指的是用例數據驅動API接口自動化測試。API接口除了實現其本身的功能之外,還與其他接口存在上下文關系,多變的接口關系組成各種業務測試邏輯。本質上測試執行的每一步都只是一個接口,可以抽象出執行邏輯[6],使測試的執行邏輯與業務邏輯無關,達到測試執行腳本與接口業務邏輯關系解耦合的目的。因此,測試人員根據用例模板進行測試用例數據設計,體現接口調用順序和參數關系,無需關心測試腳本的調用和執行,由測試工具根據用例數據進行接口函數識別、接口參數識別和封裝,通用化透明化地進行測試業務流程執行。

2.2 API接口通用性

API接口通用性指的是API自動化測試應用工具適用于所有API接口類型的DLL庫和.SO庫的接口測試,滿足功能、性能和穩定性測試需求。軟件API接口雖然繁多,但接口的輸入輸出測試、接口的異常參數處理重復性較強[7],接口測試的結果易于形式化處理,測試用例間存在較大的共性,可對這些用例進行模板定制,形成模板化可通用的測試工具。

2.3 平臺兼容性

平臺兼容性指的是API自動化測試應用工具可以在Linux、Windows和其他帶有Python解釋器的平臺上無差別運行,且能方便地在測試環境中進行快捷部署。

3 API自動化測試應用工具的框架研究與設計

在實際系統中,針對API接口測試形成模板化可重用的測試架構,可以解決測試自動化問題,降低自動化測試腳本設計的復雜度,提高測試工具的通用性和可擴展性,真正帶來提高效率的價值。

3.1 框架設計

API自動化測試應用工具的主要目標是接收測試用例,轉換成測試數據進行測試執行,最終輸出測試結果。

根據API自動化測試應用工具的特性分析,測試框架采用分層結構[8],由測試輸入層、測試數據層、測試執行層、測試輸出層組成,每一層通過各功能模塊實現自己特定的任務,各層之間根據需要去進行調用。各功能模塊之間的交互關系及其對應于框架的分層關系如圖1所示。

3.2 測試輸入層

包含數據讀取模塊,用于接收測試用例文件、頭文件和測試參數等數據輸入。

3.3 測試數據層

包含數據識別模塊、數據處理模塊、參數封裝模塊、測試場景構建模塊,是整個測試程序的入口,它實現測試輸入數據解析,完成測試數據轉換和測試場景構建,調用測試執行腳本,輸出日志記錄。

3.4 測試執行層

包含功能測試模塊、性能測試模塊、穩定性測試模塊,用于執行測試數據,對接口的調用進行封裝,根據測試場景完成測試執行,并輸出測試結果。

3.5 測試輸出層

包含測試結果處理模塊、測試日志記錄模塊,用于收集測試結果和測試日志記錄,以文件的形式輸出給測試人員。

4 API自動化測試應用工具的實現與應用

在具體的測試代碼開發過程中,主要采用分層的思想編寫代碼,每一層完成的任務由其包含的功能模塊實現,下面詳細介紹每層代碼的開發實現。

4.1 測試輸入層

測試輸入層主要完成數據讀取模塊的功能。用于讀取測試用例文件、頭文件和測試參數數據。

4.1.1 用例文件數據

測試人員根據Excel用例模板設計測試用例。用例模板如圖2所示。

在用例模塊中將調用接口的函數名、參數類型、參數值、參數輸入輸出關系和調用順序按定義進行描述:

(1)函數說明列表。用例集中需要調用的接口函數列表;(2)測試用例。測試人員針對被測接口函數對象設計的用例,包括函數調用順序、參數值、參數輸入輸出關系等;(3)標志區域。區分被測接口和關聯接口,明確測試用例標號;(4)函數名。接口的函數名;(5)函數參數說明。接口函數的參數個數和參數類型,以及在該用例集中不變化的參數值。

4.1.2 頭文件和測試參數數據

頭文件數據包括接口庫包含的基本數據類型和結構體嵌套數據類型等參數信息。

測試參數是構建測試場景需要的配置信息,包括用例文件路徑、被測接口庫路徑等相對固定的參數,還包括測試分支選擇、并發用戶數、多進程/多線程啟動、測試運行時間、測試退出條件等參數信息,其中,變化的參數可通過配置文件或命令行參數的方式輸入。例如:

casename=c:\\example.xls#用例表路徑

testcase=0#功能測試0,性能測試1,穩定性測試2

methodflag=0#線程(0)/進程(1)執行

usernum=20#并發用戶數

4.2 測試數據層

測試數據層主要完成數據識別模塊、數據處理模塊、參數封裝模塊和測試場景構建模塊的功能。將讀取的用例文件數據和配置參數數據進行識別,處理為相應的測試數據。

4.2.1 數據識別模塊和數據處理模塊

數據識別模塊的功能是將讀取的數據按照事先制定的規則識別為有特定意義的用例數據,將輸入數據和信息字段建立對應關系。數據處理模塊將識別出來的用例數據處理為可執行的測試數據。

(1)識別用例文件中接口函數描述說明,建立接口函數與參數個數、參數類型、參數值之間的關聯關系;如表1所示。

ConnectDev函數是pre準備階段執行的函數,有三個參數,參數類型依次是UINT32、pHDEV、UINT8,參數值在該測試集中不變化,分別是0、out1、0;其中,out1表示該參數是輸出參數,輸出值需保存供其它函數調用。OpenApp函數類似。

GenerateKey函數是act被測階段函數,有三個參數,參數類型依次是pHPIPE、WORKKEYATTR、pHANDLE,參數值在該測試集中變化,變化在測試用例中體現;

(2)識別接口函數執行次數、預期結果,不同接口函數之間的參數輸入輸出關系、調用順序等。如表2所示。

測試用例1,GenerateKey函數執行完后執行DestroyKey函數,GenerateKey函數的參數值依次為ref_out2、(2,1,0,16)、out3,執行次數為1次,預期結果默認為0;DestroyKey函數的參數值依次為ref_out2、ref_out3,執行次數為1次,預期結果默認為0。GenerateKey函數的ref_out2參數表示該參數的輸入值需調用out2參數的輸出值,out3輸出值供DestroyKey函數的ref_out3參數調用。

(3)識別基本數據類型和結構體嵌套數據類型等,使接口函數的參數類型和參數值建立關聯關系。如:

GenerateKey函數三個參數類型依次是pHPIPE、WORKKEYATTR、pHANDLE,對應的數據類型為指針c_void_p、結構體class WORKKEYATTR、指針c_void_p,對應的參數值是ref_out2、(2,1,0,16)、out3。在處理過程中,參數1按指針類型引用out2的輸出值,參數2按結構體WORKKEYATTR的各字段類型對(2,1,0,16)的每個值進行賦值,參數3按指針類型將輸出值保存在out3中。

(4)識別測試參數信息,明確測試場景構建數據。將讀入的配置參數數據與測試分支選擇testcase、并發用戶數usernum、多進程/多線程啟動methodflag、測試運行時間runtime、測試退出條件exitflag等測試場景構建信息字段建立對應關系。

API自動化測試應用工具提供了通用化的用例數據識別和處理模型,對接口函數的每個參數都根據參數類型和參數值進行賦值,對接口函數之間的調用順序和參數引用建立邏輯關系。

4.2.2 參數封裝模塊

將經處理后的測試數據封裝為接口函數調用可執行的參數。

傳統的API接口測試工具中,每一個API接口對應一套測試腳本,原因在于接口之間存在調用關系、參數之間存在引用關系,接口函數的形參和實參需一一對應,不同的接口含有不同個數和類型的形參,這就導致了針對每個接口函數都需要測試腳本去做形參和實參的匹配,不同接口之間測試腳本不能復用。

本文實現的API自動化測試應用工具提供了可復用的參數封裝模塊,經過用例數據識別和處理后,接口函數的每個形參都處理為對應的實參,對接口函數實參的封裝采用Python提供的*args可變位置參數實現。即多個實參按照位置傳值,放到一個元組里面,以*開頭,可以傳遞多個參數。如:

libc=windll.LoadLibrary(dllpath)#加載被測dll庫

def dealparam:#處理函數參數并封裝

#識別函數funcname

#識別函數參數個數和參數類型

for i in range(paramlen):#根據參數類型和參數值賦值

param[i] = value[i]

execparam.append(param[i]) #封裝參數

ret=getattr(libc,funcname)(*execparam)#接口封裝調用

通用化的接口參數封裝模塊使不同的接口函數可以使用同一模板實現參數封裝,不再需要定制化的測試腳本。

4.2.3 測試場景構建模塊

測試場景構建模塊根據測試參數構建測試場景。選擇功能、性能或穩定性測試分支,采用多進程/多線程的方式啟動并發測試,線程/進程數由并發用戶數決定,到達運行時間后或者測試人員選擇退出測試。

testcase=1#功能測試0,性能測試1,穩定性測試2

import MyProcess,MyThread#導入多進程/多線程庫

methodflag=0#選擇執行方式,多進程方式=0,多線程方式=1

for i in range(usernum):#根據并發用戶數啟動線程/進程數

#將運行時間和測試退出方式通過參數傳遞給執行函數

p = MyProcess(test1,(execlist,exit_flag,run_time,row,timeflag,j,tmpparam,))

processes.append(p)

4.3 測試執行層

測試執行層主要完成功能測試模塊、性能測試模塊和穩定性測試模塊的功能。功能、性能和穩定性測試的用例文件可復用,根據不同的測試場景進行不同測試分支的執行。

4.3.1 功能測試模塊

功能測試模塊通過調用接口庫驗證函數的功能是否與描述一致,測試執行的實際返回值與期望返回值是否一致,并返回測試結果。測試用例如表3所示。

該用例集的測試對象為對稱加密函數Encrypt,不僅需要驗證加密函數Encrypt的執行結果,也需要驗證加密結果的正確性。用例1設計的測試內容為產生密鑰GenerateKey->加密Encrypt->解密Decrypt->銷毀密鑰DestroyKey->驗證加解密正確性,即GenerateKey輸出結果為密鑰句柄out3,Encrypt利用密鑰out3對96字節的數據(96,1)進行加密,輸出密文out4,Decrypt利用密鑰out3對密文out4進行解密,輸出明文out5,加解密完成后銷毀密鑰out3,為了驗證加解密過程的正確性,將解密輸出的明文out5與原始數據(96,1)進行比較。

libc=windll.LoadLibrary(dllpath)#加載被測dll庫

#識別函數列表funclist

for i in range(funclist):

dealparam(func[i])#處理列表中每個函數的參數并封裝

ret=getattr(libc,func[i])(*execparam)#接口封裝調用

if ret != respectexec:

break#如果函數執行結果不符合預期,退出測試

#函數執行結果符合預期,進行輸出結果有效性檢查

#如:判斷ref_out5 是否等于96字節的原始數據(96,1)

#返回測試結果

4.3.2 性能測試模塊

性能測試模塊驗證接口在各測試場景下的性能指標以及性能指標是否與要求一致。測試用例如表4所示。

該用例集的測試對象為對稱加密函數Encrypt在不同測試場景下的性能指標,性能測試過程中Encrypt是被測接口對象,GenerateKey、Decrypt、DestroyKey是關聯接口,測試執行時關聯接口執行一次,輸出和Encrypt有引用關系的參數值,重點關心被測接口在測試場景下的成功執行次數(執行失敗時整個測試指標無參考意義)。如:

測試配置參數為testcase=1、usernum=20、methodflag=1、runtime=5、exitflag=0,即Encrypt函數在多進程啟動條件下,20個并發用戶數運行5min的性能指標,達到運行時間后退出測試。測試配置參數支持自定義。

libc=windll.LoadLibrary(dllpath)#加載被測dll庫

for i in range(funclist):

dealparam(func[i])#處理列表中每個函數的參數并封裝

#構建性能測試場景

#執行關聯接口,保存輸出參數

if time<runtime:#執行被測接口

ret=getattr(libc,tarfunc)(*execparam)#被測接口封裝調用

if ret != respectexec:

writelog(‘loginfo.txt,loginfo)#記錄錯誤日志

break#如果函數執行結果不符合預期,記錄日志后退出測試

totalnum+=1#統計執行成功次數

#返回性能測試結果

4.3.3 穩定性測試模塊

穩定性測試模塊驗證在各測試場景下接口本身的穩定性以及在業務邏輯下接口組合關系的穩定性。測試用例如表5所示。

(1)接口本身的穩定性。當該用例集的測式對象為對稱加密函數Encrypt在不同測試場景下的穩定性時,代碼實現與性能測試模塊相似,關心Encrypt接口在測試場景下的穩定性,與性能測試的區別在于穩定性測試執行過程中記錄執行失敗的錯誤信息,不強制退出測試。(2)業務邏輯的穩定性。當該用例集的測式對象為加解密業務在不同測試場景下的穩定性時,代碼流程相似,在測試運行時間內反復執行整個加解密業務流程,不再只針對某一個測試接口對象。

4.4 測試輸出層

測試輸出層主要完成測試結果處理模塊和測試日志記錄模塊的功能。

4.4.1 測試結果處理模塊

測試結果處理模塊負責測試結果的收集、處理和展示。

(1)功能測試結果。功能測試結果包括接口執行結果、接口功能有效性結果以及綜合前兩項指標所得的用例通過結果,三項結果回寫至Excel用例文件。如表6所示。(2)性能測試結果。性能測試結果返回被測接口對象在測試場景下的執行總次數,結果回寫至Excel用例文件。如表7所示。(3)穩定性測試結果。穩定性測試結果包括被測接口對象或業務對象在測試場景下的執行總次數、失敗次數,測試結果以txt文件展示。如表8所示。

tarfunc2(業務1)的總次數為447796,錯誤次數為0,執行時間3600min

業務2的總次數為125202,錯誤次數為0,執行時間3600min

業務3的總次數為572596,錯誤次數為0,執行時間3600min

(其中,一行用例代表一個業務邏輯。)

4.4.2 測試日志記錄模塊

測試日志記錄模塊負責測試日志記錄和工具運行日志記錄。記錄內容包括用例執行詳細信息、測試執行失敗的錯誤信息等。

用例執行詳細信息包括執行的用例文件信息、測試集(用例表)信息、測試函數信息(用例行)等;錯誤信息包括出錯函數名信息、錯誤碼信息、執行失敗時間信息等。

5 結語

本文研究了API接口自動化測試方法,分析了用例數據通用化解析、用例驅動自動化測試和國產化環境應用等技術,提出了一種API接口自動化測試框架,解決了用例數據轉換、接口參數封裝和接口映射調用的難題,最后采用Python語言實現了用例驅動API接口自動化測試在國產化環境下的應用工具。該工具在實際項目中進行了應用,可滿足X86平臺和飛騰、龍芯、兆芯等國產化平臺下的API接口功能測試、性能測試和穩定性測試需求,在測試效率的提高和測試成本的降低方面取得了良好的效果[9]。

參考文獻

[1]林萍.數據分層的接口自動化測試框架設計與應用[J].信息技術,2016(5):37-40.

[2]吳振宇,顧曉明,李翔.協議可擴展的軟件接口測試工具的研究與實現[J].數字技術與應用,2017(12):58-60.

[3]蘇春梅,何劍偉,奚宏明,et al. 基于XML的通用數據接口測試工具[J].兵工自動化,2012,31(8):72-77.

[4]Wesley Chun.Python核心編程[M].人民郵電出版社,2016.

[5]楊清玉,李金麗,陳吉蘭,et al.HTTP接口自動化測試方法研究[J].微型機與應用,2016,35(18):22-25.

[6]余永忠,張哲軍,陳華軍.IEC61970與IEC61968標準接口自動化測試系統研發[J].南方電網技術,2013,7(5):61-64.

[7]范典華,潘芳蕊.自動化測試在業務支撐系統接口測試中的應用設計[J].電信工程技術與標準化,2012,25(4):63-67.

[8]郝曉曉,張衛豐.基于XML的SDK自動化測試框架的設計與實現[J].計算機技術與發展, 2010,20(4):101-104.

[9]蔡春梅.基于pyUnit的OTS REST接口自動化測試設計與實現[J].信息技術與標準化,2017(4).

Application of Case-Driven Automated Testing in Localized Environment

FENG Ya-ling, XU Ying

(No.30 Institute of CETC, Chengdu Sichuan? 610041)

Abstract:Traditional API interface testing has the following disadvantages: a large number of test cases, management of test cases and scripts is cumbersome, and lack of common test tools in the localized environment. In view of the above shortcomings, this paper analyzes the characteristics of the API interface automation test technology and the characteristics of the localized application technology. The paper designed an API automation universal test tool based on Excel test case template,? layered the development of test cases, test data, and test execution and code by using Python language. This paper realized the technology that the test case data driven API interface automatic test, successfully applied to the domestic environment.

Key words:API; case data-driven; automated testing; localized environment; Python

主站蜘蛛池模板: 国产免费网址| 日本久久久久久免费网络| 国产原创演绎剧情有字幕的| 国产精品自拍露脸视频| 亚洲综合网在线观看| 国产精品网曝门免费视频| 激情综合婷婷丁香五月尤物 | 新SSS无码手机在线观看| 超清无码熟妇人妻AV在线绿巨人| 精品一区二区无码av| 国产精品内射视频| 久久人体视频| 91久久大香线蕉| 97超级碰碰碰碰精品| 狠狠做深爱婷婷综合一区| 亚洲性视频网站| 免费无码又爽又黄又刺激网站| 无码国产偷倩在线播放老年人| 日韩欧美国产成人| 久久综合激情网| 99色亚洲国产精品11p| 亚洲综合色吧| 国产精品视频系列专区| 日本成人一区| 69免费在线视频| 久久精品视频亚洲| 日本伊人色综合网| 国产网站免费| 久久亚洲精少妇毛片午夜无码| 国产精品久久久久鬼色| 国产真实二区一区在线亚洲| 丁香五月亚洲综合在线| 又污又黄又无遮挡网站| 91小视频版在线观看www| 无码乱人伦一区二区亚洲一| 亚洲精品福利视频| 亚洲欧洲日产无码AV| 在线a网站| 亚洲婷婷丁香| 午夜影院a级片| 国模私拍一区二区| 国产成人一区| 日韩精品无码一级毛片免费| 国产白浆在线观看| 一级毛片基地| 激情乱人伦| 久久综合九色综合97婷婷| 亚洲精品无码抽插日韩| 亚洲国产日韩在线观看| 中日韩欧亚无码视频| 欧美yw精品日本国产精品| 亚洲天堂.com| 99热这里只有精品2| 91无码网站| 99热国产在线精品99| 免费一级毛片在线播放傲雪网| 色偷偷综合网| 无码人中文字幕| 狠狠亚洲五月天| 欧美在线精品怡红院| 毛片免费在线| 国产亚洲一区二区三区在线| 不卡无码网| 日韩午夜伦| 日韩在线欧美在线| 91精品最新国内在线播放| 国产嫖妓91东北老熟女久久一| 国产精品亚洲欧美日韩久久| 精久久久久无码区中文字幕| h网址在线观看| 亚洲av无码人妻| 欧美中文字幕一区| 国产91丝袜在线播放动漫| 免费毛片全部不收费的| 久久精品只有这里有| 亚洲天堂在线免费| 99精品一区二区免费视频| 午夜少妇精品视频小电影| 又爽又大又光又色的午夜视频| 国产极品美女在线观看| 国产在线视频福利资源站| 色婷婷亚洲综合五月|