pyswat和pyapp框架,交流群631466916

python自动化测试应用-番外篇--接口测试1

上一篇 / 下一篇  2017-04-21 12:24:32 / 个人分类:其他

1                 book-python-auto-test-番外篇--接口测试1

                                                                             --lamecho辣么丑

1.1概要

 

      大家好! 我是lamecho(辣么丑),至今《安卓app自动化测试》已经推出了三篇,今天将推出一篇python在自动化测试应用的一个番外篇,接口API测试。

 

1.2接口测试理论

 

      我们先来认识一下接口是什么,什么又是接口测试。由于我的文章一贯秉承实战为主,对于理论概念性的东西我也尽量讲的通俗易懂一些,比如说接口,我不会把纯理论的含义复制粘贴过来完事。好,闲话说到这,我举个简单的例子来说明什么是接口,对于我们测试人员来说怎么样做好接口测试。比如说某个公司的一个网站有个功能是用来查询一个城市的天气情况,而这个公司也有对应的app应用同样可以做城市的天气查询,那么程序实现上不会在网站开发一套天气查询功能,手机app也去开发一套城市查询功能吧。理解到这里大家应该明白我们只需要在服务器端开发这个功能,只要我们的服务器提供一套方法让外部的程序去使用就好了,不管是web还是app你只要去使用服务端提供的天气查询功能就好了,后面就是各自前台展示的问题了。所以这里服务器端提供出来的这套方法就是接口,通俗讲就是方法,只要知道接口的地址及参数的传递谁都可以来调用这个方法来获取天气情况。

      那么我们再思考一下,平时我们做的黑盒测试不就是在网站或者app上去执行天气查询的功能吗,根据具体的功能再去考虑测试用例编写。而接口测试就是在网站和app还未能完成前端的功能展示时,我们提前针对天气查询这个功能做测试,和黑盒测试区别就在于我们不是测试眼睛看到的实实在在的界面操作,而是通过程序调取后台的方法(接口)完成测试而已。那么我们的接口测试原则来说和黑盒测试的测试思路是一样的,在做黑盒测试时你要设计什么测试用例,在做接口测试时也同样的要去这样去设计测试用例,只是没有了UI界面方面的测试内容。比如在做app端的测试时,我们是不是要设计一条输入空内容的案例去做天气查询,看看我们的app怎么去处理,是弹出提示框提示输入内容为空还是任何反应都没有,反正只要程序不报错崩溃就行了。然后我们看看具体在做接口测试时,要怎么做呢?同样的我们也要在接口传递参数时,设计一条这样传递空字符串的接口案例,再去检查服务返回内容是什么,是服务返回400报错还是返回200正常,而正常的返回的内容又是什么。

      所以综述上面讲的,只要我们大家能够做好黑盒测试,再理解了什么是接口,不存在怎么做接口测试的问题。

      最后再说说接口的请求一般有4种,但是我们一般用到的最多的就是POSTGET

两种方式。区别在于GET是不传递参数的请求,POST是需要传递参数的请求。

 

1.3 Python实现的接口测试

 

      本节我们就进入到接口测试的实战,原谅我上一节blabla说一大推,说好的实战呢,呵呵。好,今天我将利用网上现成的两个不同功能的接口去给大家讲解python在接口方面的应用。其实自己公司的就有一套但接口测试脚本,但辣么丑还是要顾及一下公司的感受的。

一般来说做接口测试,我们应当手上能够拿到后台开发提供的接口文档,但是我今天给大家找的是网络上的案例,我也尽可能的讲的详细一些。

      首先我们先来看看这两个接口实现的功能,第一个是

http://www.webxml.com.cn/WebServices/WeatherWebService.asmx

大家可以在浏览器里打开这个网址,没错是一个做天气查询的接口。

第二个

http://www.gpsso.com/WebService/Dream/Dream.asmx?op=SearchDreamInfo

呵呵,一个周公解梦的,声明不是在这里宣传迷信。而这个我之前还在我的微信公众号里实现了解梦的功能。

      鉴于我啰嗦了这么久,我就直接先上一段python代码,先感性的认识一下。


我们点开页面里的getSupportCity 字面意思去理解获取支持的城市,显而易见是一个查看系统支持哪些城市的接口方法。我们在新页面的滚动到最下面看到如下图的内容,看到没,刚才讲到的GET,POST出现了。我们先来看看GET,介绍了上面是请求,下面是服务器的返回。如果你请求对了服务器会返回给你200 OK,然后是具体的结果。

 


看看我们的Python代码中的内容

# -*-coding:utf8-*-

import json

import urllib

import urllib2

 

url='http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity?byProvinceName='

ret=urllib2.urlopen(url)

print ret.read()

 

执行我们的脚本后,看看打印的返回结果


结果还很长只截取了开头的部分。看到这样的结果表示我们的接口请求成功了,并获得了支持的城市名称<string>城市</string>,城市后面括号里是对应的城市代码。回到我们的脚本中看看代码的实现。import urllib2表示我们在python中导入了urllib2这个包,当然后面就是通过urllib2进行的接口访问,具体的执行也很简单3行。第一行拼接我们需要访问的接口地址,那么我们来看看接口地址怎么得到的呢?回到我们的网页里找到GET里的介绍:

GET /WebServices/WeatherWebService.asmx/getSupportCity?byProvinceName=string HTTP/1.1

Host: www.webxml.com.cn

自然我们的url拼接起来就是host+get里边的内容,而?byProvinceName=string后面的string是要我们传递的参数,这里的传递参数要区别一下post传递参数,这里是直接在网址里去传,一般是?后面就是参数了。最后的string就是具体我们要传的内容,比如我们要查询是不是支持北京这个城市,就把string替换成北京。当然我们的脚本里是什么都没传,也就是表示传的是个空值,在接口说明里提到了这样的话:“输入参数:byProvinceName =指定的洲或国内的省份,若为ALL或空则表示返回全部城市;返回数据:一个一维字符串数组String(),结构为:城市名称(城市代码)如果我们传递的是ALL或是空的话是返回全部的城市。那么我们如果要传递一个具体的城市名称呢?比如辣么丑所在的西安,我们要这样写

url='http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity?byProvinceName='+u'西安'.encode('utf-8')

执行以下看看结果


      返回的结果也正常,不过居然不支持我大西安,鄙视一下。说到这里,我们回过头再谈谈我们的接口测试方法上,我们在这个接口上目前为止实现了两种类型的参数传递,并得到了正常的返回结果。那我们如果放到实际的工作或项目上,是不是类似我们在做黑盒的功能测试呢,展开点你可以把设计的功能测试案例的思路方法运用到接口测试上来。

 

好了,由于篇幅限制,我们只是实现了天气查询的一个接口的实现,下一个《book-python-auto-test-番外篇-接口2》我将继续本篇的内容,将天气查询的另一个获取具体城市的天气预报接口和第二个解梦的接口用python实现出来。最后感谢大家耐心读完本篇文章,我是lamecho,辣么丑。

 

原创文章,转载请注明出处。

欢迎关注我的个人微信号”fire-bug“,了解最新文章或提出你的问题和观点

微博:https://weibo.com/u/6017986584

 

 


TAG: python接口测试

引用 删除 phyllisqq   /   2019-10-29 09:26:53
5
 

评分:0

我来说两句

lamecho

lamecho

博客文章全为原创,欢迎转载但请说明出处 欢迎关注我的微信号,搜索“fire-bug“捉虫师

日历

« 2024-04-16  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 44703
  • 日志数: 17
  • 图片数: 1
  • 建立时间: 2017-03-17
  • 更新时间: 2017-10-16

RSS订阅

Open Toolbar