一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python+requests+unittest API接口測試實例(詳解)

python+requests+unittest API接口測試實例(詳解)

2020-11-16 19:33Python教程網 Python

下面小編就為大家帶來一篇python+requests+unittest API接口測試實例(詳解)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

我在網上查找了下接口測試相關的資料,大都重點是以數據驅動的形式,將用例維護在文本或表格中,而沒有說明怎么樣去生成想要的用例,

問題:

測試接口時,比如參數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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time  : 2017-06-09 14:09
# canshuxinxi.py
 
# 接口信息
API_ALL = {
      '登錄接口': {
              'number': '1',
              'url': 'http://www.baidu.com',
              'leixing': 'post',
              'head': {
                    'aa': 'bb',
                    'cc': 'dd',
                    },
              'canshu': {
                    'username': 'Wbfxs001',
                    'password': '111111Qq',
                    'grant_type': 'password',
                  },
              'qiwang': {
                    'code': 200,
                    'name': 'Wbfxs001',
                    },
            },
 
      '退出接口': {
              'number': '1',
              'url': 'http://www.baidu.com',
              'leixing': 'get',
              'canshu': {
                    'username': 'Wbfxs001',
                    'password': '111111Qq',
                    'grant_type': 'password',
                   }
      }
}

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

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

# gongju.py作為工具類,下面方法進行了封裝,方便調用。實現了對參數進行組合,生產不同組合的dict類型的參數,并將dict參數保存到list中,方便取用。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time  : 2017-06-09 14:11
# gongju.py
 
# 生成不同組合的參數
 
class gj():
 
  def listalls(self, csTrue, csFalse):
    fzgcs = [] # 得到cycanshu的key,將所有非正規參數放在一個list中
    listall = [] # 保存參數dict 為 list
    zhcs = dict(csTrue)
    listall.append(csTrue)
    aaa = list(csFalse.keys())
    for i in aaa:
      bbb = csFalse[i] # 得到具體參數list
      for k in bbb:
        fzgcs.append(k) # 便利每一個參數加入fzgcs列表
 
    zhcskey = list(zhcs.keys()) # 拿到將要進行組合的參數
    for i in zhcskey:
      a = zhcs[i] # 保留原有的參數值,下面替換完后復原正確參數
      for k in fzgcs:
        zhcs[i] = k
        listall.append(str(zhcs))
      # 循環完后復原正確參數
      zhcs[i] = a
    return listall

jiaoben.py文件作為腳本類,用來對組合好的參數進行循環執行,依次帶入組合參數請求。(只做了請求和打印響應信息,可再加入對響應結果斷言)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time  : 2017-06-09 14:22
# jiaoben.py
 
from changliang import ZHCS
from canshuxinxi import API_ALL
from gongju import gj
import requests
# 腳本類,組合工具參數進行請求
gj = gj()
def jball():
  apikeys = API_ALL.keys()
  print(apikeys)
  for key in apikeys:
    apiname = key
    url = API_ALL[key]['url']
    number = API_ALL[key]['number']
    leixin = API_ALL[key]['leixing']
    canshus = gj.listalls(API_ALL[key]['canshu'], ZHCS)
    if leixin == 'post':
      print("======="+" api名稱:"+apiname+"=======")
      for cs in canshus:
        mp = requests.post(url=url, data=cs)
        fhcode = str(mp.status_code)
        xysj = str(mp.elapsed.microseconds)
        print("=響應=api編號:"+number+" 響應code:"+fhcode+" 響應時間:"+xysj)
    if leixin == 'get':
      print("======="+" api名稱:"+apiname+"=======")
      for cs in canshus:
        mp = requests.get(url=url, data=cs)
        fhcode = str(mp.status_code)
        xysj = str(mp.elapsed.microseconds)
        print("=響應=api編號:"+number+" 響應code:"+fhcode+" 響應時間:"+xysj)
jball()

tesone.py文件作為用例執行文件,熟悉unittest框架的都清楚其中的原理,就不做多介紹,黑熊主要用來控制腳本的執行,結合了unittest框架后,方便后續的擴展。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time  : 2017-06-09 8:53
# tesone.py
 
import requests
import unittest
import time
from jiaoben import jball
class testclassone(unittest.TestCase):
  def setUp(self):
    print(111)
    pass
  def test_1(self):
    jball()  # 執行腳本
    pass
  def tearDown(self):
    print(333)
    pass
 
 
if __name__ == '__main__':
  unittest.main()

最后附上用例執行后的效果圖:

python+requests+unittest API接口測試實例(詳解)

以上這篇python+requests+unittest API接口測試實例(詳解)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久99re2热在线播放7 | 男同精品视频免费观看网站 | 国产免费资源 | 亚洲欧美另类在线观看 | 麻豆天美精东果冻传媒在线 | 欧美日韩成人在线 | 国产日韩免费视频 | 国产成人精品一区二区不卡 | 美女扒开奶罩让男人吃奶 | 日韩高清无砖砖区2022 | 男人天堂网页 | 国产高清不卡视频在线播放 | a级黄色视屏 | 香蕉久草在线 | 91久久综合九色综合欧美98 | www.成人在线视频 | 波多野结衣在线观看中文字幕 | 国产精品香蕉夜间视频免费播放 | 羞羞色男人的天堂伊人久久 | 欧美男男gaygayxxx | 糖心vlog麻豆精东影业传媒 | 国产免费大片 | 四虎国产精品免费久久久 | 欧美日韩国产精品自在自线 | 欧美国产日韩1区俺去了 | 久久这里只有精品无码3D | 久久中文字幕无线观看 | 成人亚洲欧美日韩中文字幕 | 95视频免费看片 | 亚洲欧美另类第一页 | 农村美女沟厕嘘嘘被偷看 | 日韩日b视频 | 久久观看视频 | 好姑娘完整版在线观看中文 | 无人知晓小说姜璟免费阅读 | 亚久久伊人精品青青草原2020 | 11 13加污女qq看他下面 | 亚洲spank男男实践网站 | 久久伊人中文字幕有码 | 亚洲免费黄色网 | 国色天香社区视频免费高清在线观看 |