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]这种方式去取,看起来较直观,知道取得是哪个接口的那部分信息。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017-06-09 14:09
# canshuxinxi.py # 接口信息
API_ALL = {
'登录接口': {
'number': '',
'url': 'http://www.baidu.com',
'leixing': 'post',
'head': {
'aa': 'bb',
'cc': 'dd',
},
'canshu': {
'username': 'Wbfxs001',
'password': '111111Qq',
'grant_type': 'password',
},
'qiwang': {
'code': 200,
'name': 'Wbfxs001',
},
}, '退出接口': {
'number': '',
'url': 'http://www.baidu.com',
'leixing': 'get',
'canshu': {
'username': 'Wbfxs001',
'password': '111111Qq',
'grant_type': 'password',
}
}
}
changliang.py文件用来存非常规(可能会让接口响应异常)参数,同理也是存放在dict中,方便维护,比如以后要加新的sql注入代码段,可以直接在后面添加
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017-06-09 14:09
# changliang.py # 常用参数不传,为空,整形,浮点,字符串,object,过短,超长,sql注入
objects1 = 'xxxx'
objects2 = 'ssss' ZHCS = {
'为空': [''],
'整形': [10, 23, 44, 88, 99],
'浮点': [1.11, 2.342, -1.03],
'字符串': ['aaaa', 'bbbb', 'cccc','dddd'],
'object': [objects1, objects2],
'过短': ['', ''],
'超长': [''],
'sql注入': [';and 1=1 ;and 1=2', ";and (select count(*) from sysobjects)>0 mssql", ";and 1=(select IS_SRVROLEMEMBER('sysadmin'));--"],
}
# gongju.py作为工具类,下面方法进行了封装,方便调用。实现了对参数进行组合,生产不同组合的dict类型的参数,并将dict参数保存到list中,方便取用。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017-06-09 14:11
# gongju.py # 生成不同组合的参数 class gj(): def listalls(self, csTrue, csFalse):
fzgcs = [] # 得到cycanshu的key,将所有非正规参数放在一个list中
listall = [] # 保存参数dict 为 list
zhcs = dict(csTrue)
listall.append(csTrue)
aaa = list(csFalse.keys())
for i in aaa:
bbb = csFalse[i] # 得到具体参数list
for k in bbb:
fzgcs.append(k) # 便利每一个参数加入fzgcs列表 zhcskey = list(zhcs.keys()) # 拿到将要进行组合的参数
for i in zhcskey:
a = zhcs[i] # 保留原有的参数值,下面替换完后复原正确参数
for k in fzgcs:
zhcs[i] = k
listall.append(str(zhcs))
# 循环完后复原正确参数
zhcs[i] = a
return listall
jiaoben.py文件作为脚本类,用来对组合好的参数进行循环执行,依次带入组合参数请求。(只做了请求和打印响应信息,可再加入对响应结果断言)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017-06-09 14:22
# jiaoben.py from changliang import ZHCS
from canshuxinxi import API_ALL
from gongju import gj
import requests
# 脚本类,组合工具参数进行请求
gj = gj()
def jball():
apikeys = API_ALL.keys()
print(apikeys)
for key in apikeys:
apiname = key
url = API_ALL[key]['url']
number = API_ALL[key]['number']
leixin = API_ALL[key]['leixing']
canshus = gj.listalls(API_ALL[key]['canshu'], ZHCS)
if leixin == 'post':
print("======="+" api名称:"+apiname+"=======")
for cs in canshus:
mp = requests.post(url=url, data=cs)
fhcode = str(mp.status_code)
xysj = str(mp.elapsed.microseconds)
print("=响应=api编号:"+number+" 响应code:"+fhcode+" 响应时间:"+xysj)
if leixin == 'get':
print("======="+" api名称:"+apiname+"=======")
for cs in canshus:
mp = requests.get(url=url, data=cs)
fhcode = str(mp.status_code)
xysj = str(mp.elapsed.microseconds)
print("=响应=api编号:"+number+" 响应code:"+fhcode+" 响应时间:"+xysj)
jball()
tesone.py文件作为用例执行文件,熟悉unittest框架的都清楚其中的原理,就不做多介绍,黑熊主要用来控制脚本的执行,结合了unittest框架后,方便后续的扩展。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2017-06-09 8:53
# tesone.py import requests
import unittest
import time
from jiaoben import jball
class testclassone(unittest.TestCase):
def setUp(self):
print(111)
pass
def test_1(self):
jball() # 执行脚本
pass
def tearDown(self):
print(333)
pass if __name__ == '__main__':
unittest.main()
最后附上用例执行后的效果图:

