練習接口測試---統一大步驟


最近一段時間學了Python語言,重新學了 Java,js,html語言,CSS,linux,一堆測試工具;唉~

在接觸接口測試過程中補了很多課,

終於有點領悟接口測試的根本;

偶是個實用派~,那么現實中沒有用的東西,基本上我都不會有很大的概念;

下面給的是接口測試的統一大步驟,其實就是讓我們對接口測試有一個整體的概念,我們要做或學習接口測試,應該從那些地方着手,也就是告訴你,百度搜索了半天接口測試之后,我還是沒有概念,那怎么辦呢,那么下面這些步驟就是,你需要把接口測試拆開來了解的步驟;

如第一步,百度之后,要研究什么是resful,怎么個增刪改查;

這些步驟都可以拆開來,反復實踐,等把這些步驟都拆開來,實踐完了,你的接口測試也就通透了,通殺所有接口測試

接口測試:Http類,webservice類  其實大同小異

找一個你自己的項目,沒人做過接口測試的也可以,這樣你可以自己想明白 怎么測,而不是用別人的思想,思想。。。最重要,可是沒有思路到有思路的路程並不長,只是你要開始做這個事情,相信我,會很快,你發現自己確實很聰明~~~~~~

聲明:我的這些東西之所以能入門,主要歸功於乙醇大神的接口測試概念和馮xx朋友的不吝賜教以及網絡上的各種散碎思想;

第一步: 先要明白你要測什么? 本質就是增,刪,改,查。(學名叫 resful);

第二步:先用網上推薦的工具來感覺一下(比如:postman, 比如:SoapUI)

第三步:get, post, put, delete 大概怎么個用法,比如傳參(比如 json串),怎么看結果(這些確實需要你有些技術基礎的,比如 端口,返回值,編碼類型)

第四步:那么,那么,我們學了語言,那就來用用吧(一定要拿寫好的接口例子來看看,要不然,你不知道用這個語言的什么包或什么函數來幫我們獲取到URl的數據等...)

第五步:那么我們加入框架吧(Unittest),這樣和前面你的老版本,自創的那一版對比一下,會感觸~~,然后明白為什么用框架, 實踐確實是個有意思的事情;

第六步:把你的那些參數放入數據庫,或者excel等等 實現數據驅動;倒騰吧

第七步:優化你的代碼,反復反復倒騰 重構,你應該在通往 python高手的路上了

第八步:當然如果你會Java但是並不會用它寫接口測試,那么把這些用例變成Java吧

第九步:那么你還能干嘛,還多着呢,思考:你現在這個接口是否只測試了A接口,那么B接口能測試嗎? 比如C調用A接口,那么C是一個接口呢? 是嗎~~ 你能分辨出來嗎,把它弄清楚,如果不是接口,或者它是什么,能測試嗎,怎么測試?

第十步:自己做一個假的接口(Moco):最好和你現在的項目結合的,比如開發正在開發的(和開發溝通);自己測試

第十一步:自己寫一個接口(可以先按照之前開發開發好的接口,照葫蘆畫瓢一個,那也要畫,必須畫,誰叫你是做測試的,知己知彼呀~),先簡單,后復雜,主要倒騰清楚原理就行,反正你也不做開發(當然如果你想做開發,那去做開發吧,別在這浪費時間);自己測試

第十二步: 開始倒騰 測試第二個接口,這次你直接從第六步開始就行(代碼優美可不是一天煉成的)

 

如果你倒騰的很細的話,本人認為倒騰三個接口應該很夠了,最后一定記得拿你這個知識到市場去賣錢喲;科技是第一生產力~~

其實,其實 有了這個基礎 應該倒騰自動化的其他就不難了

 

其他 博客:http://my.oschina.net/yifan326/blog?catalog=560482

 第一版 unittest 框架源碼

 1 # Lawsuit_interface_unittest.py
 2 # coding:utf-8
 3 
 4 import json
 5 import unittest
 6 from suds.client import Client
 7 
 8 
 9 class Lawsuit_interface_testing(unittest.TestCase):
