python+requests+unittest API接口测试

黑熊再网上查找了下接口测试相关的资料,大都重点是以数据驱动的形式,将用例维护在文本或表格中,而没有说明怎么样去生成想要的用例,

问题:

测试接口时,比如参数a,b,c,我要先测a参数,有(不传,为空,整形,浮点,字符串,object,过短,超长,sql注入)这些情况,其中一种情况就是一条用例,同时要保证b,c的正确,确保a的测试不受b,c参数的错误影响

解决思路:

符合接口规范的参数可以手动去填写,或者准备在代码库中。那些不符合规范的参数(不传,为空,整形,浮点,字符串,object,过短,超长,sql注入)也可以准备在库中作为常量反复使用

主要实现的功能点:

1.api参数整理到dict中,方便组合参数生成用例

2.对生成的用例进行循环执行

3.封装些许代码便于使用和维护

源码分析:

canshuxinxi.py文件用来存放api接口信息。以dict形式存放,这样就可以API_ALL[‘登录接口‘][url]这种方式去取,看起来较直观,知道取得是哪个接口的那部分信息。

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 # @Time    : 2017-06-09 14:09
 4 # canshuxinxi.py
 5
 6 # 接口信息
 7 API_ALL = {
 8             ‘登录接口‘: {
 9                             ‘number‘: ‘1‘,
10                             ‘url‘: ‘http://www.baidu.com‘,
11                             ‘leixing‘: ‘post‘,
12                             ‘head‘: {
13                                         ‘aa‘: ‘bb‘,
14                                         ‘cc‘: ‘dd‘,
15                                         },
16                             ‘canshu‘: {
17                                         ‘username‘: ‘Wbfxs001‘,
18                                         ‘password‘: ‘111111Qq‘,
19                                         ‘grant_type‘: ‘password‘,
20                                     },
21                             ‘qiwang‘: {
22                                         ‘code‘: 200,
23                                         ‘name‘: ‘Wbfxs001‘,
24                                         },
25                         },
26
27             ‘退出接口‘: {
28                             ‘number‘: ‘1‘,
29                             ‘url‘: ‘http://www.baidu.com‘,
30                             ‘leixing‘: ‘get‘,
31                             ‘canshu‘: {
32                                         ‘username‘: ‘Wbfxs001‘,
33                                         ‘password‘: ‘111111Qq‘,
34                                         ‘grant_type‘: ‘password‘,
35                                       }
36             }
37 }

changliang.py文件用来存非常规(可能会让接口响应异常)参数,同理也是存放在dict中,方便维护,比如以后要加新的sql注入代码段,可以直接在后面添加

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 # @Time    : 2017-06-09 14:09
 4 # changliang.py
 5
 6 # 常用参数不传,为空,整形,浮点,字符串,object,过短,超长,sql注入
 7 objects1 = ‘xxxx‘
 8 objects2 = ‘ssss‘
 9
10 ZHCS = {
11             ‘为空‘: [‘‘],
12             ‘整形‘: [10, 23, 44, 88, 99],
13             ‘浮点‘: [1.11, 2.342, -1.03],
14             ‘字符串‘: [‘aaaa‘, ‘bbbb‘, ‘cccc‘,‘dddd‘],
15             ‘object‘: [objects1, objects2],
16             ‘过短‘: [‘1‘, ‘0‘],
17             ‘超长‘: [‘11111111111111111111111111111111111111111111111‘],
18             ‘sql注入‘: [‘;and 1=1 ;and 1=2‘, ";and (select count(*) from sysobjects)>0 mssql", ";and 1=(select IS_SRVROLEMEMBER(‘sysadmin‘));--"],
19          }
# gongju.py作为工具类,下面方法进行了封装,方便调用。实现了对参数进行组合,生产不同组合的dict类型的参数,并将dict参数保存到list中,方便取用。
 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 # @Time    : 2017-06-09 14:11
 4 # gongju.py
 5
 6 # 生成不同组合的参数
 7
 8 class gj():
 9
