python+requests+unittest API介面測試,requestsunittest

來源:互聯網
上載者:User

python+requests+unittest API介面測試,requestsunittest

黑熊再網上尋找了下介面測試相關的資料,大都重點是以資料驅動的形式,將用例維護在文本或表格中,而沒有說明怎麼樣去產生想要的用例,

問題:

測試介面時,比如參數a,b,c,我要先測a參數,有(不傳,為空白,整形,浮點,字串,object,過短,超長,sql注入)這些情況,其中一種情況就是一條用例,同時要保證b,c的正確,確保a的測試不受b,c參數的錯誤影響

解決思路:

符合介面規範的參數可以手動去填寫,或者準備在程式碼程式庫中。那些不符合規範的參數(不傳,為空白,整形,浮點,字串,object,過短,超長,sql注入)也可以準備在庫中作為常量反覆使用

主要實現的功能點:

1.api參數整理到dict中,方便組合參數產生用例

2.對產生的用例進行迴圈執行

3.封裝些許代碼便於使用和維護

 

源碼分析:

canshuxinxi.py檔案用來存放api介面資訊。以dict形式存放,這樣就可以API_ALL['登入介面'][url]這種方式去取,看起來較直觀,知道取得是哪個介面的那部分資訊。

 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time    : 2017-06-09 14:09 4 # canshuxinxi.py 5  6 # 介面資訊 7 API_ALL = { 8             '登入介面': { 9                             'number': '1',10                             'url': 'http://www.baidu.com',11                             'leixing': 'post',12                             'head': {13                                         'aa': 'bb',14                                         'cc': 'dd',15                                         },16                             'canshu': {17                                         'username': 'Wbfxs001',18                                         'password': '111111Qq',19                                         'grant_type': 'password',20                                     },21                             'qiwang': {22                                         'code': 200,23                                         'name': 'Wbfxs001',24                                         },25                         },26 27             '退出介面': {28                             'number': '1',29                             'url': 'http://www.baidu.com',30                             'leixing': 'get',31                             'canshu': {32                                         'username': 'Wbfxs001',33                                         'password': '111111Qq',34                                         'grant_type': 'password',35                                       }36             }37 }

 

changliang.py檔案用來存非常規(可能會讓介面響應異常)參數,同理也是存放在dict中,方便維護,比如以後要加新的sql注入程式碼片段,可以直接在後面添加

 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time    : 2017-06-09 14:09 4 # changliang.py 5  6 # 常用參數不傳,為空白,整形,浮點,字串,object,過短,超長,sql注入 7 objects1 = 'xxxx' 8 objects2 = 'ssss' 9 10 ZHCS = {11             '為空白': [''],12             '整形': [10, 23, 44, 88, 99],13             '浮點': [1.11, 2.342, -1.03],14             '字串': ['aaaa', 'bbbb', 'cccc','dddd'],15             'object': [objects1, objects2],16             '過短': ['1', '0'],17             '超長': ['11111111111111111111111111111111111111111111111'],18             'sql注入': [';and 1=1 ;and 1=2', ";and (select count(*) from sysobjects)>0 mssql", ";and 1=(select IS_SRVROLEMEMBER('sysadmin'));--"],19          }

 

 

# gongju.py作為工具類,下面方法進行了封裝,方便調用。實現了對參數進行組合,生產不同組合的dict類型的參數,並將dict參數儲存到list中,方便取用。
 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time    : 2017-06-09 14:11 4 # gongju.py 5  6 # 產生不同組合的參數 7  8 class gj(): 9 10     def listalls(self, csTrue,  csFalse):11         fzgcs = []  # 得到cycanshu的key,將所有非正規參數放在一個list中12         listall = []  # 儲存參數dict 為 list13         zhcs = dict(csTrue)14         listall.append(csTrue)15         aaa = list(csFalse.keys())16         for i in aaa:17             bbb = csFalse[i]  # 得到具體參數list18             for k in bbb:19                 fzgcs.append(k)  # 便利每一個參數加入fzgcs列表20 21         zhcskey = list(zhcs.keys())  # 拿到將要進行組合的參數22         for i in zhcskey:23             a = zhcs[i]  # 保留原有的參數值,下面替換完後複原正確參數24             for k in fzgcs:25                 zhcs[i] = k26                 listall.append(str(zhcs))27             # 迴圈完後複原正確參數28             zhcs[i] = a29         return listall

 

 

jiaoben.py檔案作為指令碼類,用來對組合好的參數進行迴圈執行,依次帶入組合參數請求。(只做了請求和列印響應資訊,可再加入對響應結果斷言)
 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time    : 2017-06-09 14:22 4 # jiaoben.py 5  6 from changliang import ZHCS 7 from canshuxinxi import API_ALL 8 from gongju import gj 9 import requests10 # 指令碼類,組合工具參數進行請求11 gj = gj()12 def jball():13     apikeys = API_ALL.keys()14     print(apikeys)15     for key in apikeys:16         apiname = key17         url = API_ALL[key]['url']18         number = API_ALL[key]['number']19         leixin = API_ALL[key]['leixing']20         canshus = gj.listalls(API_ALL[key]['canshu'], ZHCS)21         if leixin == 'post':22             print("======="+" api名稱:"+apiname+"=======")23             for cs in canshus:24                 mp = requests.post(url=url, data=cs)25                 fhcode = str(mp.status_code)26                 xysj = str(mp.elapsed.microseconds)27                 print("=響應=api編號:"+number+"  響應code:"+fhcode+"  回應時間:"+xysj)28         if leixin == 'get':29             print("======="+" api名稱:"+apiname+"=======")30             for cs in canshus:31                 mp = requests.get(url=url, data=cs)32                 fhcode = str(mp.status_code)33                 xysj = str(mp.elapsed.microseconds)34                 print("=響應=api編號:"+number+"  響應code:"+fhcode+"  回應時間:"+xysj)35 jball()

 

tesone.py檔案作為用例執行檔案,熟悉unittest架構的都清楚其中的原理,就不做多介紹,黑熊主要用來控制指令碼的執行,結合了unittest架構後,方便後續的擴充。
 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time    : 2017-06-09 8:53 4 # tesone.py 5  6 import requests 7 import unittest 8 import time 9 from jiaoben import jball10 class testclassone(unittest.TestCase):11     def setUp(self):12         print(111)13         pass14     def test_1(self):15         jball()  # 執行指令碼16         pass17     def tearDown(self):18         print(333)19         pass20 21 22 if __name__ == '__main__':23     unittest.main()

最後附上用例執行後的:

 

結語:

介面測試涉及的東西還真不少,也只能一步一個腳印去探索和學習,期間感謝@我去熱飯  飯哥的細心指導,給予黑熊莫大的協助,謝謝!同時也歡迎道友們一起來交流,黑熊QQ:915069792

 

為什麼選擇?

有的人喜歡創造世界,他們做了程式員

有的人喜歡拯救世界,他們做了測試員

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.