结语:
期间感谢@我去热饭 饭哥的细心指导,给予点点莫大的帮助,谢谢!
为什么选择?
有的人喜欢创造世界,他们做了程序员
有的人喜欢拯救世界,他们做了测试员
python+requests+unittest API接口测试的更多相关文章
- 基于python+requests的简单接口测试
在进行接口测试时,我们可以使用已有的工具(如:jmeter)进行,也可以使用python+requests进行.以下为简单的接口测试模板: 一.提取常用变量,统一配置 新建一个config.py文件, ...
- python+requests+unittest执行自动化接口测试
1.安装requests.xlrd.json.unittest库 <1>pip 命令安装: pip install requestspip install xlrdpip install ...
- Python + request + unittest实现接口测试框架
1.为什么要写代码实现接口自动化 大家知道很多接口测试工具可以实现对接口的测试,如postman.jmeter.fiddler等等,而且使用方便,那么为什么还要写代码实现接口自动化呢?工具虽然方便,但 ...
- 使用python+requests+unittest实现接口自动化测试
这两天一直在找直接用python做接口自动化的方法,在网上也搜了一些博客参考,今天自己动手试了一下. 一.整体结构 上图是项目的目录结构,下面主要介绍下每个目录的作用. Common:公共方法:主要放 ...
- 在实际工作中使用requests+unittest进行接口测试
之前学习python做接口测试时,用的时requests+excel的方式来进行接口测试,后来在工作中也用unittest来做了一个项目的接口测试,接口测试用例完全基于unittest来编写,把大致步 ...
- python+requests+unittest 接口ddt测试
以数据驱动的形式,将用例维护在py文件中 源码分析: 变量定义 publicParameters.py """ 公共参数 , 按照各公司实情,自行编写 "&qu ...
- Python+requests+unittest+excel实现接口自动化测试框架
一.框架结构: 工程目录 二.Case文件设计 三.基础包 base 3.1 封装get/post请求(runmethon.py) import requests import json class ...
- Python+requests+unittest+excel实现接口自动化测试框架(摘录)
一.框架结构: 工程目录 二.Case文件设计 三.基础包 base 3.1 封装get/post请求(runmethon.py) 1 import requests 2 import json 3 ...
- Python+requests+unittest+excel实现接口自动化测试框架(转
一.框架结构:工程目录 二.Case文件设计三.基础包 base 3.1 封装get/post请求(runmethon.py) import requests import json class Ru ...
随机推荐
- 使用JS控制伪元素的几种方法
一. 缘由: 本文源于在OSC社区中,有人提问如何用jq获取伪元素.我第一想法是强大的CSS Query应该可以获取伪元素吧. 然而事实上,CSS Query并不能.即我们不能通过$(":b ...
- nginx源码分析——http模块
源码:nginx 1.12.0 一.nginx http模块简介 由于nginx的性能优势,现在已经有越来越多的单位.个人采用nginx或者openresty. ...
- java运算符 与(&)、非(~)、或(|)、异或(^)
最近看HashMap源码,遇到了这样一段代码: static final int hash(Object key) { int h; return (key == null) ? 0 : (h = k ...
- 篇3 安卓app自动化测试-搞定界面元素
篇3 安卓app自动化测试-搞定界面元素 --lamecho辣么丑 1.1概要 大家好! 我是lamecho(辣么丑),今天是<安卓app自动化测试>的第三 ...
- mac终端ssh连接服务器 空闲的时候 连接断开
ssh_config详解(MAC OSX) 方法1:MAC客户端配置 配置“/etc/ssh/ssh_config”文件 “/etc/ssh/ssh_config” 文件是OpenSSH系统范围的配置 ...
- log4j的Appenders配置
因为是刚开始使用log4j,很多配置方面的东西都不懂,记录下. 下面是我用STS(Spring Tool Suite)新建Spring MVC项目的时候,帮我自动生成的一个log4j.xml配置文件. ...
- TreeSet小练习
package 练习.test1; import java.util.Iterator; import java.util.TreeSet; /* 需求:将字符串中的数值进行排序. 例如String ...
- RocketMQ 介绍与基本使用
介绍 RocketMQ是阿里巴巴自研的第三代分布式消息中间件,是阿里系下开源的一款分布式.队列模型的消息中间件,原名Metaq,3.0 版本名称改为RocketMQ,是阿里参照kafka设计思想使用J ...
- Linux 按时间批量删除文件(删除N天前文件)
需要根据时间删除这个目录下的文件,/home/lifeccp/dicom/studies,清理掉20天之前的无效数据. 可以使用下面一条命令去完成: -name "*.*" -ex ...
- Java中处理二进制移位
我相信,这篇文章读起来会相当有趣. 文章中编程语言是Java,用Java的原因:第一,Java不做数据溢出校验,这样我们可以忽略溢出异常:第二,Java普及率比较高,就像是python或shell,几 ...