10     def listalls(self, csTrue,  csFalse):
11         fzgcs = []  # 得到cycanshu的key,将所有非正规参数放在一个list中
12         listall = []  # 保存参数dict 为 list
13         zhcs = dict(csTrue)
14         listall.append(csTrue)
15         aaa = list(csFalse.keys())
16         for i in aaa:
17             bbb = csFalse[i]  # 得到具体参数list
18             for k in bbb:
19                 fzgcs.append(k)  # 便利每一个参数加入fzgcs列表
20
21         zhcskey = list(zhcs.keys())  # 拿到将要进行组合的参数
22         for i in zhcskey:
23             a = zhcs[i]  # 保留原有的参数值,下面替换完后复原正确参数
24             for k in fzgcs:
25                 zhcs[i] = k
26                 listall.append(str(zhcs))
27             # 循环完后复原正确参数
28             zhcs[i] = a
29         return listall
jiaoben.py文件作为脚本类,用来对组合好的参数进行循环执行,依次带入组合参数请求。(只做了请求和打印响应信息,可再加入对响应结果断言)
 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 # @Time    : 2017-06-09 14:22
 4 # jiaoben.py
 5
 6 from changliang import ZHCS
 7 from canshuxinxi import API_ALL
 8 from gongju import gj
 9 import requests
10 # 脚本类,组合工具参数进行请求
11 gj = gj()
12 def jball():
13     apikeys = API_ALL.keys()
14     print(apikeys)
15     for key in apikeys:
16         apiname = key
17         url = API_ALL[key][‘url‘]
18         number = API_ALL[key][‘number‘]
19         leixin = API_ALL[key][‘leixing‘]
20         canshus = gj.listalls(API_ALL[key][‘canshu‘], ZHCS)
21         if leixin == ‘post‘:
22             print("======="+" api名称:"+apiname+"=======")
23             for cs in canshus:
24                 mp = requests.post(url=url, data=cs)
25                 fhcode = str(mp.status_code)
26                 xysj = str(mp.elapsed.microseconds)
27                 print("=响应=api编号:"+number+"  响应code:"+fhcode+"  响应时间:"+xysj)
28         if leixin == ‘get‘:
29             print("======="+" api名称:"+apiname+"=======")
30             for cs in canshus:
31                 mp = requests.get(url=url, data=cs)
32                 fhcode = str(mp.status_code)
33                 xysj = str(mp.elapsed.microseconds)
34                 print("=响应=api编号:"+number+"  响应code:"+fhcode+"  响应时间:"+xysj)
35 jball()
tesone.py文件作为用例执行文件,熟悉unittest框架的都清楚其中的原理,就不做多介绍,黑熊主要用来控制脚本的执行,结合了unittest框架后,方便后续的扩展。
 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 # @Time    : 2017-06-09 8:53
 4 # tesone.py
 5
 6 import requests
 7 import unittest
 8 import time
 9 from jiaoben import jball
10 class testclassone(unittest.TestCase):
11     def setUp(self):
12         print(111)
13         pass
14     def test_1(self):
15         jball()  # 执行脚本
16         pass
17     def tearDown(self):
18         print(333)
19         pass
20
21
22 if __name__ == ‘__main__‘:
23     unittest.main()

最后附上用例执行后的效果图:

结语:

接口测试涉及的东西还真不少,也只能一步一个脚印去探索和学习,期间感谢@我去热饭  饭哥的细心指导,给予黑熊莫大的帮助,谢谢!同时也欢迎道友们一起来交流,黑熊QQ:915069792

为什么选择?

有的人喜欢创造世界,他们做了程序员

有的人喜欢拯救世界,他们做了测试员

时间: 2024-11-03 05:41:36

python+requests+unittest API接口测试的相关文章

使用requests+unittest进行接口测试