10 
11     def setUp(self):
12         self.url = "http://.....:8080/sys/webservice/sysNotifyTodoWebService?wsdl"
13         self.client = Client(self.url) #
14 
15     def tearDown(self):
16         pass
17 
18     def test_getTodo(self):
19 
20         notify_TodoGetContext = self.client.factory.create(
21             'notifyTodoGetContext')
22         notify_TodoGetContext.otherCond = ""
23         notify_TodoGetContext.pageNo = 1
24         notify_TodoGetContext.rowSize = 3
25         notify_TodoGetContext.targets = json.dumps(
26             {"LoginName": "xiaoming"})
27         notify_TodoGetContext.type = 1
28         notify_TodoAppResult = self.client.service.getTodo(
29             notify_TodoGetContext)
30         returnState = notify_TodoAppResult.returnState
31         self.assertEqual(returnState, 2)
32 
33     def test_sendTodo(self):
34 
35         notify_TodoSendContext = self.client.factory.create(
36             'notifyTodoSendContext')
37         notify_TodoSendContext.appName = "Lawsuit"
38         notify_TodoSendContext.createTime = "2015-11-27 15:32:39"
39         notify_TodoSendContext.key = ''
40         notify_TodoSendContext.link = 'http://wwww.baidu.com'
41         notify_TodoSendContext.subject = 'Lawsuit_testing'
42         notify_TodoSendContext.modelId = '123456789'
43         notify_TodoSendContext.modelName = "Lawsuit"
44         notify_TodoSendContext.targets = json.dumps(
45             {"LoginName": "xiaoming"})
46         notify_TodoSendContext.type = 1
47         notify_TodoAppResult = self.client.service.sendTodo(
48             notify_TodoSendContext)
49         returnState = notify_TodoAppResult.returnState
50         self.assertEqual(returnState, 2)
51 
52     def test_deleteTodo(self):
53 
54         notify_TodoRemoveContext = self.client.factory.create(
55             'notifyTodoRemoveContext')
56         notify_TodoRemoveContext.appName = "Lawsuit"
57         notify_TodoRemoveContext.modelId = '123456789'
58         notify_TodoRemoveContext.key = ''
59         notify_TodoRemoveContext.modelName = "Lawsuit"
60         notify_TodoRemoveContext.optType = 1
61         notify_TodoRemoveContext.targets = json.dumps(
62             {"LoginName": "xiaoming"})
63         notify_TodoAppResult = self.client.service.deleteTodo(
64             notify_TodoRemoveContext)
65         returnState = notify_TodoAppResult.returnState
66         self.assertEqual(returnState, 2)
67 
68     def test_setTodoDone(self):
69 
70         notify_TodoRemoveContext = self.client.factory.create(
71             'notifyTodoRemoveContext')
72         notify_TodoRemoveContext.appName = "Lawsuit"
73         notify_TodoRemoveContext.modelId = '123456789'
74         notify_TodoRemoveContext.key = ''
75         notify_TodoRemoveContext.modelName = "Lawsuit_testing"
76         notify_TodoRemoveContext.optType = 1
77         notify_TodoRemoveContext.targets = json.dumps(
78             {"LoginName": "xiaoming"})
79         notify_TodoAppResult = self.client.service.setTodoDone(
80             notify_TodoRemoveContext)
81         returnState = notify_TodoAppResult.returnState
82         self.assertEqual(returnState, 2)
83 
84 
85 if __name__ == '__main__':
86     unittest.main()
View Code

 第二版 使用excel 數據驅動

  1 # Lawsuit_interface_unittest_excel_v1.1.py
  2 # coding:utf-8
  3 
  4 import unittest
  5 import json
  6 import xlrd
  7 from suds.client import Client
  8 import time
  9 import sys
 10 
 11 
 12 class Lawsuit_interface_testing(unittest.TestCase):
 13 
 14     def setUp(self):
 15         self.url ='http:// xx?wsdl'
 16         self.client = Client(self.url)
 17         self.xlsfile = r'lawsuit_casedata.xlsx'
 18         self.excel_data(self.xlsfile)
 19 
 20     def tearDown(self):
 21         pass
 22 
 23     def test_getToDO(self):
 24 
 25         self.Cannot_find_file(self.xlsfile)
 26 
 27         notify_TodoGetContext = self.client.factory.create(
 28             'notifyTodoGetContext')
 29         notify_TodoGetContext.pageNo = self.pageNo_value
 30         notify_TodoGetContext.rowSize = self.rowSize_value
 31         # another way to json
 32         # notify_TodoGetContext.targets = "{ \"LoginName\": \"xiaoming\" }"
 33         notify_TodoGetContext.targets = self.targets_value
 34         notify_TodoGetContext.type = self.ptype_value
 35 
 36         notify_TodoAppResult = self.client.service.getTodo(
 37             notify_TodoGetContext)
 38         returnState = notify_TodoAppResult.returnState
 39 
 40         print returnState
 41         self.assertEqual(returnState, 2)
 42 
 43     def test_sendTodo(self):
 44         self.Cannot_find_file(self.xlsfile)
 45 
 46         notify_TodoSendContext = self.client.factory.create(
 47             'notifyTodoSendContext')
 48         notify_TodoSendContext.appName = self.appName_value
 49         notify_TodoSendContext.createTime = self.creatime_value
 50         # notify_TodoSendContext.key = ''
 51         notify_TodoSendContext.link = self.link_value
 52         notify_TodoSendContext.subject = self.subject_value
 53         notify_TodoSendContext.modelId = self.modelId_value
 54         notify_TodoSendContext.modelName = self.modelName_value
 55         notify_TodoSendContext.targets = self.targets_value
 56         notify_TodoSendContext.type = self.ptype_value
 57         notify_TodoAppResult = self.client.service.sendTodo(
 58             notify_TodoSendContext)
 59         returnState = notify_TodoAppResult.returnState
 60         self.assertEqual(returnState, 2)
 61 
 62     def test_deleteTodo(self):
 63         self.Cannot_find_file(self.xlsfile)
 64 
 65         notify_TodoRemoveContext = self.client.factory.create(
 66             'notifyTodoRemoveContext')
 67         notify_TodoRemoveContext.appName = self.appName_value
 68         notify_TodoRemoveContext.modelId = self.modelId_value
 69         # notify_TodoRemoveContext.key = ''
 70         notify_TodoRemoveContext.modelName = self.modelName_value
 71         notify_TodoRemoveContext.optType = self.optType_value
 72         notify_TodoRemoveContext.targets = self.targets_value
 73         notify_TodoAppResult = self.client.service.deleteTodo(
 74             notify_TodoRemoveContext)
 75         returnState = notify_TodoAppResult.returnState
 76         self.assertEqual(returnState, 2)
 77 
 78     def test_setTodoDone(self):
 79         self.Cannot_find_file(self.xlsfile)
 80 
 81         notify_TodoRemoveContext = self.client.factory.create(
 82             'notifyTodoRemoveContext')
 83         notify_TodoRemoveContext.appName = self.appName_value
 84         notify_TodoRemoveContext.modelId = self.modelId_value
 85         # notify_TodoRemoveContext.key = ''
 86         notify_TodoRemoveContext.modelName = self.modelName_value
 87         notify_TodoRemoveContext.optType = self.optType_value
 88         notify_TodoRemoveContext.targets = self.targets_value
 89         notify_TodoAppResult = self.client.service.setTodoDone(
 90             notify_TodoRemoveContext)
 91         returnState = notify_TodoAppResult.returnState
 92         self.assertEqual(returnState, 2)
 93 
 94     def excel_data(self, xlsfile):
 95 
 96         self.Cannot_find_file(self.xlsfile)
 97         book = xlrd.open_workbook(xlsfile)
 98         api_sheet = book.sheet_by_index(0)
 99         nrows = api_sheet.nrows
