包含python接口测试函数的词条

用python实现接口测试(十、Yaml操作)

前言

成都创新互联公司2013年成立,先为独山等服务建站,独山等地企业,进行企业商务咨询服务。为独山企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

什么是YAML?

YAML参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822。 Clark Evans在2001年5月在首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者。

YAML是"YAML Ain't a Markup Language"(YAML不是一种置标语言)的递归缩写。 在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种置标语言),

格式及示例

数据结构可以用类似大纲的缩排方式呈现,结构通过缩进来表示,连续的项目通过减号“-”来表示,map结构里面的key/value对用冒号“:”来分隔。

示例:

PyYAML是一个Python的YAML解析器。

安装指令:pip   install    PyYaml

官网地址: 网站

示例1

示例2

python http接口测试脚本怎么写

1. 用Python封装被测试接口,对于HTTP接口我们通常会采用 GET和POST 2种调用方式去访问,所以必须把这2种方式都封装进去

# -*- coding:gb2312 -*-

import urllib2,urllib

'''

函数说明:url 特殊字符编码转换

作者:xiaonan

输入参数:待转换的字符串数据

输出参数:转换完成后的字符串数据

'''

def urlcode(data):

return urllib2.quote(str(data))

'''

函数说明:获取用户信息的API接口

作者:xiaonan

输入参数:用户名(uname),HTTP接口调用方式(GET或者POST)

输出参数:HTTP接口调用返回数据

'''

def GetUserInfo(uname,method):

if method == 'GET':

url = ''+urlcode(uname)

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

return result

if method == 'POST':

url = ''

values = {'uname' : uname}

data = urllib.urlencode(values)

req = urllib2.Request(url, data)

response = urllib2.urlopen(req)

result = response.read()

return result

2. 编写、组织测试脚本, 准备测试数据

根据Testcase的具体业务逻辑用事先准备好的测试数据去调用封装好的API接口,验证实际返回结果是否与预期返回结果一致.

测试数据可以以各种形式存放,如Excel数据表:

TestCaseName uname method Expected Result

TestCase1 aaaa GET ....

TestCase2 aaaa POST ....

TestCase3 bbbb GET ....

... ... ... ....

# -*- coding:gb2312 -*-

import xlrd

'''

函数说明: Testcase 脚本

作者:xiaonan

输入参数:测试数据,API接口

输出参数:测试日志,测试报告

'''

def GetUser():

bk = xlrd.open_workbook(excel文件名称) # 打开excel文件

sh = bk.sheet_by_name(excel表名)# 打开excel表

nrows = sh.nrows # 获取总行数

for i in range(1,nrows):

TestCase = sh.cell_value(i,0)

uname = sh.cell_value(i,1)

method = sh.cell_value(i,2)

EX_Result=sh.cell_value(i,3)

WriterLog('Testcase Name:'+TestCase+'TestData: uname = '+uname+' ,method = '+method+' ,EX_Result = ' + ,EX_Result) # 写测试日志

AC_result = GetUserInfo(uname,method) # 调用API接口

WriterLog('AC_result = ' + AC_result) # 写测试日志

if EX_Result == AC_result: #实际结果与预期结果对比

WriterLog(...) #写测试日志

WriterReport(...)#写测试报告

else

WriterLog(...)#写测试日志

WriterReport(...)#写测试报告

3. 组织测试套,用驱动文件去调用执行所有测试套件,完成相关测试,并生成测试日志及测试报告.

# -*- coding:gb2312 -*-

'''

函数说明: Testsuit Driver驱动脚本

作者:xiaonan

输入参数:TestCase 脚本

输出参数:测试日志,测试报告

'''

if __name__ == '__main__':

...

WriterLog() #写测试日志

GetUser() # TestCase 脚本

...

...

Report(....) # 统计汇总所有测试报告数据,以文件或页面形式呈现.

4. 执行测试脚本,分析测试结果. 根据测试报告,如果有Bug则提交.

用 Python 为接口测试自动生成用例

基于属性的测试 会产生大量的、随机的参数,特别适合为单元测试和接口测试生成测试用例

尽管早在2006年haskell语言就有了 QuickCheck 来进行”基于属性的测试“,但是目前来看这依然是一个比较小众的领域,参考资料有限,本文如有不足,欢迎指正。

在过去的测试实践中,执行测试时通常需要明确的内容(Value):

这些内容可以通过”判定树“或者”判断表“来表示,然后测试的执行过程变成了这样

