练习接口测试详细步骤

news2024/11/20 14:15:37

最近一段时间学了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):最好和你现在的项目结合的,比如开发正在开发的(和开发沟通);自己测试

第十一步:自己写一个接口(可以先按照之前开发开发好的接口,照葫芦画瓢一个,那也要画,必须画,谁叫你是做测试的,知己知彼呀~),先简单,后复杂,主要倒腾清楚原理就行,反正你也不做开发(当然如果你想做开发,那去做开发吧,别在这浪费时间);自己测试

第十二步: 开始倒腾 测试第二个接口,这次你直接从第六步开始就行(代码优美可不是一天炼成的)

如果你倒腾的很细的话,本人认为倒腾三个接口应该很够了,最后一定记得拿你这个知识到市场去卖钱哟;科技是第一生产力~~

其实,其实 有了这个基础 应该倒腾自动化的其他就不难了

 第一版 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()

 第二版 使用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()

 最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

文档获取方式:

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1000727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为何不建议使用Java自带的线程池

Executors Executors是java自带的线程池。Executors 里面默认提供的几个线程池是有一些弊端的,如果是不懂多线程、或者是新手直接盲目使用,就可能会造成比较严重的生产事故。 Executors.newFixedThreadPool(10); Executors.newSingleThreadExecutor();…

Python语义分割与街景识别(3):数据集准备

前言 本文主要用于记录我在使用python做图像识别语义分割训练集的过程,由于在这一过程中踩坑排除BUG过多,因此也希望想做这部分内容的同学们可以少走些弯路。 本文是python语义分割与街景识别第三篇,关于数据集准备的内容。 一、自己制作数…

【transformer】动手学ViT

AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE 摘要Method实验代码-基于pytorchTraining Visual Transformer on Dogs vs Cats Data注释一些词汇 ICLR2021 一幅图像值16x16个字:用于图像识别的transformers 将纯Transformer结构运用…

基于SSM的中小企业人力资源管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

计算机网络第五章——传输层(下)

安得广厦千万间,大庇天下寒士俱欢颜 文章目录 按序的不丢失的,这个校验也是二进制求反码来判断有没有发送错误, TCP传输的时候就是以一个字节为单位,所以就会把一个字节编一个序号,对于一个文件第一个需要是多少是可以…

MySQL的权限管理与远程访问

MySQL的权限管理 1、授予权限 授权命令: grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名用户地址 identified by ‘连接口令’; 该权限如果发现没有该用户,则会直接新建一个用户。 比如 grant select,insert,delete,drop on atguigudb.…

Prometheus+Grafana可视化监控【主机状态】

文章目录 一、介绍二、安装Prometheus三、安装Grafana四、Pronetheus和Grafana相关联五、监控服务器状态六、常见问题 一、介绍 Prometheus是一个开源的系统监控和报警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF托管的项目,在…

RunnerGo:让你的性能测试变得轻松简单

在当今这个数字化时代,应用程序的性能至关重要。一款可靠的性能测试工具,能够为企业带来无数的好处。最近,一款名为RunnerGo的开源性能测试工具备受瞩目。本文将详细介绍RunnerGo的特点、优势以及如何解决性能测试中的痛点。 RunnerGo产品介绍…

OpenLayers入门,读取wkt格式数据,OpenLayers解析并显示wkt格式的要素数据

专栏目录: OpenLayers入门教程汇总目录 前言 本章介绍OpenLayers如何解析并显示wkt格式的要素数据。 使用Point(点)、(LINESTRING)线,和(POLYGON)多变形的wkt数据进行演示。 wkt介绍请参考博主另一篇文章《GIS入门,WKT格式详解》. 二、依赖和使用 "ol": …

【SpringMVC】拦截器JSR303的使用

目录 一、JSR303 1.1.什么是JSR303 1.2.为什么使用JSR303 1.3.常用注解 1.4.Validated与Valid区别 1.5.JSR快速入门 1.5.1.导入依赖 1.5.2.配置校验规则 1.5.3.入门案例 二、拦截器 2.1什么是拦截器 2.2.拦截器与过滤器 2.3.应用场景 2.4.拦截器快速入门 2.4.1.…