100         for i in range(1, nrows):
101             caseID = api_sheet.cell(i, 0)
102             appName = api_sheet.cell(i, 1)
103             creatime = time.strftime(
104                 time.strftime('%Y-%m-%d %X', time.localtime(time.time())))
105             link = api_sheet.cell(i, 3)
106             subject = api_sheet.cell(i, 4)
107             modelId = api_sheet.cell(i, 5)
108             modelName = api_sheet.cell(i, 6)
109             targets = api_sheet.cell(i, 7)
110             ptype = api_sheet.cell(i, 8)
111             pageNo = api_sheet.cell(i, 9)
112             rowSize = api_sheet.cell(i, 10)
113             optType = api_sheet.cell(i, 11)
114             # returnstatue = api_sheet.cell(i, 12)
115             # message = api_sheet.cell(i, 13)
116             if api_sheet.cell(i, 0).ctype != 0:
117                 # caseID_value=str(int(caseID.value))
118                 self.appName_value = appName.value
119                 self.creatime_value=creatime
120                 self.link_value = link.value
121                 self.subject_value = subject.value
122                 self.modelId_value = modelId.value
123                 self.modelName_value = modelName.value
124                 # print type(targets)
125                 self.targets_value = targets.value
126                 # print type(targets.value)
127                 self.ptype_value = int(ptype.value)
128                 self.pageNo_value = int(pageNo.value)
129                 self.rowSize_value = int(rowSize.value)
130                 self.optType_value = int(optType.value)
131 
132                 # returnstatue_value=returnstatue.value
133                 # message_value=message.value
134             else:
135                 return 0
136             #    data1=
137 
138         # return data1
139 
140     # exception
141 
142     def Cannot_find_file(self, xlsfile):
143         try:
144             foo = open(self.xlsfile)
145         except EnvironmentError as err:
146             print "Unable to open file:{}".format(err)
147             sys.exit(1)
148 
149 
150 if __name__ == '__main__':
151     unittest.main()
View Code


免責聲明!

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



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