可以称为 基于表的测试

在最初,这给了我们测试的方向,但是缺点也非常明显:

你要足够多的"X-Y" 才能可能覆盖到隐蔽的bug。

这里请大家回答几个问题:

如果以上问题的答案不是yes,那么 基于属性的测试 就是你需要掌握的东西!

基于属性的测试和基于表的测试,最大的区别可以这样描述:

vs

于是利用工具生成大量的X类数据,进行测试,并验证结果是否Y类。

值得注意的是:

在不同的语言中有不同的工具来实现,比如:

本文以python为例进行演示:

假设有add函数,接收两个类型整数参数,并返回它们的相加结果

首先写出一个简单的测试用例

正如前面所说,一个这样的用例,根本没信心覆盖全部的场景,例如:

所以接下来怎么办?

改为基于属性的测试

执行结果

由结果可知,工具根据 参数是整数 这一规范,自动生成、执行了大量的测试用例

接口测试和函数的单元测试非常相似:

此外接口文档作为前后端、甚至测试开发的对接窗口,对参数的要求约定的更加细致,

以OpenAPI为例,每个参数可以有以下属性:

于是为接口生成符合要求的参数就变得可行了,举个例子:

这是以unittest为例进行封装的结果,只需要在TestCase中指定openapi的内容(或路径),

启动测试框架时,会自动读取、解析接口文档,并生成测试用例

下面是部分执行日志,可以看到对接口发送了随机参数,并获得返回值

文章来自

如何使用python根据接口文档进行接口测试

1,关于requests

requests是python的一个http客户端库,设计的非常简单,专门为简化http测试写的。

2,开发环境

mac下面搭建开发环境非常方便。

sudo easy_install pip

sudo pip install requests

测试下:python命令行

import requests

r = requests.get('', auth=('user', 'pass'))

r.status_code

200

r.headers['content-type']

'application/json; charset=utf8'

r.encoding

'utf-8'

r.text

u'{type:User...'

r.json()

{u'private_gists': 419, u'total_private_repos': 77, ...}

开发工具,之前使用sublime,发现运行报错,不识别table字符。

IndentationError: unindent does not match any outer indentation level

非常抓狂的错误,根本找不到代码哪里有问题了。甚至开始怀疑人生了。

python的这个空格区分代码真的非常让人抓狂。开始怀念有大括号,分号的语言了。

彻底解决办法,直接换个IDE工具。使用牛刀,IDA开发。

直接下载社区版本即可,因为就是写个脚本啥的,没有用到太复杂的框架。

果然效果非常好,直接格式下代码,和java的一样好使,可以运行可以debug。右键直接运行成功。

3,测试接口

没有啥太复杂的,直接使用requests框架即可。

#!/usr/bin/python

# -*- coding: utf-8 -*-

################

import requests

#测试百度

def baidu_func(url):

headers = {}

params = {}

req = requests.post(url, headers=headers, params=params)

print(req.text)

if __name__ == '__main__':

url =

baidu_func(url)

4,总结

测试非常重要,尤其是对外的接口出现的漏洞,需要花时间去仔细测试,同时要仔细分析代码。

安全是挺重要的事情,要花时间去琢磨。

python学习还是非常容易学习的,一个小时就能把语法学会。

同时渗透测试,安全扫描的好多工具也是python写的。PyCharm CE版本的开发工具足够强大,能够帮你快速学习python。

如果想快速做点界面的开发,wxPython是非常不错的选择。

python怎么做接口测试工具

之前使用过urllib和urllib2做接口测试,在做的途中,感觉使用urllib2直接进行的get,post 请求并没有那么好用。作为测试人员,所需要的测试工具应当以方便为第一要务,测试的耗时只要是真正的无人值守,耗时不是太久的都可以接受。所以,本人又尝试了一个新的包:requests。

Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它比 urllib 更加 Pythoner。更重要的一点是它支持 Python3 !推荐一篇文章,上面有该包的详细说明 传送门,以下只会写到我用到的部分,所以更多的了解需要自己去搜资料

好了,我们开始吧!!

接口测试中重要的部分:

1.get和post方法

2.用到的参数

3.请求头

4.cookie

5.日志输出

6.如何调试你的程序--借助fiddler

按照以上的顺序,我将一一说明我的搞法,因为编码能力有限,所以可能看着很low

一、get和post

requests包很好的实现了post和get方法,示例:

1 import requests2 response_get = requests.get(url, data, headers, cookies)3 response_post = requests.post(url, data, headers, cookies)