之前学习python做接口测试时,用的时requests+excel的方式来进行接口测试,后来在工作中也用unittest来做了一个项目的接口测试,接口测试用例完全基于unittest来编写,把大致步骤记录一下. 项目背景 之前公司的测试并没有在前期就介入项目,即使是接口测试,也是在研发人员完成项目开发后再进行的接口校验,其实更接近于验证一下接口功能是否正常实现了,一般这种工作我更喜欢使用postman来进行,一个一个把接口录入postman,每个都单独校验一下,最终也会形成一套测试脚本(对于没

Python+requests+unittest+excel实现接口自动化测试框架

一.框架结构:  工程目录 二.Case文件设计 三.基础包 base 3.1 封装get/post请求(runmethon.py) 1 import requests 2 import json 3 class RunMethod: 4 def post_main(self,url,data,header=None): 5 res = None 6 if header !=None: 7 res = requests.post(url=url,data=data,headers=header)

Python+requests+unittest+excel实现接口自动化测试框架(摘录)

一.框架结构:  工程目录 二.Case文件设计 三.基础包 base 3.1 封装get/post请求(runmethon.py) 1 import requests 2 import json 3 class RunMethod: 4 def post_main(self,url,data,header=None): 5 res = None 6 if header !=None: 7 res = requests.post(url=url,data=data,headers=header)

基于Python Requests的数据驱动的HTTP接口测试

发表于:2017-8-30 11:56  作者:顾翔   来源:51Testing软件测试网原创 http://www.51testing.com/html/69/n-3720769-2.html 1.测试金字塔 图 1软件测试金字塔 图 1是Main Cohn提出的软件测试金字塔,他认为作为一个测试工程师应该把大量的工作花在单元测试和接口测试,而其余的发在UI测试以及探索式测试.纵然,单元测试的优点很突出,它接近于代码本身,运行速度快,开发可以一边写产品代码一边写单元测试代码,一旦在单元测试中

Python+Requests接口测试教程(1):Fiddler抓包工具

本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测试和python+requests自动化的,首先本书确实写的比较基础,对基础内容也写的很详细,所以大神绕道. 为什么要先学fiddler? 学习接口测试必学http协议,如果直接先讲协议,我估计小伙伴们更懵,为了更好的理解协议,先从抓包开始.结合抓包工具讲http协议更容易学一些. 1.1 抓fir

使用python+pychram进行API测试(接口测试)初级STEP 1

花了一天时间安装了解了下最基本的python+pychram进行API测试,下面这个可以指导自己以后入门:基本的开发级别还需要学习 1.python下载地址:https://www.python.org/about/当前下载版本:python 2.7.12 2.下载完成进行环境变量配置配置python环境变量:E:\Python27\python\;E:\Python27\python\Scripts (根据你自己安装地址) 3.使用pipcmd进入E:\Python27\python\Scri

python+requests接口自动化测试框架实例详解教程

转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实现的接口自动化框架详细教程 前段时间由于公司测试方向的转型,由原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测试,后来,组内有人讲原先web自动化的测试框架移驾成接口的自动化框架,使用的是java语言,但对于一个学java,却在学python的我来说,觉得python比起java更简单些,所以,我决定自

python+requests接口自动化测试框架实例详解

前段时间由于公司测试方向的转型,由原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测试,后来,组内有人讲原先web自动化的测试框架移驾成接口的自动化框架,使用的是java语言,但对于一个学java,却在学python的我来说,觉得python比起java更简单些,所以,我决定自己写python的接口自动化测试框架,由于本人也是刚学习python,这套自动化框架目前已经基本完成了,于是进行一些总结,便于以后回顾温习,有许多不完善的地方,也遇到

集成unittest做接口测试

unittest接口测试 上篇已经讲了接口测试的做法,利用的是postman工具,工具始终是工具,它有一定的局限性,比如测试数据的存放,断言的方法以及上下接口关联使用灵活性.python对http接口封装了一个requests库可以调用接口,结合unittest单元测试框架可以完美测试. 简单实例 import unittest import requests class GetEventListTest(unittest.TestCase): """查询发布会接口测试&qu