python接口测试实例-python接口测试浅谈

我从工作后接触接口自动化后,就一直在用phpunit编写自动化测试用例,个人感觉在接口调用和对结果的判断上,还是挺方便的。而且以前用过php的CI框架开发接口测试工具,方便快捷,和phpunit调用接口接合的比较好。最近学习了一下python的接口测试,发现也挺好用的,就总结一下,希望对想学习用python做接口自动化的同学有所帮助。

一,

利用urllib,urllib2模块

Python可以利用这两个模块完成对接口的操作,不过写一个完整的接口自动化测试用例,还需要有丰富的Assert语句来支持,所以我们还要引用另外一个模块unittest。至于模块如何安装,请自行查询,本处不在讲解,我们直接上代码实例:

#!/usr/bin/env

python

# -*- coding: utf_8 -*-

import urllib2,urllib

import json

import unittest, time,

re

class APITest():

"""

接口测试类

"""

def apicall(self,method,url,getparams,postparams):

str1=""

#GET方法调用

if method=="GET":

if getparams!="":

for k in getparams:

str1=str1+k+"="+urllib2.quote(str(getparams.get(k)))

if len(getparams)>2:

str1=str1+"&"

url=url+"&"+str1;

result = urllib2.urlopen(url).read()

#POST方法调用

if method=="POST":

if postparams!="":

data = urllib.urlencode(postparams)

req = urllib2.Request(url, data)

response = urllib2.urlopen(req)

result = response.read()

jsdata=json.loads(result)

return jsdata

class APIGetAdList(unittest.TestCase):

def test_call(self):

api=APITest()

getparams={"keyword":"测试"}

postparams=""

data=api.apicall("GET","http://api.zhongchou.cn/deal/list?v=1",getparams,postparams)

print data

if(data["errno"]!=""):

self.assertEqual(0, data["errno"])

print "接口

deal/list

------------OK!"

else:

print "接口

deal/list

------------Failure!"

self.assertEqual(0, data["errno"])

if __name__ == "__main__":

unittest.main()

代码讲解:

(1)定义通用的接口调用类APITest,接口调用函数apicall().

(2)在接口调用函数中,我们通过method参数来区分接口的调用类型Get or Post,url为接口调用地址,getparams,postparams参数根据接口调用方法的不同,分别传值或是空。

(3)函数体内为对参数的不同处理,以及根据不同的调用类型来分别调用接口。

(4)jsdata=json.loads(result)为对接口返回值做json解码,这样方便我们对结果进行判断。

(5)APIGetAdList(unittest.TestCase)为具体的测试用例类,其实这两个类应该写到两个文件中的,作为Demo,我就写到一起了。在这个类中对接口进行具体的调用,然后根据返回结果,对测试用例置成功或是失败。

(6)最后调用unittest执行测试用例。根据执行情况,输出具体的结果。由于篇幅原因,我们不可能对实例进行一句一句的讲解,如有不明白的地方,请自行查阅。

二,

利用requests模块

requests是python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?官方文档中是这样说明的:

python的标准库urllib2提供了大部分需要的HTTP功能,但是API太逆天了,一个简单的功能就需要一大堆代码。

于是我也尝试了一下,发现还挺好用的,而且网上也有很多相关的教程,我们也不做太多详细的讲解。

实例:

#!/usr/bin/env

python

# -*- coding: utf_8 -*-

import requests

import unittest

import json

class CallApi():

def apicall(self,method,url,getparams,postparams):

result=""

if method=="GET":

if getparams!="":

result=requests.get(url,getparams)

else:

result=requests.get(url)

if method=="POST":

if postparams!="":

result=requests.post(url,postparams)

jsdata=json.loads(result.text)

return jsdata

class APIGetAdList(unittest.TestCase):

def test_call(self):

api=CallApi()

getparams=""

postparams=""

data=api.apicall("GET","http://api.zhongchou.cn/index/getadlist?v=1", getparams,

postparams)

if(data["errno"]!=""):

self.assertEqual(0, data["errno"])

print "接口

index/getadlist------------OK!"

else:

print "接口

index/getadlist------------Failure!"

self.assertEqual(0, data["errno"])

if __name__ == "__main__":

unittest.main()

代码讲解:

(1)CallApi类为调用接口通用类,apicall为具体的调用函数。

(2)在接口调用函数中,我们通过method参数来区分接口的调用类型Get or Post,url为接口调用地址,getparams,postparams参数根据接口调用方法的不同,分别传值或是空。

(3)函数体内为对参数的不同处理,以及根据不同的调用类型来分别调用接口。

(4)jsdata=json.loads(result)为对接口返回值做json解码,这样方便我们对结果进行判断。

(5)这个requests模块和上面的类似,只是调用方法不太一样,而且不需要对参数进行特殊的处理,只要传递的时候是字典类型的就可以了。

(6)APIGetAdList这个类是具体的测试类函数,作用和上面的一样,在此不做详解。

三,

自己编写框架实现

这种方法我是在网上看到的,感觉也不错,自己写了个框架,用Excell文件来组织测试用例,然后读取数据进行执行。由于内容较多,我们也尊重原作者,就不在此转载了,提供地址,感觉兴趣的同学可以自己去学习一下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值