其他的访问方式如put,head等等,用法几乎都是如此,因为没用到,所以省略

现在一般的接口返回值有页面和json俩种,按照需求,可以分别使用response.text或者response.content获取,text获取的是unicode类型的返回值,而content返回值是str类型,所以我一般使用content来获取返回值,因为这样获取的返回值可以直接使用正则或者in的方式来验证返回值结果是否正确。

我自己为了实现接口的自动访问,所以又在requests上面加了一层封装,就像下面这样:

1 def main_get(list_result, cookies): 2     """ 3     用于模拟get请求,返回结果 4     :param list_result:空列表,用于存储结果 5     :param cookies: 登陆后的cookie 6     :return:访问结果 7     """ 8     # List_interface_get写在接口文件里,文件是py格式,然而它本身是字典类型 9     for key in List_interface_get:10         try:11             f1 = requests.get(key, cookies=cookies)12             if f1:13                 print f1.content14                 print List_interface_get[key]+'接口访问成功'15                 split_line()16             list_result.append(f1.content+'||'+key)17             # print f1.read()18         except AssertionError:19             print 'One Error in get'20             pass21     return list_result22 23 24 def main_post(result_list, url_list, param_list, payload_list, note_list, cookies):25     """26     模拟post请求27     :param result_list: 结果字典28     :param url_list: 接口字典29     :param param_list: 入参字典30     :param payload_list: header字典31     :param notelist: 描述字典32     :param cookies: 登录获取的cookie33     :return:填充完成的结果列表34     """35 36     # post这块写的比较low,最好自己搞一个数据结构把它搞定37     for key in range(1, 9):38         a = requests.post(url=url_list[key], data=param_list[key], headers=payload_list[key], cookies=cookies)39         try:40             if a.content:41                 print a.content42                 print note_list[key]+'接口访问成功'43                 split_line()44             result_list.append(a.content+'||'+url_list[key])45         except AssertionError:46             print 'One Error in post'47             pass48     return result_list

二、用到的参数以及请求头

我用的方法是把这些都存放于一个py文件中,当然也可以使用excel或者xml文件,甚至于使用DB。项目紧急,凑合了一下,这里的数据结构主要为了符合上面封装的函数,直接上代码看吧

1 BaseURL = 'https://******.com'  # 测试环境 2 # 使用什么数据结构不重要,关键看实现方法中怎么解析你的测试数据 3 List_interface_get = { 4     BaseURL+'/api/****/****/****?****=1****=375': '描述' 5 } 6 # 以下是用于post的接口 7 List_interface_post = { 8     1: BaseURL+'/api/****/****/****/****' 9 }10 # 以下是用于post的数据11 List_post_param = {12     1: 'new=222222old=111111'13 }14 # 以下是post接口的描述,它是干嘛的15 List_post_note = {16     1: '修改密码'17 }18 # 以下是post用到的请求头19 List_post_header= {20     1: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}21 }

三、cookie

一款产品的接口测试中必定会使用登录状态,需要使用cookie实现,之前写过使用cookiejar获取cookie,requests中获取cookie的方法更为简单,不过首先你得知道是哪个接口set了cookie,不过一般是登录啦。登录接口访问之后set了cookie,那好,就去调用登录接口,然后拿到搞回来的cookie:

# 只需要这样!!login = requests.post(login_url, data=login_data, headers=login_header)

cookie = login.cookies

这个cookie就是登录状态了,拿着随便用,需要登录的就直接cookies=cookies

四、日志输出

这里注意看第二步中接口数据,有接口描述,也有接口是啥,第一步中又把content做成返回值了,具体拼接方式自己想吧,东西全有了,想写啥写啥,还可以加上获取本地时间的api获取接口运行时间,log文件该长啥样是门学问,这里就不献丑了。

五、借用fiddler调试你的脚本

requests允许使用代理访问,这有啥用,真有!fiddler是一款截包改包的工具,而且通过扩展可以进行请求间的比对,这样让你的程序访问的请求和真正正确的请求作对比,为啥我的程序访问出错?是不是缺了请求头?参数是不是丢了?cookie是不是少了?很容易看出来。写法如下:

proxies = {     "http": "",     "https": ""}

requests.post(url, proxies=proxies)

这样就可以走代理了,除fiddler以外还有charles和burp suite可以使用,具体看个人喜好吧。


网站栏目:包含python接口测试函数的词条
链接URL:http://ybzwz.com/article/hsgjep.html