网络安全知识

一、什么是网络安全? 网络安全,通常指计算机网络的安全,实际上也可以指计算机通信网络的安全。计算机通信网络是将若干台具有独立功能的计算机通过通信设备及传输媒体互连起来,在通信软件的支持下,实现计算机间的信息传…

第七届蓝帽杯初赛 取证部分复现

取证案情介绍: 2021年5月,公安机关侦破了一起投资理财诈骗类案件,受害人陈昊民向公安机关报案称其在微信上认识一名昵称为yang88的网友,在其诱导下通过一款名为维斯塔斯的APP,进行投资理财,被诈骗6万余万元…

LLFormer 论文阅读笔记

Ultra-High-Definition Low-Light Image Enhancement: A Benchmark and Transformer-Based Method 这是南京大学在AAAI 2023发表的一篇AAAI2023 超高清图像暗图增强的工作。提出了一个超高清暗图增强数据集,提供了4K和8K的图片,同时提出了一个可用于暗图…

新掌门蔡崇信,能否“再救”阿里?

文 | 琥珀消研社 作者 | 积溪 琥珀消研社快评:蔡崇信成了阿里最新一届CEO,从幕后走到了台前,阿里的神话还会被续写吗?#阿里 #马云 #蔡崇信 外面人常说 淘宝是靠败家女人撑大的 但你要让马爸爸讲几句 他肯定会说 阿里现在能…

哨兵1号(Sentinel-1)SAR卫星介绍

1. 哥白尼计划 说起欧空局的哨兵1号,就不得不先说一下欧空局的“哥白尼计划”。 欧空局的哥白尼计划(Copernicus Programme)是欧空局与欧盟合作的一项极其重要的地球观测计划。该计划旨在提供免费开放的、可持续的地球观测数据&#xff0c…

Insert into select语句把生产服务器炸了,Insert into select非常慢时如何优化

Insert into select请慎用。这天xxx接到一个需求,需要将表A的数据迁移到表B中去做一个备份。本想通过程序先查询查出来然后批量插入。但xxx觉得这样有点慢,需要耗费大量的网络I/O,决定采取别的方法进行实现。通过在Baidu的海洋里遨游,他发现了可以使用insert into select实…

MC-4/11/10/400 ELAU 操作员界面旨在帮助优化系统开发

MC-4/11/10/400 ELAU 操作员界面旨在帮助优化系统开发 作为海洋认证流程的一部分,根据海洋协会和国际电工委员会 (IEC) 标准的规定,对产品进行测试,以评估其在高湿度、极热和极冷温度、振动和电磁兼容性方面的性能。这些产品还经过评估&…

微信自动打招呼自动回复

点击蓝字 关注我们 微信无疑是我们日常生活中最常用的社交工具之一。但是,你有没有感觉到,每天都要花费大量时间去添加好友、回复简单咨询消息和打招呼,是一件很烦琐的事情呢?如果你也有这样的困扰,那么今天就给大家介…

【Linux】让笔记本发挥余热,Ubuntu20.04设置WiFi热点

Ubuntu20.04设置WiFi热点 由于卧室距离客厅较远,wifi信号太弱,体验极差。鉴于卧室的笔记本电脑是通过网线连接的客厅路由器,因此考虑将这台老破笔记本作为“路由器”,以便发挥它的余热。实验证明,上网速度提升数十倍&a…

如何开启Linux的SSH服务?sudo service ssh start和sudo systemctl enable ssh两种不同的开启方式有什么区别?

问题描述 今天遇到一个有趣的事情,用另一台机器ssh我的机器竟然不work了,这是什么情况呢? 解决方法 于是我就在网上搜 “linux开启ssh” “把自身linux电脑作为服务器让其他机器链接” “把自身linux电脑作为服务器让其他机器链接linux命令”…