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

问题:

测试接口时,比如参数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接口测试的更多相关文章

  1. 基于python+requests的简单接口测试

    在进行接口测试时,我们可以使用已有的工具(如:jmeter)进行,也可以使用python+requests进行.以下为简单的接口测试模板: 一.提取常用变量,统一配置 新建一个config.py文件, ...

  2. python+requests+unittest执行自动化接口测试

    1.安装requests.xlrd.json.unittest库 <1>pip 命令安装: pip install requestspip install xlrdpip install ...

  3. Python + request + unittest实现接口测试框架

    1.为什么要写代码实现接口自动化 大家知道很多接口测试工具可以实现对接口的测试,如postman.jmeter.fiddler等等,而且使用方便,那么为什么还要写代码实现接口自动化呢?工具虽然方便,但 ...

  4. 使用python+requests+unittest实现接口自动化测试

    这两天一直在找直接用python做接口自动化的方法,在网上也搜了一些博客参考,今天自己动手试了一下. 一.整体结构 上图是项目的目录结构,下面主要介绍下每个目录的作用. Common:公共方法:主要放 ...

  5. 在实际工作中使用requests+unittest进行接口测试

    之前学习python做接口测试时,用的时requests+excel的方式来进行接口测试,后来在工作中也用unittest来做了一个项目的接口测试,接口测试用例完全基于unittest来编写,把大致步 ...

  6. python+requests+unittest 接口ddt测试

    以数据驱动的形式,将用例维护在py文件中 源码分析: 变量定义 publicParameters.py """ 公共参数 , 按照各公司实情,自行编写 "&qu ...

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

    一.框架结构:  工程目录 二.Case文件设计 三.基础包 base 3.1 封装get/post请求(runmethon.py) import requests import json class ...

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

    一.框架结构:  工程目录 二.Case文件设计 三.基础包 base 3.1 封装get/post请求(runmethon.py) 1 import requests 2 import json 3 ...

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

    一.框架结构:工程目录 二.Case文件设计三.基础包 base 3.1 封装get/post请求(runmethon.py) import requests import json class Ru ...

随机推荐

  1. Linux防火墙配置—允许转发

    一.实验目标 在上一次"Linux基础网络搭建实验"中,内.外网虚拟机之所以能Ping通,是因为暂时关闭了防火墙,然而现实中这样操作显然存在很大的安全隐患,所以本次实验在上次实验的 ...

  2. 事件的preventDefault方法

    事件有一个preventDefault()方法,该方法可以用来取消事件的默认行为.许多事件都有默认执行的关联行为.例如,如果用户在文本字段中键入一个字符,则默认行为就是在文本字段中显示该字符.由于可以 ...

  3. MySQL操作(二)MySQL配置文件

    1.正常安装之后,有安装目录,我的直接安装在默认目录下,即 C:\Program Files\MySQL\MySQL Server 5.7 目录下 而数据存储在 C:\ProgramData\MySQ ...

  4. 带你玩转 jQuery

    一.简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库.源码戳这 jQuery对象 jQuery产 ...

  5. 《Thinking in Java》 And 《Effective Java》啃起来

    前言 今天从京东入手了两本书,<Thinking in Java>(第四版) 和 <Effective Java>(第二版).都可以称得上是硬书,需要慢慢啃的,预定计划是在今年 ...

  6. 玩转mongodb(九):通过log4jmongo来实现分布式系统的日志统一管理

    背景 在分布式系统中,我们有多个web app,这些web app可能分别部署在不同的物理服务器上,并且有各自的日志输出.当生产问题来临时,很多时候都需要去各个日志文件中查找可能的异常,相当耗费人力. ...

  7. iOS刨根问底-深入理解RunLoop

    开源的RunloopRef 通常所说的RunLoop指的是NSRunloop或者CFRunloopRef,CFRunloopRef是纯C的函数,而NSRunloop仅仅是CFRunloopRef的OC ...

  8. IOS开发常用的基础方法

    .//退出键盘 [self.view endEditing:YES]; 隐藏手机上方的状态栏 -(BOOL)prefersStatusBarHidden{ return YES; } //获取当前控制 ...

  9. 工具类总结---(四)---Sharedpreferences保存

    用于保存具有对应关系的键值对 import android.content.Context; import android.content.SharedPreferences; import java ...

  10. hdu1507 Uncle Tom's Inherited Land* 二分匹配

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1507 将i+j为奇数的构成x集合中 将i+j为偶数的构成y集合中 然后就是构建二部图 关键就是构图 然 ...