亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        HTTP接口自動化測試方法研究*

        2016-10-28 08:27:22楊清玉李金麗陳吉蘭李志偉
        關(guān)鍵詞:測試報告測試用例測試數(shù)據(jù)

        楊清玉,李金麗,陳吉蘭,李志偉

        (中標軟件有限公司 操作系統(tǒng)測試認證中心,北京 100190)

        ?

        HTTP接口自動化測試方法研究*

        楊清玉,李金麗,陳吉蘭,李志偉

        (中標軟件有限公司 操作系統(tǒng)測試認證中心,北京 100190)

        研究了HTTP接口自動化測試方法,采用Python語言開發(fā)代碼,使用Request調(diào)用HTTP接口。提出了一種分層結(jié)構(gòu)的自動化測試框架,將接口調(diào)用、測試用例和測試數(shù)據(jù)的代碼分層開發(fā),生成基于HTML的測試報告。提出了兩種解決CSRF Token驗證問題的方案。該方法開發(fā)出的自動化測試腳本具有結(jié)構(gòu)清晰、易維護等優(yōu)點,能夠有效提高測試效率,降低測試成本。

        HTTP接口;Python;Request;自動化測試

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

        0 引言

        Web業(yè)務(wù)日趨復雜,系統(tǒng)愈加龐大,版本的發(fā)布周期變短,使得Web產(chǎn)品測試的難度極大地提高,工作量也大幅增加[1]。Web產(chǎn)品的測試中非技術(shù)性、重復性的測試工作占總的測試工作量比例比較大,因而需要大量的資源來保障Web產(chǎn)品的質(zhì)量[2-3]。在開發(fā)Web產(chǎn)品時,開發(fā)過程中一般采用了分層的軟件體系結(jié)構(gòu),Web頁面通過HTTP協(xié)議向接口發(fā)送請求,后端處理請求返回結(jié)果。由于業(yè)務(wù)邏輯比較復雜,有著大量的接口,如果使用自動化測試代替手工測試,可以有效提高測試效率,降低測試成本。

        1 HTTP協(xié)議

        圖1 客戶/服務(wù)器模式的信息交換過程

        超文本傳輸協(xié)議(Hyper Text Transfer Protocol, HTTP)是互聯(lián)網(wǎng)上應用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。HTTP是基于請求和響應模式的無狀態(tài)應用層協(xié)議。其客戶/服務(wù)器模式的信息交換過程如圖1所示。信息交換過程分四個部分:建立連接、發(fā)送請求信息、發(fā)送響應信息和關(guān)閉連接[4]。

        絕大多數(shù)的Web開發(fā)都是構(gòu)建在HTTP協(xié)議之上的Web應用。本文所進行的自動化測試的對象為中標軟件有限公司的微云操作系統(tǒng)產(chǎn)品,該產(chǎn)品的Web接口為HTTP協(xié)議的接口。針對該接口的自動化測試,筆者采用Python語言進行代碼的開發(fā),使用Request進行HTTP接口的調(diào)用。使用Eclipse并安裝PyDev插件作為集成開發(fā)環(huán)境,在自動化測試框架下開發(fā)自動化測試代碼。

        2 Python和Request

        Python是一個通用目的的編程語言,已經(jīng)有很多年的發(fā)展歷程。這個穩(wěn)定而成熟的語言是非常高層的、動態(tài)的、面向?qū)ο蟮暮涂缙脚_的。Python可以在所有主流的硬件平臺和操作系統(tǒng)上運行。它繼承了傳統(tǒng)編譯語言的強大性和通用性,同時也借鑒了簡單腳本和解釋語言的易用性,語法簡捷清晰、可讀性強、便于維護,并且具有一致性和規(guī)律性、豐富的標準庫,以及許多可以很容易在Python中使用的第三方模塊。Python還可以被當做最適合入門程序員掌握的優(yōu)秀語言,因為它免費、面向?qū)ο蟆U展性強,同時執(zhí)行嚴格的編碼標準[5]。

        Request對象的作用是與客戶端交互,收集客戶端的Form、Cookies、超鏈接,或者收集服務(wù)器端的環(huán)境變量。Request對象是從客戶端向服務(wù)器發(fā)出請求,包括用戶提交的信息以及客戶端的一些信息??蛻舳丝赏ㄟ^HTML表單或在網(wǎng)頁地址后面提供參數(shù)的方法提交數(shù)據(jù),然后通過Request對象的相關(guān)方法來獲取這些數(shù)據(jù)。Request的各種方法主要用來處理客戶端瀏覽器提交的請求中的各項參數(shù)和選項。

        3 自動化測試框架介紹

        3.1自動化測試框架設(shè)計思想

        本文設(shè)計的自動化測試框架采用分層結(jié)構(gòu),依據(jù)模塊化、可復用、低冗余等原則,將代碼根據(jù)不同的功能分為若干個獨立的模塊,這里將一類模塊稱為一層。每一層都完成自己特定的任務(wù),各層之間根據(jù)需要去進行調(diào)用。分層思想最先是在軟件開發(fā)過程中提出來的。當代碼量小的時候,采用這種模式會增加工作量;但是當代碼量變大時,采用這種模式可以使設(shè)計思路清晰,代碼冗余度變低,可擴展性更好,代碼維護更加方便,程序運行效率更高。

        3.2自動化測試框架實現(xiàn)

        自動化測試框架是由一個或多個自動化測試基礎(chǔ)模塊、自動化測試管理模塊、自動化測試統(tǒng)計模塊等組成的工具集合。本文的自動化測試框架如圖2所示,分為測試環(huán)境配置層、接口操作層、測試數(shù)據(jù)層、測試用例層、測試用例管理層等。每一層都實現(xiàn)自己特定的功能,并提供接口給其他層調(diào)用。

        圖2 自動化測試框架

        Config層:測試環(huán)境配置層,存儲測試環(huán)境相關(guān)設(shè)置參數(shù)。比如待測環(huán)境的IP、主機名、登錄用戶名、密碼等。

        TestAPI層:接口操作層,對HTTP接口的調(diào)用進行封裝。比如獲取列表信息、添加、刪除、修改等。

        TestData層:測試數(shù)據(jù)層,用于管理測試用例所需要用到的測試數(shù)據(jù)。Data文件的名稱需要與對應的Test Case名稱一致,以便數(shù)據(jù)解析。

        TestCase層:測試用例層,每一個TestCase類均采用單元測試框架來構(gòu)造,即每一個TestCase均繼承于unittest.testcase類。在實際的設(shè)計中,通過繼承unittest.testcase類,重寫并加入一些方法,從而形成了一個名為BaseTestCase的父類,全部的TestCase的類均繼承自這個父類。

        TestSuite層:測試用例管理,包括測試用例執(zhí)行的級別、每種測試級別對應的測試用例集以及日志記錄級別。

        HTMLTestRunner層:測試報告管理模塊,用于生成測試報告,這個報告是基于HTML的,方便瀏覽和統(tǒng)計。

        TestCenter層:測試管理層,是整個測試程序的入口。它實現(xiàn)了解析并找出需要執(zhí)行的測試用例,執(zhí)行測試用例腳本,并生成測試結(jié)果。

        4 測試代碼開發(fā)

        在具體的測試代碼開發(fā)過程中,主要編寫TestAPI層、TestCase層和TestData層的代碼。下面詳細介紹這三層代碼開發(fā)的模式。

        4.1TestAPI層

        這一層主要進行HTTP接口的調(diào)用。為了實現(xiàn)對接口的調(diào)用,首先,需要從項目組獲取圖3所示的接口說明。如果項目組沒有完整的接口說明文檔,可以結(jié)合firebug獲取。需要在Firefox瀏覽器中安裝firebug插件,啟用插件后,在瀏覽器上所進行的操作會被記錄下來。

        圖3 接口說明

        然后,編寫代碼調(diào)用HTTP接口。下面以添加用戶的HTTP接口調(diào)用代碼為例進行說明。

        def addWebUser(self, data):

        url=self.base_url+"Web_users/"

        data=json.dumps(data)

        r=requests.post(url=url,data=data,

        headers=self.headers, verify=self.verify)

        return {'status_code':r.status_code,

        'result':json.loads(r.text)}

        由于實際測項目中HTTP接口接收的參數(shù)格式和返回的信息是json格式,因此需要導入json模塊,并在調(diào)用接口前,使用json.dumps將參數(shù)轉(zhuǎn)換成json格式,對返回信息使用json.loads轉(zhuǎn)換成字典格式,以便后續(xù)使用。

        4.2TestCase層

        TestCase層用于存放編寫的測試用例,調(diào)用TestAPI層的方法??梢詫estCase層與實際的測試用例對應起來。當接口發(fā)生變化時,只需修改TestAPI中的代碼,而基本不需要修改或者只需要對TestCase層代碼進行很少量的修改。每一個測試用例用一個類表示,且均繼承自同一個父類BaseTestCase;而BaseTestCase則繼承自unittest.testcase類,所以,TestCase類均具有unittest.testcase類的屬性。在BaseTestCase類中定義了每個測試用例開始執(zhí)行和結(jié)束時的動作以及一些case中用到的公共方法。

        TestCase類的代碼包含四個部分:數(shù)據(jù)和實例初始化、測試環(huán)境準備、實際測試代碼、資源回收。代碼結(jié)構(gòu)如下。

        class ITC_EditUser_LegalName(BaseTestCase):

        ′′′

        @summary:編輯用戶-用戶名合法

        ′′′

        def setUp(self):

        #第一部分——數(shù)據(jù)和實例初始化

        #調(diào)用父類方法,獲取該用例所對應的測試數(shù)據(jù)模塊

        self.user=super(self.__class__, self).setUp()

        self.user_api=UserAPIs()

        self.flag = True

        # 第二部分——測試環(huán)境準備

        #添加用戶

        self.user_api.addUser(self.user.add_user)

        def test_EditUser_LegalName(self):

        #第三部分——實際測試代碼

        #編輯用戶

        def tearDown(self):

        #第四部分——用例執(zhí)行結(jié)束后的資源回收

        #刪除用戶

        self.user_api.deleteUser(data)

        4.3TestData層

        測試數(shù)據(jù)文件均存放在TestData層。每一個測試用例對應的測試數(shù)據(jù)文件均以.py格式的文件存在,且文件名與測試用例名(TestCase層中的類名)相對應。下面以添加用戶的測試數(shù)據(jù)文件進行說明。測試數(shù)據(jù)以變量的形式存在,其中XML格式的內(nèi)容便于Python裝飾器的使用。

        add_user={

        "name":"abcd",

        "password":"qwer1234"

        }

        xml_user_name = ′′′

        ′′′

        5 自動化測試執(zhí)行

        5.1測試用例管理

        測試用例管理使用XML文件以及對應的解析代碼來實現(xiàn)。測試用例執(zhí)行的級別可以根據(jù)項目需要設(shè)置為全用例集、BVT用例集、模塊級用例集、特定用例集等。每種測試級別使用對應的XML文件進行配置和管理。日志級別包括顯示所有日志信息、只顯示錯誤和警告日志信息、顯示調(diào)試信息等。

        下面以模塊級用例集的XML配置文件為例進行說明。module name為模塊名稱,description為對該模塊的功能描述,filename為該模塊對應的測試用例腳本存放的文件名稱,run為執(zhí)行標志,如果為True表示執(zhí)行,如果為False表示不執(zhí)行。

        5.2測試報告生成

        測試報告采用unittest單元測試庫擴展的HTMLTestRunner.py,可以生成HTML的自動化測試報告。使用方法如下面代碼所示。

        fp=file(result_file, 'wb')

        runner=HTMLTestRunner(

        stream=fp,

        title=u"中標麒麟微云操作系統(tǒng)V2.0-HTTP接口自動化測試報告",

        description=(

        u"中標麒麟微云操作系統(tǒng)V2.0-HTTP接口自動化測試報告 "

        u'測試執(zhí)行方式:%s' % exec_type

        )

        自動化測試執(zhí)行完成后,會在指定的目錄下生成測試報告。報告中顯示測試報告名稱、測試起始時間、測試時長、狀態(tài)(包括通過用例數(shù)、失敗用例數(shù)、錯誤用例數(shù)),顯示測試用例列表,可以展開顯示測試用例日志詳情,測試通過的用例綠色顯示,失敗的用例橙色顯示,錯誤的用例(一般是測試腳本有問題)紅色顯示,以便后續(xù)可以區(qū)分查看和分析。

        6 CSRF Token驗證問題解決

        跨站請求偽造(Cross-site Request Forgery,CSRF)是一種對網(wǎng)站的惡意利用。由于目標站無token/referer限制,導致攻擊者能以用戶的身份完成操作,達到各種目的。

        為了提高Web的安全性,有些Web在提交Ajax請求時需要CSRF Token驗證。如何在調(diào)用HTTP接口的頭信息中設(shè)置正確的Cookie值,成為自動化測試HTTP接口的難點。筆者在實際項目測試中提出了兩種解決方案,這兩種方案都需要結(jié)合Firefox瀏覽器。

        6.1通過Firefox瀏覽器獲取

        在Firefox瀏覽器中安裝firebug插件,啟用firebug。手動登錄待測Web頁面。查看firebug中登錄操作的【網(wǎng)絡(luò)】-【XHR】-【頭信息】-【響應頭信息】-【Set-Cookie】的內(nèi)容。

        腳本流程圖如圖4所示。使用該方法由于需要模擬用戶進行瀏覽器登錄操作,因此需要導入selenium.Webdriver模塊。

        圖4 通過Firefox瀏覽器獲取Cookie流程圖

        6.2通過Logout接口和Login接口獲取

        在Firefox瀏覽器上先手動登錄再退出待測Web頁面。查看Firebug中退出操作的【網(wǎng)絡(luò)】-【XHR】-【頭信息】-【請求頭信息】-【Cookie】的內(nèi)容。

        腳本流程圖如圖5所示。該方法相對于通過Firefox瀏覽器獲取的方法,效率更高。

        7 結(jié)論

        本文研究了HTTP接口自動化測試方法,采用Python語言開發(fā)代碼,使用Request調(diào)用HTTP接口。提出了一種分層結(jié)構(gòu)的自動化測試框架,將接口調(diào)用、測試用例和測試數(shù)據(jù)的代碼分層開發(fā),生成基于HTML的測試報告,方便瀏覽和統(tǒng)計。提出了兩種解決CSRF Token驗證問題的方案,并在實際項目中進行了應用。該自動化測試方法

        圖5 通過Logout接口和Login接口獲取Cookie流程圖

        開發(fā)出的自動化腳本結(jié)構(gòu)清晰,容易維護,有效提高了測試效率,降低了測試成本。

        [1] 王會青,馮秀芳. Web應用軟件測試方法的研究[J]. 太原理工大學學報,2007, 38(4):54-57.

        [2] 瑁靜,鐘亦平,張世永. 基于協(xié)議分析的自動化Web性能測試[J]. 計算機工程,2005, 31(7):66-69.

        [3] WASSERMANN G, Yu Dachuan, CHANDER A. Dynamic test input ceneration for Web apllications[J]. ISST’08, July, 2008:20-24.

        [4] DOUGLAS E, COMER, DAVID L, 等. 用TCP/IP進行網(wǎng)際互連(第1卷)第4版[M].林瑤,蔣慧,杜蔚軒,譯. 北京:電子工業(yè)出版社,1998.

        [5] CHUN W J. Python核心編程(第2版)[M]. 宋吉廣,譯. 北京:人民郵電出版社,2008.

        陳吉蘭:(1986-),女,碩士,工程師,主要研究方向:軟硬件兼容性測試。

        Research on automatic testing method for HTTP interface

        Yang Qingyu, Li Jinli, Chen Jilan, Li Zhiwei

        (Operating System Test and Certification Center,China Standard Software Co., Ltd., Beijing 100190, China)

        An automatic testing method for HTTP interface was investigated. It used Python to develop codes and used Request to call the HTTP Interface. A hierarchical framework for automatic testing was proposed. In this framework, the codes of interface called, test cases and test data were developed separately. It generated test report based on HTML. In this paper, two solutions for the problem of CSRF Token verification were proposed. The automatic testing scripts developed with this method had the advantages of clear structure and easy to maintain. It could effectively improve the efficiency of testing and reduce the cost of testing.

        HTTP interface; Python; Request; automatic testing

        國家高技術(shù)研究發(fā)展計劃(863計劃)(2014AA123001)

        TP311.5

        ADOI: 10.19358/j.issn.1674- 7720.2016.18.006

        2016-05-16)

        楊清玉(1986-),女,碩士,工程師,主要研究方向:云計算技術(shù)、自動化測試技術(shù)。

        李金麗(1974-),女,學士,高級工程師,主要研究方向:操作系統(tǒng)及相關(guān)應用軟件測試及自動化。

        猜你喜歡
        測試報告測試用例測試數(shù)據(jù)
        關(guān)于戶外體育游戲?qū)τ變后w能影響的調(diào)查研究
        甘肅教育(2021年5期)2021-12-29 15:41:24
        基于SmartUnit的安全通信系統(tǒng)單元測試用例自動生成
        測試數(shù)據(jù)管理系統(tǒng)設(shè)計與實現(xiàn)
        基于混合遺傳算法的回歸測試用例集最小化研究
        百變星君:ROLLINGSTONE 變色龍紫破風車架測試報告
        基于自適應粒子群優(yōu)化算法的測試數(shù)據(jù)擴增方法
        計算機應用(2016年9期)2016-11-01 17:57:12
        SSAB Hardox悍達450材料輕型自卸車廂體測試報告
        專用汽車(2016年9期)2016-03-01 04:17:19
        空間co-location挖掘模式在學生體能測試數(shù)據(jù)中的應用
        體育科技(2016年2期)2016-02-28 17:06:21
        基于依賴結(jié)構(gòu)的測試用例優(yōu)先級技術(shù)
        淺談軟件測試工作的開展流程
        av中文字幕性女高清在线| 国产毛片网| 亚洲天天综合色制服丝袜在线| 亚洲视频观看一区二区| 国产人成精品免费久久久 | 一品二品三品中文字幕| 99热这里只有精品69| 久久这里只有精品黄色| 国内揄拍国内精品人妻久久| 成人aaa片一区国产精品| 无码少妇一级AV便在线观看| 中文字幕亚洲精品码专区| 国产人成无码视频在线1000 | 偷拍一区二区盗摄视频| 蜜桃日本免费看mv免费版| 丰满人妻在公车被猛烈进入电影| 久久精品日韩av无码| 国产99精品精品久久免费| 中文字幕在线乱码亚洲| 好男人社区影院www| 亚洲熟妇少妇任你躁在线观看| 亚洲女同同性少妇熟女| 日本在线一区二区三区视频观看| 国产成人精品白浆久久69| 中文文精品字幕一区二区| 国产日产免费在线视频| 精品国产亚洲亚洲国产 | 久久精品一区一区二区乱码| 日本成本人片视频免费| 亚洲国产综合精品 在线 一区 | 日本一区二区三区啪啪| 久久人妻一区二区三区免费| 朝鲜女人大白屁股ass| 亚洲av无码一区二区乱子伦as| 2022精品久久久久久中文字幕| 国产自拍91精品视频| 久久99精品久久久久久噜噜| 亚洲精品毛片一区二区三区| 久久久精品2019中文字幕之3| 91精品蜜桃熟女一区二区| 天天摸天天做天天爽水多|